基于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. 硬件连接:

    2. 将OpenMV与STM32通过串口连接。

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

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

    5. 舵机连接到STM32的PWM引脚。

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

    7. 软件准备:

    8. 安装OpenMV IDE。

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

    10. 配置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实现了各个模块的功能,确保了系统的实时性和可靠性。

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

  • 作者:极客小张

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于OpenMV和STM32的车内温度监测与预警系统设计流程

    发表回复