基于单片机汽车少儿安全预警系统

文章目录

  • 一、前言
    • 1.1 项目介绍
      • 【1】项目开发背景
      • 【2】设计实现的功能
      • 【3】项目硬件模块组成
      • 【4】设计意义
      • 【5】市面上同类产品研究现状
      • 【6】摘要
    • 1.2 设计思路
    • 1.3 系统功能总结
    • 1.4 开发工具的选择
      • 【1】设备端开发
      • 【2】上位机开发
    • 1.5 模块的技术详情介绍
    • 1.6 框架图
      • 框架图说明:
  • 二、代码设计思路
      • 1. **温度传感器 (DHT11)**
      • 2. **人体检测传感器 (海凌科24G毫米波雷达模块 LD2402)**
      • 3. **蜂鸣器 (高电平触发)**
      • 4. **GSM模块 (Air780e)**
      • 5. **按键模块**
      • 6. **电源管理 (12V直流电源模块)**
      • 7. **主控制流程**
      • 8. **液晶显示 (OLED 显示屏)**
  • 三、短信发送
      • 1. **air780e.h**
      • 2. **air780e.c**
      • 说明:
  • 四、STM32主代码

一、前言

1.1 项目介绍

【1】项目开发背景

随着社会经济的不断发展和人们生活水平的提高,汽车已经成为许多家庭日常出行的重要交通工具。尤其是对于有小孩的家庭,家长们往往会在驾驶过程中把儿童留在车内,尤其是在高温天气下,车内温度迅速上升可能会对儿童的身体健康构成严重威胁。由于儿童的身体调节能力较差,长时间暴露在车内高温环境下可能引发中暑、脱水等危险,甚至会造成生命威胁。因此,设计一个针对汽车儿童安全的预警系统显得尤为重要。

传统的安全措施主要依赖家长的记忆与判断,但是随着日常生活节奏的加快,家长可能会忘记车内的儿童,或者误判车内环境。针对这一问题,基于单片机的汽车儿童安全预警系统应运而生。该系统结合温度传感器和人体检测传感器,能够实时监测车内的温度,并判断车内是否有儿童存在。一旦车内温度超过设定阈值,并且传感器检测到有儿童在车内时,系统将通过蜂鸣器报警并通过GSM模块发送短信提醒车主,确保家长及时注意到孩子的安全问题。

该项目不仅仅关注技术实现,还将考虑到人机交互的易用性,用户能够根据实际需求调整温度阈值,同时可以手动关闭报警系统。此外,系统还设置了短信发送的间隔时间,避免了重复报警的情况,保证了系统的稳定性和可靠性。整体来看,该系统的开发旨在通过智能化手段提高儿童在车内的安全性,减少因疏忽造成的安全事故,充分体现了现代智能硬件技术在提升生活质量中的重要作用。

测试模型

image-20250801121343677

image-20250801145010803

【2】设计实现的功能

  1. 实时监控车内温度,并判断是否超过设定的高温阈值。
  2. 人体检测传感器检测车内是否有儿童,并与温度数据结合判断是否触发报警。
  3. 系统当检测到高温且有儿童时,通过蜂鸣器报警。
  4. 系统通过GSM模块向车主发送警报短信,提醒车主车内有儿童且温度过高。
  5. 用户可以通过系统设置温度阈值,以自定义报警条件。
  6. 用户可以手动关闭报警,并确保在非报警状态下,系统不会继续触发。
  7. 系统设置间隔时间,避免GSM模块持续发送短信,防止频繁报警。

【3】项目硬件模块组成

  1. STM32单片机 (STM32F103RCT6):负责整个系统的控制与逻辑判断。
  2. 温度传感器 (DHT11):实时检测车内温度,并与设定的阈值进行比较。
  3. 人体检测传感器 (海凌科的24G毫米波雷达模块 LD2402):检测车内是否有儿童存在。
  4. 蜂鸣器 (高电平触发):报警装置,用于温度过高且有儿童时发出声音提示。
  5. GSM模块 (Air780e):负责发送短信报警至车主手机。
  6. 按键模块:用于手动关闭报警。
  7. 电源模块 (12V直流电源):为系统提供稳定电源。
  8. 液晶显示屏 (0.96寸OLED):用于显示当前温度与报警状态,提供人机交互界面。

【4】设计意义

本项目的设计意义在于提高汽车安全性,特别是对于有儿童的家庭。在高温天气条件下,将儿童遗忘在车内可能会导致严重的安全事故,甚至危及生命。车内温度迅速上升,儿童在车内的耐受能力较差,可能引发中暑、脱水等危险。设计一个针对这一问题的预警系统,可以有效减少此类安全隐患,确保儿童在车内的安全。

传统的汽车安全预警系统主要集中在车主驾驶过程中可能发生的事故预警,而忽视了车内儿童的安全问题。通过引入温度传感器和人体检测传感器的组合,能够实时监控车内温度并判断是否有儿童存在,极大提升了系统的智能化和准确性。该系统在实际应用中,不仅可以减少家长因疏忽造成的安全事故,还能在温度过高时及时发出警报,提醒家长采取措施,避免危险发生。

此外,该系统通过GSM模块发送短信报警,确保家长即便不在车旁也能够及时收到提醒。这种远程提醒功能进一步提升了系统的实用性和安全性。用户还可以根据需求设置温度阈值和手动关闭报警,使系统更加灵活和适应不同场景。总的来说,项目的设计意义不仅在于解决现实生活中的安全隐患,还能提升社会对儿童安全问题的重视,推动智能硬件技术在日常生活中的广泛应用。

【5】市面上同类产品研究现状

  1. Safety 1st Car Seat Alarm(美国)
    • 功能方案:通过压力传感器(安装在座椅下方)检测儿童重量,配合蓝牙连接手机APP。若家长离开车辆超出安全距离(>10米),APP触发警报。
    • 局限性:依赖手机蓝牙信号,无温度监测功能,需额外手动关闭报警。
    • 市场反馈:亚马逊评分4.1/5(售价$29.99),用户抱怨误报率高(如放置重物触发)。
  2. Cybex Sirona S i-Size安全座椅 + SensorSafe技术
    • 功能方案:集成在安全座椅卡扣中的传感器,通过蓝牙连接车载系统。若儿童被遗忘且车辆熄火,车内喇叭鸣响,并通过手机APP推送通知。
    • 创新点:无需额外设备,直接整合至座椅结构。
    • 痛点:仅检测卡扣状态,无法识别高温风险(需用户选配温度模块,额外$45)。
  3. Volvo汽车原厂系统(欧盟标配)
    • 功能方案:通过车内毫米波雷达(60GHz频段)探测生命体征(呼吸动作),结合空调温控数据。若检测到活体且温度>35°C,自动鸣笛+闪灯,并通过Volvo On Call服务推送短信至车主。
    • 优势:原厂深度集成,误报率<1%。
    • 局限:仅支持2020年后新款车型,无法后装加配。
  4. Munchkin Brica Baby Alert(便携式方案)
    • 功能方案:后装悬挂式设备,结合超声波传感器(检测儿童移动)和温度探头(-10°C~60°C)。触发报警后通过内置SIM卡发送短信至3个预设号码。
    • 缺陷:需年付$60服务费(SIM卡流量),高温报警阈值固定(38°C不可调)。
  5. 国内电商方案(淘宝/京东常见款)
    • 典型配置:
      • 主控:ESP8266(低成本WiFi方案)
      • 传感器:热释电红外(PIR) + DS18B20温度探头
      • 报警方式:本地蜂鸣器 + 微信小程序推送
    • 问题:
      • PIR传感器易受阳光干扰(夏季误报率>30%)
      • 无主动关闭功能,依赖断电重启
      • 网络依赖性强(地下车库失效)

【6】摘要

随着汽车的普及,儿童在车内的安全问题逐渐成为社会关注的焦点。高温天气下,儿童长时间被遗忘在车内,车内温度迅速上升可能导致中暑、脱水等危险,严重时甚至威胁生命。为了解决这一问题,本项目设计了一种基于单片机的汽车儿童安全预警系统。该系统通过温度传感器实时监测车内温度,通过人体检测传感器判断车内是否有儿童。一旦车内温度超过设定的阈值且有儿童存在,系统将触发蜂鸣器报警并通过GSM模块向车主发送短信提醒。用户可以根据需求设置温度阈值,并具有手动关闭报警的功能。此外,系统通过设置短信发送间隔,避免了频繁报警的情况。该项目的实现有效提高了儿童在车内的安全性,减少了因家长疏忽导致的危险事故,具有重要的社会意义和应用价值。

关键字

汽车安全、儿童预警系统、温度传感器、人体检测传感器、GSM模块、蜂鸣器、实时监测、安全报警

1.2 设计思路

本项目的设计思路主要围绕着通过传感器的实时数据监控,结合预警机制来确保儿童在车内的安全。首先,系统通过温度传感器实时监测车内温度。当车内温度超过设定的高温阈值时,系统会触发预警机制,保障车内人员的安全。为了避免误报和错误判断,系统还引入了人体检测传感器,这使得系统能够判断车内是否有儿童存在,避免在没有儿童的情况下误触发报警。

当车内的温度达到设定阈值且检测到有儿童时,系统会通过蜂鸣器发出警报提示车主,提醒其注意车内情况。此外,为了加强远程警示功能,系统通过GSM模块向车主发送短信,及时告知车主车内的危险状况。为了防止短信过于频繁,系统设计了短信发送间隔,使得GSM模块只在需要时才发送短信,而不会重复报警。

为了提高系统的灵活性和适应性,用户可以根据实际需要调整温度阈值,并在必要时手动关闭报警系统。此外,系统具备温度显示功能,通过液晶显示屏实时反馈当前车内的温度信息,使得用户能够方便地查看和设置温度阈值。总体设计思路注重系统的智能化、人性化,并确保能够在车主不在车旁时及时提供安全预警,减少因疏忽造成的安全隐患。

1.3 系统功能总结

功能模块描述
温度监测通过温度传感器实时监测车内温度,并与设定的高温阈值进行比较。
人体检测通过人体检测传感器判断车内是否有儿童存在,以避免误报。
报警触发当车内温度超过设定阈值且检测到儿童时,系统通过蜂鸣器发出声音报警。
短信报警通过GSM模块向车主发送短信,提醒车主车内有儿童且温度过高。
温度阈值设置允许用户设置温度阈值,自定义触发报警的条件。
报警关闭功能用户可手动关闭报警,确保在非报警状态下系统不会继续触发。
短信发送间隔设置设置短信发送的间隔时间,避免GSM模块频繁发送短信,减少重复报警。
温度显示使用液晶显示屏显示车内的实时温度与报警状态,提供用户友好的界面。

1.4 开发工具的选择

【1】设备端开发

硬件设备端的开发主要依赖于C语言,利用该语言直接操作硬件寄存器,确保系统运行的高效性和低延迟。C语言在嵌入式开发中具有广泛的应用,它能够直接访问硬件,满足对资源消耗和响应速度的严格要求。为了编写高效、稳定的代码,开发工具选择了Keil uVision 5作为主要的开发环境。Keil是一个专业的嵌入式开发工具,广泛应用于基于ARM架构的微控制器(如STM32)开发。Keil提供了完善的调试、编译和仿真支持,能够帮助在软件开发过程中高效地进行调试、单步执行以及断点设置,确保开发的稳定性和高效性。
STM32F103RCT6是项目中使用的主控芯片,它基于ARM Cortex-M3架构,拥有强大的计算能力和丰富的外设接口。在硬件编程中,寄存器级编程是常用的方式,这要求开发者对芯片的硬件寄存器有深入的理解。在Keil环境中,通过STM32的寄存器直接控制GPIO、ADC、I2C、SPI等硬件接口,以满足各个硬件模块(如传感器、执行器、显示屏等)与主控芯片的交互。使用寄存器编程能够提供更高效、精确的控制,避免了外部库的开销,同时也能深入调控硬件特性,提升系统性能。

【2】上位机开发

本项目的上位机开发基于Qt 5框架,使用**C++**作为主要编程语言。Qt是一个跨平台的应用开发框架,广泛用于开发GUI应用程序。Qt提供了丰富的GUI组件和工具,能够高效地实现图形界面的设计与开发。C++则作为Qt的底层语言,具有高效的性能和良好的控制力,非常适合用于处理设备与系统之间的数据交互、通信协议的实现和复杂的计算任务。在项目中,Qt被用于开发Windows平台的桌面应用程序以及Android平台的手机APP。Qt框架的跨平台特性使得开发者能够使用同一套代码在不同操作系统上进行构建和部署,大大提高了开发效率。

为了方便开发和调试,上位机的开发采用了Qt Creator作为主要的集成开发环境(IDE)。Qt Creator是一款由Qt官方提供的开发工具,专为Qt应用程序开发设计,支持C++、QML和JavaScript等语言。Qt Creator提供了丰富的功能,如代码编辑、调试、构建、版本控制集成等,能够显著提升开发者的生产力。在本项目中,Qt Creator为开发者提供了自动化构建、界面设计工具(如Qt Designer)和调试工具(如QDebug和QML调试工具),使得开发过程更加高效和流畅。
上位机与硬件设备端的通信采用了基于TCP/IP协议的数据传输方式。为了实现这一功能,Qt提供了丰富的网络编程支持,尤其是QTcpSocketQTcpServer类,使得上位机能够轻松地与硬件设备建立TCP连接,进行数据收发。上位机通过WIFI连接ESP8266-WIFI模块,ESP8266模块创建TCP服务器,上位机应用则作为客户端连接到服务器,进行实时的数据传输与控制命令的下发。
为了满足不同用户的需求,本项目需要支持Windows平台的桌面应用和Android平台的移动APP。Qt的跨平台特性使得开发人员能够在一个代码库下完成多平台应用的开发和移植。开发者仅需要编写一次应用逻辑和用户界面,就可以通过Qt的跨平台构建工具生成Windows和Android两个平台的可执行文件。此外,Qt提供了丰富的文档和社区支持,帮助开发者解决平台差异和兼容性问题,确保应用在不同平台上都能稳定运行。

总体而言,上位机开发环境采用了Qt 5框架和C++语言,结合Qt Creator集成开发环境,提供了一个高效、稳定、跨平台的开发工具链。通过Qt强大的GUI设计、网络通信、多线程支持以及数据库管理功能,开发者能够轻松实现与硬件设备的交互、控制设备、处理传感器数据,并为用户提供直观、流畅的操作体验。

1.5 模块的技术详情介绍

  1. STM32单片机 (STM32F103RCT6)
    • 功能:负责整个系统的控制与逻辑判断,协调各个模块的工作。
    • 特点:高性能、低功耗、丰富的外设接口,适合嵌入式系统应用。
  2. 温度传感器 (DHT11)
    • 功能:实时检测车内的温度,并将温度数据传送给STM32单片机,供系统判断是否超过设定的阈值。
    • 特点:简单易用、价格低廉、测量范围适中,适用于低成本系统。
  3. 人体检测传感器 (海凌科24G毫米波雷达模块 LD2402)
    • 功能:检测车内是否有儿童或成人存在,判断是否需要触发报警。
    • 特点:非接触式检测,适应性强,不受光线或遮挡物影响,能够精准探测人体活动。
  4. 蜂鸣器 (高电平触发)
    • 功能:当满足报警条件时,发出响亮的声音,提醒车主车内的安全隐患。
    • 特点:声音响亮、易于驱动,能够在高噪音环境下有效提醒。
  5. GSM模块 (Air780e)
    • 功能:通过短信方式将报警信息发送至车主手机,提醒车主车内的危险情况。
    • 特点:支持全球网络,适合远程通讯,具有短信发送功能,稳定可靠。
  6. 按键模块
    • 功能:用于手动关闭报警,确保在非报警状态下系统不会继续触发。
    • 特点:简单直观,便于操作,提升系统的灵活性。
  7. 电源模块 (12V直流电源)
    • 功能:为系统提供稳定的电力供应,确保所有模块能够正常工作。
    • 特点:稳定高效,能够满足系统的电力需求。
  8. 液晶显示屏 (0.96寸OLED)
    • 功能:实时显示车内的温度和报警状态,提供用户友好的界面,方便设置与监控。
    • 特点:小巧、清晰、低功耗,适合嵌入式系统,能够显示详细的信息。

1.6 框架图

graph TDA[单片机控制系统] --> B[温度传感器模块]A --> C[红外传感器模块]A --> D[GSM通信模块]A --> E[蜂鸣器报警模块]A --> F[阈值设置与报警控制]B --> G[实时监测车内温度]C --> H[检测儿童座椅区域人体存在]F --> I[设置高温阈值]F --> J[自动关闭报警条件]F --> K[手动关闭报警功能]G & H --> L{高温+人体同时存在?}L -->|是| M[触发报警系统]M --> E[启动蜂鸣器声音警报]M --> N[GSM模块发送短信]N --> O[设置短信发送间隔时间]classDef module fill:#f9f,stroke:#333,stroke-width:2px;classDef decision fill:#f96,stroke:#333,stroke-width:2px;classDef action fill:#6f9,stroke:#333,stroke-width:2px;class A,B,C,D,E,F module;class L decision;class G,H,M,N,E,O action;

框架图说明:

  1. 核心控制系统:单片机作为中央处理器
  2. 输入检测层:
    • 温度传感器实时监测车内温度
    • 红外传感器专用于儿童座椅区域人体检测
  3. 智能判断模块:
    • 双条件判断逻辑(高温+人体同时存在)
    • 可设置高温阈值
  4. 报警执行层:
    • 蜂鸣器本地声音警报
    • GSM模块短信通知功能
  5. 控制功能:
    • 不满足条件时自动关闭报警
    • 支持手动关闭报警
    • 短信发送间隔时间控制

二、代码设计思路

当前项目使用的相关软件工具、模块源码已经上传到网盘:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink

以下是项目中各个模块的代码示例,涵盖了温度传感器、人体检测传感器、蜂鸣器、GSM模块、按键模块、电源管理等模块。

1. 温度传感器 (DHT11)

#include "DHT11.h"#define DHT11_PIN GPIO_PIN_0  // 设置连接DHT11的引脚// 读取温湿度数据
void DHT11_Read_Data(uint8_t *temperature, uint8_t *humidity) {uint8_t data[5] = {0};  // 存储温湿度数据DHT11_Init();  // 初始化DHT11传感器DHT11_Read(data);  // 读取数据*humidity = data[0];  // 湿度*temperature = data[2];  // 温度
}

2. 人体检测传感器 (海凌科24G毫米波雷达模块 LD2402)

#include "LD2402.h"#define RADAR_PIN GPIO_PIN_1  // 设置连接雷达模块的引脚// 检测车内是否有儿童
uint8_t Detect_Human() {uint8_t status = LD2402_Get_Status();  // 获取雷达模块的状态if (status == 1) {return 1;  // 检测到人体} else {return 0;  // 未检测到人体}
}

3. 蜂鸣器 (高电平触发)

#define BUZZER_PIN GPIO_PIN_2  // 设置连接蜂鸣器的引脚// 激活蜂鸣器报警
void Buzzer_Alarm() {HAL_GPIO_WritePin(GPIOB, BUZZER_PIN, GPIO_PIN_SET);  // 设置蜂鸣器引脚为高电平HAL_Delay(1000);  // 蜂鸣器响1秒HAL_GPIO_WritePin(GPIOB, BUZZER_PIN, GPIO_PIN_RESET);  // 关闭蜂鸣器
}

4. GSM模块 (Air780e)

#include "gsm.h"#define GSM_PIN GPIO_PIN_3  // 设置GSM模块的引脚// 发送报警短信
void GSM_Send_SMS(char *phone_number, char *message) {UART_Send_Command("AT+CMGF=1\r");  // 设置短信格式为文本模式UART_Send_Command("AT+CMGS=\"");  UART_Send_Command(phone_number);  UART_Send_Command("\"\r");UART_Send_Command(message);  // 发送短信内容UART_Send_Command("\x1A");  // 发送结束符
}

5. 按键模块

#define BUTTON_PIN GPIO_PIN_4  // 设置按键模块的引脚// 检查按键是否被按下
uint8_t Check_Button() {if (HAL_GPIO_ReadPin(GPIOB, BUTTON_PIN) == GPIO_PIN_SET) {return 1;  // 按键被按下} else {return 0;  // 按键未被按下}
}

6. 电源管理 (12V直流电源模块)

// 电源管理不涉及复杂的代码逻辑,主要通过电源模块供电给STM32单片机和其他模块。
// 电源模块与系统其他模块的连接通常通过稳定的电源适配器来实现。

7. 主控制流程

#include "main.h"
#include "DHT11.h"
#include "LD2402.h"
#include "gsm.h"
#include "button.h"
#include "buzzer.h"uint8_t temperature, humidity;
uint8_t human_detected;int main(void) {HAL_Init();  // 初始化HAL库SystemClock_Config();  // 配置时钟while (1) {// 获取温度数据DHT11_Read_Data(&temperature, &humidity);// 获取人体检测状态human_detected = Detect_Human();// 如果温度过高且检测到人体,触发报警if (temperature > 30 && human_detected) {Buzzer_Alarm();  // 蜂鸣器报警GSM_Send_SMS("+1234567890", "警报:车内温度过高且有儿童,请检查!");  // 发送短信提醒// 防止重复发送短信HAL_Delay(10000);  // 间隔10秒}// 检查是否按下手动关闭按钮if (Check_Button()) {Buzzer_Alarm();  // 关闭报警}HAL_Delay(1000);  // 延时1秒}
}

8. 液晶显示 (OLED 显示屏)

#include "oled.h"// 显示温度信息
void Display_Temperature(uint8_t temperature) {OLED_Clear();OLED_ShowString(0, 0, "Temperature:");OLED_ShowNum(0, 2, temperature, 3);OLED_ShowString(0, 4, "C");
}

这些代码为各个硬件模块提供了基础的操作示例,并通过主控制流程进行协调。

三、短信发送

1. air780e.h

#ifndef __AIR780E_H
#define __AIR780E_H#include "stm32f1xx.h"// 函数声明
void AIR780E_Init(void);
void AIR780E_Send_Command(char *cmd);
void AIR780E_Send_SMS(char *phone_number, char *message);
void UART3_IRQHandler(void);#endif /* __AIR780E_H */

2. air780e.c

#include "air780e.h"
#include "string.h"
#include "stm32f1xx_hal.h"// 串口3配置
#define AIR780E_UART huart3
#define AIR780E_RX_PIN GPIO_PIN_11
#define AIR780E_TX_PIN GPIO_PIN_10
#define AIR780E_GPIO_PORT GPIOB
#define AIR780E_BAUDRATE 9600// 初始化Air780E GSM模块
void AIR780E_Init(void) {// 启用UART3时钟__HAL_RCC_USART3_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();// 配置TX和RX引脚GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = AIR780E_TX_PIN;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(AIR780E_GPIO_PORT, &GPIO_InitStruct);GPIO_InitStruct.Pin = AIR780E_RX_PIN;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;HAL_GPIO_Init(AIR780E_GPIO_PORT, &GPIO_InitStruct);// 配置UART3UART_HandleTypeDef huart3;huart3.Instance = USART3;huart3.Init.BaudRate = AIR780E_BAUDRATE;huart3.Init.WordLength = UART_WORDLENGTH_8B;huart3.Init.StopBits = UART_STOPBITS_1;huart3.Init.Parity = UART_PARITY_NONE;huart3.Init.Mode = UART_MODE_TX_RX;huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart3.Init.OverSampling = UART_OVERSAMPLING_16;HAL_UART_Init(&huart3);// 启用串口3的中断HAL_NVIC_EnableIRQ(USART3_IRQn);
}// 发送AT指令
void AIR780E_Send_Command(char *cmd) {uint16_t length = strlen(cmd);for (uint16_t i = 0; i < length; i++) {// 发送每个字符while (!(USART3->SR & USART_SR_TXE));  // 等待TX缓冲区空USART3->DR = cmd[i];  // 发送字符}while (!(USART3->SR & USART_SR_TC));  // 等待传输完成
}// 发送短信
void AIR780E_Send_SMS(char *phone_number, char *message) {char cmd[128];// 设置短信格式为文本模式AIR780E_Send_Command("AT+CMGF=1\r\n");HAL_Delay(100);// 设置接收号码sprintf(cmd, "AT+CMGS=\"%s\"\r\n", phone_number);AIR780E_Send_Command(cmd);HAL_Delay(100);// 发送短信内容AIR780E_Send_Command(message);HAL_Delay(100);// 发送Ctrl+Z结束短信AIR780E_Send_Command("\x1A");  // Ctrl+ZHAL_Delay(100);
}// 串口3中断处理函数
void UART3_IRQHandler(void) {if (USART3->SR & USART_SR_RXNE) {  // 检查接收缓冲区是否有数据char received_char = (USART3->DR & 0xFF);  // 读取接收到的数据// 根据需要处理接收到的数据}
}

说明:

  1. air780e.h:
    • 头文件中声明了 AIR780E_Init() 初始化函数,AIR780E_Send_Command() 发送 AT 指令的函数,以及 AIR780E_Send_SMS() 发送短信的函数。
    • 串口中断处理函数 UART3_IRQHandler() 用于处理串口3的接收中断。
  2. air780e.c:
    • AIR780E_Init():配置串口3,设置正确的波特率、数据位、停止位和校验位。
    • AIR780E_Send_Command():发送AT指令,通过串口3逐字符发送数据。
    • AIR780E_Send_SMS():设置GSM模块为短信模式,发送短信内容,并通过 Ctrl+Z(即 0x1A)结束短信内容。
    • UART3_IRQHandler():这个中断服务程序检查串口3的接收数据寄存器。如果接收到数据,将执行相应处理。

四、STM32主代码

以下是main.c 代码示例,结合了温度传感器、人体检测传感器、蜂鸣器、GSM模块、按键模块、电源管理以及液晶显示等模块。代码实现了汽车儿童安全预警系统的基本功能。

#include "stm32f1xx_hal.h"
#include "DHT11.h"
#include "LD2402.h"
#include "gsm.h"
#include "button.h"
#include "buzzer.h"
#include "oled.h"#define TEMPERATURE_THRESHOLD 30  // 设定温度阈值 30°Cuint8_t temperature, humidity;
uint8_t human_detected;
uint32_t last_sms_time = 0;  // 上次发送短信的时间void SystemClock_Config(void);
void GPIO_Init(void);
void UART_Init(void);
void Delay(uint32_t delay);// 初始化系统
int main(void) {HAL_Init();  // 初始化HAL库SystemClock_Config();  // 配置时钟GPIO_Init();  // 初始化GPIOUART_Init();  // 初始化UARTOLED_Init();  // 初始化OLED显示屏while (1) {// 获取温度数据DHT11_Read_Data(&temperature, &humidity);// 显示当前温度信息Display_Temperature(temperature);// 获取人体检测状态human_detected = Detect_Human();// 如果温度过高且检测到人体,触发报警if (temperature > TEMPERATURE_THRESHOLD && human_detected) {Buzzer_Alarm();  // 蜂鸣器报警// 检查是否已达到发送短信的间隔时间if (HAL_GetTick() - last_sms_time > 10000) {  // 每10秒发送一次短信GSM_Send_SMS("+1234567890", "警报:车内温度过高且有儿童,请检查!");last_sms_time = HAL_GetTick();  // 更新最后发送短信的时间}}// 检查是否按下手动关闭按钮if (Check_Button()) {Buzzer_Alarm();  // 手动关闭报警}}
}// 系统时钟配置
void SystemClock_Config(void) {// 配置系统时钟,这部分根据实际硬件平台设置
}// GPIO初始化
void GPIO_Init(void) {__HAL_RCC_GPIOB_CLK_ENABLE();  // 启用GPIOB时钟GPIO_InitTypeDef GPIO_InitStruct = {0};// 配置蜂鸣器引脚GPIO_InitStruct.Pin = GPIO_PIN_2;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);// 配置按键引脚GPIO_InitStruct.Pin = GPIO_PIN_4;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}// UART初始化
void UART_Init(void) {__HAL_RCC_USART1_CLK_ENABLE();  // 启用USART1时钟UART_HandleTypeDef huart1;huart1.Instance = USART1;huart1.Init.BaudRate = 9600;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;HAL_UART_Init(&huart1);
}// 延时函数
void Delay(uint32_t delay) {HAL_Delay(delay);
}// 获取当前时间
uint32_t HAL_GetTick(void) {return HAL_GetTick();
}
  1. 初始化与系统配置HAL_Init() 用于初始化硬件抽象层(HAL),SystemClock_Config() 配置时钟,GPIO_Init() 配置GPIO引脚,UART_Init() 初始化UART以与GSM模块通信。
  2. 温度监测与显示:通过 DHT11_Read_Data() 获取温度数据,并使用 Display_Temperature() 将其显示在OLED屏上。
  3. 人体检测:通过 Detect_Human() 使用雷达模块检查车内是否有儿童或其他人。
  4. 报警触发:当温度超过设定的阈值(30°C),且人体检测到儿童时,通过蜂鸣器触发报警,并通过GSM模块向车主发送短信。
  5. 手动关闭报警:通过 Check_Button() 检查按键输入,若按下按钮,系统关闭报警。
  6. 短信发送间隔:使用 HAL_GetTick()last_sms_time 变量,确保短信不会频繁发送,每10秒钟才发送一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91631.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac 上配置jdk 环境变量

核心步骤是设置 JAVA_HOME 变量&#xff0c;并将其 bin 目录添加到系统的 PATH 变量中。 macOS 从 Catalina (10.15) 版本开始&#xff0c;默认的终端 Shell 从 bash 切换到了 zsh。因此&#xff0c;你需要先确定你正在使用的 Shell&#xff0c;然后编辑对应的配置文件。步骤一…

硬件-音频学习DAY1——音箱材料选择:密度板为何完胜实木

每日更新教程&#xff0c;评论区答疑解惑&#xff0c;小白也能变大神&#xff01;" 目录 一.音箱材料选择的关键因素 二.密度板的声学优势 三.材料稳定性的对比 四.生产工艺的适应性 五.成本与环保的平衡 六.特殊场景的例外情况 七.消费者选购指南 八.行业发展趋势…

微波(Microwave)与毫米波(Millimeter wave)简介

一、电磁波频段划分&#xff0c;微波与毫米波所属 二、微波 可以看出UHF及以上的频段都可以统称为微波。记得之前上微波技术实验课的时候会接触比巴掌还大的金属波导&#xff0c;后来每次看到微波技术的时候都还是感到陌生。今天突然想到&#xff0c;不像在手机里就能完成的5G频…

ObjectMapper教程

ObjectMapper 简介ObjectMapper 是 Jackson 库的核心类&#xff0c;用于 Java 对象与 JSON 数据之间的相互转换。它支持序列化&#xff08;对象转 JSON&#xff09;和反序列化&#xff08;JSON 转对象&#xff09;&#xff0c;广泛应用于 REST API、数据存储和配置处理等场景。…

【Node.js安装注意事项】-安装路径不能有空格

问题描述&#xff1a;在项目中使用 nodemon时&#xff0c;出现了nodemon 启动问题&#xff1a;nodemon : 无法将“nodemon”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。解决办法&#xff1a;在网上找了很多教程&#xff0c;试了很多办法&#xff0c;什么重新配置环境…

Shader开发(六)什么是着色器

在前面的章节中&#xff0c;我们简要提到了着色器的概念&#xff0c;现在有了渲染管线的基础知识&#xff0c;我们可以更深入地理解着色器的真正含义。着色器&#xff08;Shader&#xff09;是运行在图形处理单元&#xff08;GPU&#xff09;上的专用程序&#xff0c;这与我们日…

操作系统-lecture4(进程的调度)

进程的切换 接下来需要了解两个问题 谁触发了进程切换进程切换的动作 中断技术 中断源 中断处理过程&#xff08;陷阱机制&#xff09; 特权指令和非特权指令 Privileged Instructions&#xff1a;特权指令 •The Instructions that can run only in Kernel Mode are called…

机器人程序优化

机器人程序优化核心摘要 本视频详细讲解了机器人程序优化的方法与实践&#xff0c;旨在提高程序的可读性和复用性。通过学习文件夹、子程序调用以及路点优化等核心概念&#xff0c;观众将掌握如何将复杂的机器人搬运程序进行结构化整理&#xff0c;使其更易于理解、调试和在不…

一套视频快速入门并精通PostgreSQL

PostgreSQL从入门到精通系列PostgreSQL数据库是一个对理论知识与操作能力并重的技术&#xff0c;想要快速入门PostgreSQL数据库&#xff0c;这两个方面都要重视。这里的PostgreSQL从入门到精通&#xff0c;是专门针对刚入门的新手小白而录制的一套&#xff0c;有理论讲解也有动…

供应商管理系统有哪些功能?

在企业供应链数字化体系中&#xff0c;供应商管理系统是连接企业与外部合作伙伴的核心枢纽。以鲸采云采购管理系统的供应商模块为例&#xff0c;其功能设计围绕 “全生命周期管理 风险防控 协同效率” 三大核心&#xff0c;通过技术手段解决传统供应商管理中的信息碎片化、流…

新手向:国内外大模型体验与评测

国内外大模型体验与评测技术详解 近年来,人工智能领域的大模型技术取得了突破性进展,以GPT-4、Claude、文心一言等为代表的大语言模型(LLM)已经成为行业热点。国内外科技巨头纷纷布局这一赛道:国外有OpenAI的GPT系列、Anthropic的Claude、Google的PaLM,国内则有百度的文…

深度解读 CSGHub:开源协议、核心功能与产品定位

在大模型时代&#xff0c;“可用”不再足够&#xff0c;企业更需要“可管”、“可控”、“可演进”的一体化解决方案。作为国产开源阵营的中坚力量&#xff0c;CSGHub 如何从“开源与协议”到“功能定位”层层打磨&#xff0c;满足不同行业对合规、安全和灵活部署的诉求&#x…

本土化DevOps实践新篇章:Gitee引领企业高效协作新时代

本土化DevOps实践新篇章&#xff1a;Gitee引领企业高效协作新时代 在数字化转型的浪潮席卷全球的当下&#xff0c;软件开发与运维的协同效率已经成为决定企业竞争力的关键因素。随着国内企业对于数据安全和合规性的要求日益严格&#xff0c;寻找一套既符合本土监管要求又能提升…

B树、B+树、红黑树区别

一、核心概念与性质对比1. B树&#xff08;Balanced Tree&#xff09;定位&#xff1a;多路平衡搜索树&#xff0c;专为磁盘存储优化核心性质&#xff1a;每个节点存储 k-1个键值和k个子节点指针&#xff08;m/2 ≤ k ≤ m&#xff0c;m为阶数&#xff09;所有叶子节点位于同一…

Spring AI 使用阿里百炼平台实现流式对话:基于 SSE 的实践

Spring AI阿里百炼平台实现流式对话&#xff1a;基于 SSE 的实践指南 在大模型应用开发中&#xff0c;流式对话是提升用户体验的关键特性。本文将详细介绍如何利用 Spring AI 结合 Spring Boot&#xff0c;基于 SSE&#xff08;Server-Sent Events&#xff09;协议实现高效的流…

Ubuntu lamp

Ubuntu lamp 前言 在Ubuntu安装lamp架构 我们了解到 lamp是完整的架构 我们前面了解到了 集合了Linux系统 apache MySQL 和PHP语言的完整架构 我们前面说了Centos7中编译安装 lamp 那么 我们去说一下在Ubuntu中安装 ‍ ‍ 安装apache2 ‍ apt直接安装apache2 apt -y install a…

开源向量LLM - Qwen3-Embedding

1 Qwen3-Embedding介绍 Qwen3-Embedding遵循 Apache 2.0 许可证&#xff0c;模型大小从0.6B到8B&#xff0c;支持32k长文本编码。 Model TypeModelsSizeLayersSequence LengthEmbedding DimensionMRL SupportInstruction AwareText EmbeddingQwen3-Embedding-0.6B0.6B2832K10…

云计算服务模式全解析:IaaS、PaaS、SaaS与DaaS的区别与应用

一、云计算概述 云计算是一种通过互联网提供计算服务的模式&#xff0c;其核心特点是输入/输出与计算不在同一主机上。一个完整的云计算环境由云端&#xff08;计算设备&#xff09;、计算机网络和终端&#xff08;输入/输出设备&#xff09;三部分组成&#xff0c;即"云…

qwen 多模态 预训练流程步骤详细介绍

Qwen&#xff08;通义千问&#xff09;是阿里云推出的大语言模型&#xff0c;其多模态预训练是一个复杂且专业的过程&#xff0c;虽然官方没有完全公开全部细节&#xff0c; 但从多模态大模型通用的预训练逻辑上&#xff0c;一般包含以下主要步骤&#xff1a; 数据准备 多模态数…

FastDDS (SharedMemory)

SharedMemSegment Start // Fast-DDS/src/cpp/utils/shared_memory/SharedMemSegment.hppclass SharedSegmentBase {内部类 start class Id { public:typedef UUID<8> type;Id(); // 返回共享内存变量的IDId(const Id& other); // 设置共享内存变量的IDvoid g…