自学内容网 自学内容网

基于OpenMV和STM32的车内温度监测与预警系统设计流程

一、项目概述

随着汽车普及率的增加,车内安全问题日益受到关注。近年来,婴儿甚至成人被锁在车内而导致中暑或晕倒的事件频频发生,严重威胁到人们的生命安全。因此,开发一个有效的车内温度预警系统显得尤为重要。本项目旨在设计一个基于OpenMV和STM32的车内温度监测与预警系统,能够实时监测车内温度,并在检测到异常情况时及时发出警报,以保护被锁人员的安全。

技术栈关键词

  • 硬件:OpenMV,STM32,NB-IOT BC26模块,SIM900A模块,舵机

  • 软件:Haar特征,LBP特征,温度传感器,短信预警,蜂鸣器,风扇控制

  • 通信协议:NB-IOT,串口通信

二、系统架构

设计系统架构

本项目的系统架构设计如下:

  1. OpenMV:负责摄像头的图像采集和人脸识别。

  2. STM32:作为主控单元,负责数据处理、温度监测和各模块的协调。

  3. 舵机:实现360°全方位无死角的人脸追踪。

  4. 温度传感器:实时监测车内温度。

  5. NB-IOT BC26模块和SIM900A模块:用于数据上传和短信预警。

  6. 蜂鸣器和风扇:用于物理降温和声音警报。

系统架构图

摄像头图像
控制舵机
读取温度
温度数据
数据上传
短信预警
蜂鸣器
风扇
OpenMV
STM32
舵机
温度传感器
NB-IOT BC26模块
SIM900A模块
蜂鸣器
风扇

三、环境搭建和注意事项

环境搭建

  1. 硬件连接:

    • 将OpenMV与STM32通过串口连接。

    • 温度传感器连接到STM32的ADC引脚。

    • NB-IOT模块和SIM900A模块通过串口与STM32连接。

    • 舵机连接到STM32的PWM引脚。

    • 蜂鸣器和风扇连接到STM32的GPIO。

  2. 软件准备:

    • 安装OpenMV IDE。

    • 安装STM32开发环境(如Keil、STM32CubeIDE)。

    • 配置NB-IOT模块和SIM900A模块的AT指令集。

注意事项

  • 确保硬件连接稳固,避免短路。

  • 温度传感器的校准,确保其准确性。

  • 进行充分的测试,确保系统在各种环境下正常工作。

四、代码实现过程

在本节中,我们将详细介绍基于OpenMV和STM32的车内温度预警系统的代码实现过程。我们将分模块介绍每个功能的实现,包括人脸识别、温度监测和预警机制。每个模块将配有代码示例和详细说明,最后附上时序图以说明系统的运行时序。

1.OpenMV人脸识别模块

代码示例

import sensor
import image
import time
from pyb import Servo

# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)

# 初始化舵机
s = Servo(1)

while True:
    img = sensor.snapshot()  # 捕获图像
    faces = img.find_faces(0)  # 查找人脸
    if faces:
        for face in faces:
            # 计算舵机转动角度
            x = face.x() + face.w() / 2  # 获取人脸中心x坐标
            angle = (x / 320) * 180  # 将x坐标映射到舵机角度(0到180度)
            s.angle(angle)  # 控制舵机转动到指定角度
    time.sleep(100)  # 每100毫秒检查一次

代码说明

  • 初始化摄像头:通过sensor.reset()重置摄像头,设置图像格式和分辨率。

  • 舵机控制:使用Servo类初始化舵机,并在循环中根据检测到的人脸位置调整舵机角度,实现360°全方位追踪。

  • 人脸识别:调用img.find_faces(0)方法查找图像中的人脸。如果识别到人脸,则计算其中心位置,并将其转换为舵机的控制角度。

  • 循环延时:通过time.sleep(100)设置每100毫秒检查一次人脸,避免频繁检测导致系统负担过重。

2.STM32温度监测和预警模块

代码示例

#include "stm32f4xx.h"
#include "usart.h"
#include "temp_sensor.h"
#include "nb_iot.h"
#include "sim900a.h"

#define TEMP_THRESHOLD 40 // 设置温度阈值

void setup() {
    USART_Init();         // 初始化串口
    TempSensor_Init();    // 初始化温度传感器
    NB_IOT_Init();        // 初始化NB-IOT模块
    SIM900A_Init();       // 初始化SIM900A模块
}

void loop() {
    float temperature = TempSensor_Read(); // 读取温度

    if (temperature > TEMP_THRESHOLD) { // 判断温度是否超过阈值
        SendAlert(temperature); // 发送预警信息
        ActivateBuzzer();       // 激活蜂鸣器
        ActivateFan();          // 启动风扇进行降温
    }

    Delay(1000); // 每隔一秒检查一次温度
}

void SendAlert(float temp) {
    char message[50];
    sprintf(message, "Warning: Temperature exceeds threshold! Current: %.2f°C", temp);
    SIM900A_SendSMS("+1234567890", message); // 发送短信报警
}

void ActivateBuzzer() {
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 启动蜂鸣器
    Delay(500); // 蜂鸣500ms
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 关闭蜂鸣器
}

void ActivateFan() {
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // 启动风扇
}

代码说明

  • 初始化函数:

    • USART_Init():初始化串口通信,用于调试和与其他模块通信。

    • TempSensor_Init():初始化温度传感器,配置其工作参数。

    • NB_IOT_Init()SIM900A_Init():初始化NB-IOT和SIM900A模块,准备好进行数据传输和短信发送。

  • 主循环:

    • 如果超过阈值,调用SendAlert()函数发送预警信息,并激活蜂鸣器和风扇。

    • TempSensor_Read():读取温度传感器的当前温度。

    • 判断温度是否超过设定的阈值(40°C)。

    • Delay(1000):每隔一秒检查一次温度,确保系统能及时响应温度变化。

  • 发送预警信息:

    • 使用sprintf函数格式化消息,包含当前温度。

    • 调用SIM900A_SendSMS()函数发送短信,目标号码需要根据实际情况进行配置。

    • SendAlert(float temp):构建并发送短信预警信息。

  • 激活蜂鸣器:

    • 使用HAL_GPIO_WritePin()函数控制蜂鸣器引脚状态。

    • 蜂鸣器发出500ms的警报音,之后关闭。

    • ActivateBuzzer():通过控制GPIO引脚来启动和停止蜂鸣器。

  • 激活风扇:

    • ActivateFan():控制GPIO引脚来启动风扇,确保在高温情况下能进行物理降温。

3.代码时序图

以下时序图展示了系统各模块之间的交互过程,帮助理解系统的运行时序。

OpenMV STM32 TempSensor NB_IOT SIM900A Buzzer Fan 捕获图像 人脸信息 读取温度 返回温度 检查温度 发送温度数据 发送短信警报 激活蜂鸣器 启动风扇 alt [温度超过阈值] 等待下一次循环 OpenMV STM32 TempSensor NB_IOT SIM900A Buzzer Fan

时序图说明

  • OpenMV模块:在循环中不断捕获图像并进行人脸检测。

  • STM32模块:接收到OpenMV的图像数据后,获取当前温度并判断是否超过设定的阈值。

  • 温度传感器:STM32请求温度数据,返回当前温度值。

  • NB-IOT和SIM900A模块:在温度超过阈值时,STM32通过NB-IOT上传数据,并通过SIM900A发送短信警报。

  • 蜂鸣器和风扇:在接收到过高温度警报时,STM32控制蜂鸣器发出警报声并启动风扇进行降温。

五、项目总结

项目主要功能

本项目成功实现了一个基于OpenMV和STM32的车内温度预警系统,主要功能包括:

  1. 人脸识别和追踪:通过OpenMV实现360°全方位的人脸追踪,确保实时监测车内情况。

  2. 温度监测:利用温度传感器实时监测车内温度,确保及时发现异常情况。

  3. 预警机制:一旦温度超过设定阈值,系统会自动发送短信预警、激活蜂鸣器和风扇进行降温,保障被锁人员的安全。

实现过程总结

  • 在硬件方面,成功集成了OpenMV、STM32、温度传感器、NB-IOT模块和SIM900A模块。

  • 在软件方面,使用了C语言和Python实现了各个模块的功能,确保了系统的实时性和可靠性。

  • 通过时序图清晰地展示了系统的工作流程,便于后续的维护和扩展。


原文地址:https://blog.csdn.net/qq_40431685/article/details/142448441

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!