ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于STM32的独居老人语音/一键双模紧急呼救系统设计与实现

基于STM32的独居老人语音/一键双模紧急呼救系统设计与实现 若该文为原创文章转载请注明原文出处。一、项目背景与升级说明独居老人的安全保障是一个亟待解决的社会问题。跌倒后无法及时呼救、突发疾病无人知晓是老年人伤亡的重要诱因。传统的电话呼叫方式在老人行动不便或意识模糊时往往无法奏效。本文介绍的这套系统以STM32为主控核心在原有语音呼救、一键报警、跌倒检测、心率血氧监测、温湿度检测和4G远程通信六大功能基础上新增了GPS定位模块使报警信息中能够附带老人的精确地理位置家属收到求救后可直接导航前往大幅缩短救援时间。本次硬件方案的具体调整包括语音识别模块采用ST-03S启英泰伦CI-B03ST01S系列离线语音识别模组4G通信模块采用ML307R中国移动Cat.1模组内置GNSS能力GPS定位采用ATGM336H北斗/GPS双模模块。二、系统总体架构系统采用三层架构设计感知层DHT11温湿度传感器、MAX30102心率血氧传感器、ADXL345加速度传感器、ST-03S语音识别模块、ATGM336H GPS定位模块、一键报警按键。控制层STM32F103C8T6作为主控芯片负责传感器数据采集、报警逻辑判断、阈值管理、OLED显示控制、GPS坐标解析。通信层ML307R 4G模块Cat.1通过AT指令或MQTT协议将报警信息、生理数据和GPS位置上传至手机端。报警信息的发送内容包含报警类型语音呼救/跌倒/心率异常/一键报警、当前生理参数心率、血氧、温湿度、GPS经纬度坐标和时间戳。其中GPS坐标是新增的关键字段家属收到报警短信后可直接复制坐标到地图应用中进行导航。三、硬件设计3.1 主控制器选用STM32F103C8T6Cortex-M3内核72MHz主频64KB Flash20KB RAM具有丰富的通信接口可满足多传感器并行采集、GPS解析和4G通信的需求。3.2 传感器与通信模块模块型号接口功能温湿度DHT11单总线GPIO温度0-50℃、湿度20-90%RH心率血氧MAX30102I2CPPG法测心率和SpO₂加速度ADXL345I2C三轴加速度跌倒检测语音识别ST-03SUART离线关键词识别GPS定位ATGM336HUART北斗/GPS双模定位4G通信ML307RUART远程报警和数据上报显示SSD1306 OLEDI2C0.96寸128×643.3 ST-03S语音识别模块ST-03S是启英泰伦推出的单麦离线语音识别模组搭载CI1103语音识别芯片内置基于深度神经网络DNN的硬件处理器支持100条命令词离线语音识别不依赖网络识别率达95%响应时间最快0.2秒支持5米远场识别。该模块支持双麦远场降噪和Beamforming算法在嘈杂环境也能保证识别准确性。模块通过UART与STM32通信识别结果以命令ID形式输出。本系统设置的关键词如下命令ID关键词动作0“救命”触发紧急报警1“帮帮我”触发紧急报警2“我摔倒了”触发紧急报警3“取消报警”解除报警防误报STM32通过UART中断接收识别结果核心处理代码如下void USART2_IRQHandler(void) { if (USART_GetITStatus(USART2, USART_IT_RXNE) ! RESET) { uint8_t cmd USART_ReceiveData(USART2); if (cmd 0 || cmd 1 || cmd 2) { trigger_alarm(ALARM_VOICE); } else if (cmd 3) { cancel_alarm(); } USART_ClearITPendingBit(USART2, USART_IT_RXNE); } }3.4 ATGM336H GPS定位模块ATGM336H-5N是北斗/GPS双模定位模块具有高灵敏度、低功耗、低成本等优势尺寸仅9.7×10.1mm可以直接替换Ublox MAX系列模块。该模块默认固件仅支持UART TTL电平输出波特率固定为9600bps刷新率1Hz上电即用无需配置。硬件连接GPS模块TX → STM32 USART3_RXPB11GPS模块RX → STM32 USART3_TXPB10共地GND必须可靠连接供电采用3.3V LDO稳压注意禁止直接接5V供电避免烧毁模块I/O。模块输出遵循NMEA-0183标准每条语句以$开头以CRLF结尾。我们只需解析两条核心语句$GPRMC推荐最小定位信息包含时间、状态A/V、纬度、经度、速度、日期。$GPGGA全球定位系统固定数据包含时间、纬度、经度、定位状态、卫星数、HDOP、海拔。GPS数据解析采用状态机驱动的方式在UART中断中逐字节接收通过检测$和\n来划分完整语句char gps_buf[128]; uint8_t gps_idx 0; void USART3_IRQHandler(void) { if (USART_GetITStatus(USART3, USART_IT_RXNE) ! RESET) { char ch USART_ReceiveData(USART3); if (ch $) { gps_idx 0; } if (gps_idx sizeof(gps_buf) - 1) { gps_buf[gps_idx] ch; } if (ch \n) { gps_buf[gps_idx] \0; parse_nmea(gps_buf); // 解析GPRMC或GPGGA gps_idx 0; } USART_ClearITPendingBit(USART3, USART_IT_RXNE); } } void parse_nmea(char *sentence) { if (strncmp(sentence, $GPRMC, 6) 0) { // 解析纬度、经度、定位状态 char *token strtok(sentence, ,); int field 0; while (token ! NULL) { switch (field) { case 2: gps_valid (token[0] A); break; case 3: gps_lat atof(token); break; // 纬度 ddmm.mmmm case 4: gps_lat_dir token[0]; break; // N/S case 5: gps_lon atof(token); break; // 经度 dddmm.mmmm case 6: gps_lon_dir token[0]; break; // E/W } token strtok(NULL, ,); field; } } }解析出的ddmm.mmmm格式经纬度需转换为十进制度数度 整数部分 小数部分/60。3.5 ML307R 4G通信模块ML307R是中国移动推出的4G Cat.1模组支持IPv4/IPv6、TCP/UDP、HTTP/HTTPS、MQTT/MQTTS等网络协议串口默认通信波特率为115200。硬件连接ML307R UART1_TXD → STM32 USART1_RXPA10ML307R UART1_RXD → STM32 USART1_TXPA9PWRKEY引脚用于开关机控制VBAT供电3.8V推荐DC-DC降压需加大电容储能1000μF铝电解100μF陶瓷并联2A瞬时电流LDO扛不住。报警短信发送AT指令流程void send_alarm_sms(const char *phone, const char *message) { SendAT(AT\r\n); // 测试通信 delay_ms(200); SendAT(ATCMGF1\r\n); // 文本模式 delay_ms(200); SendAT(ATCMGS\); // 发送短信 SendAT(phone); SendAT(\\r\n); delay_ms(500); SendAT(message); SendAT(\x1A); // CtrlZ 发送 }MQTT数据上报连接OneNET平台ML307R连接OneNET需要以下参数地址mqtts.heclouds.com、端口1883、产品ID、设备名称和生成的Token。关键AT指令序列如下// 网络附着检查 SendAT(ATCGATT?\r\n); // 必须返回1 // MQTT配置OneNET要求clean1 SendAT(ATMQTTCFG\clean\,0,1\r\n); // 连接MQTT服务器 SendAT(ATMQTTCONN0,\mqtts.heclouds.com\,1883,\设备名称\,\产品ID\,\Token\\r\n); // 发布数据JSON格式 SendAT(ATMQTTPUB0,\$sys/{产品ID}/{设备名称}/thing/property/post\,0,0,0,0\r\n);发布消息时需要注意OneNET的主题格式为$sys/产品ID/设备名称/thing/property/post而非阿里云风格的/productKey/deviceName/temperature。JSON数据格式如下{ id: 1, params: { heart_rate: {value: 85}, spo2: {value: 97}, temperature: {value: 26.5}, humidity: {value: 65}, latitude: {value: 39.9042}, longitude: {value: 116.4074}, fall_status: {value: 0}, alarm_type: {value: 2} } }四、各功能模块软件设计4.1 DHT11温湿度采集与阈值报警DHT11采用单总线协议采集周期2秒。当温度超过上限阈值默认35℃或低于下限阈值默认5℃时触发声光报警。4.2 MAX30102心率血氧监测MAX30102通过I2C采集红光和红外光PPG原始数据。心率通过检测PPG信号峰值周期计算血氧通过红光/红外光AC/DC比值计算。正常心率范围设为60-100 BPM血氧饱和度正常范围设为95%-100%。4.3 ADXL345跌倒检测跌倒检测采用合加速度阈值法姿态角确认的双条件串联方案float acc_magnitude sqrtf(ax*ax ay*ay az*az); if (acc_magnitude FALL_THRESHOLD_HIGH) { // 冲击检测默认2.5g fall_flag 1; fall_timer 0; state FALL_CHECKING; } if (state FALL_CHECKING fall_timer 200) { // 2秒后确认 float angle atan2f(ay, az) * 180.0f / M_PI; if (fabsf(angle) POSTURE_THRESHOLD) { // 姿态角变化超60度 trigger_alarm(ALARM_FALL); } state FALL_IDLE; }冲击姿态双条件判断可有效降低误报率。4.4 一键报警按键按键连接至PA0引脚配置为外部中断下降沿触发。要求持续按下超过500ms才触发报警防误触。按下后系统立即启动声光报警并通过ML307R发送包含GPS坐标的求救短信。4.5 GPS坐标集成到报警流程这是本次升级的核心变化。当任一报警触发时系统首先检查GPS定位状态void process_alarm(void) { char sms_content[256]; char gps_str[64]; if (gps_valid) { // 将ddmm.mmmm格式转换为十进制度数 float lat nmea_to_degree(gps_lat, gps_lat_dir); float lon nmea_to_degree(gps_lon, gps_lon_dir); sprintf(gps_str, 位置: https://maps.google.com/?q%.6f,%.6f\r\n, lat, lon); } else { sprintf(gps_str, 位置: GPS未定位\r\n); } sprintf(sms_content, 【紧急报警】%s\r\n%s 心率:%d BPM 血氧:%d%%\r\n温度:%.1fC 湿度:%.0f%%\r\n请立即联系确认, get_alarm_type_str(), gps_str, heart_rate, spo2, temperature, humidity); send_alarm_sms(emergency_phone, sms_content); // 同时通过MQTT上报到云平台 mqtt_publish_data(); }GPS定位状态管理由于ATGM336H在室内或信号弱的环境下可能无法获取有效定位系统在gps_valid0时会在报警短信中标注“GPS未定位”避免发送无效坐标误导家属。上电后GPS模块需要一定时间完成首次定位冷启动约30-60秒热启动约5秒系统在OLED上显示GPS定位状态定位中/已定位/无信号。4.6 OLED显示与菜单设置OLED主界面实时显示温度、湿度、心率、血氧、GPS定位状态、系统状态正常/报警。设置菜单通过按键进入包含温度上下限、心率上下限、血氧下限、跌倒灵敏度、紧急联系人号码、报警模式等配置项。五、系统集成与主循环主循环采用时间片轮询中断触发的混合架构int main(void) { System_Init(); GPS_Init(); ML307R_Init(); ST03S_Init(); while (1) { if (timer_2s_flag) { // 每2秒 DHT11_Read_Data(temp, humi); check_env_threshold(temp, humi); timer_2s_flag 0; } if (timer_100ms_flag) { // 每100ms ADXL345_Read_Accel(ax, ay, az); fall_detection(ax, ay, az); timer_100ms_flag 0; } if (timer_1s_flag) { // 每1秒 MAX30102_Read(hr, spo2); check_vital_threshold(hr, spo2); timer_1s_flag 0; } if (timer_200ms_flag) { // OLED刷新 OLED_Refresh(); timer_200ms_flag 0; } if (alarm_flag) { process_alarm(); // 包含GPS坐标的报警处理 alarm_flag 0; } } }报警优先级一键报警 语音呼救 跌倒检测 生理异常 环境异常。多条件同时触发时只处理最高优先级报警避免重复发送。六、系统测试在实验室环境下对系统进行了功能验证语音识别安静环境下ST-03S对3个呼救关键词的识别成功率达到95%以上响应时间约200ms。跌倒检测模拟跌倒动作20次正确检测18次准确率90%。心率血氧与商用指夹式血氧仪对比心率误差±3 BPM血氧误差±2%。GPS定位室外开阔环境下热启动首次定位约5秒冷启动约45秒定位精度约2.5米CEP。4G通信报警短信发送成功率100%平均延迟约3秒。ML307R从开机到网络附着成功约8秒。温湿度温度误差±1℃湿度误差±4%RH。七、总结与展望本系统以STM32为核心集成ST-03S语音识别、ATGM336H GPS定位和ML307R 4G通信三大升级模块实现了独居老人紧急呼救的完整解决方案。相比原版方案GPS模块的加入使报警信息从“发生了什么”升级为“在哪里发生了什么”家属收到求救后可直接导航前往显著提升了救援效率。系统的主要特点双模触发机制ST-03S离线语音识别一键按键覆盖主动呼救场景无需网络即可识别自动检测能力跌倒检测和生理参数监测实现被动安全防护精确定位ATGM336H北斗/GPS双模定位报警短信附带地图导航链接多维度报警声光报警ML307R短信通知MQTT云平台数据上报灵活配置OLED菜单支持阈值、联系人和报警模式的现场设置未来可优化的方向引入FreeRTOS实现多任务调度以提升系统实时性增加电子围栏功能当老人离开预设安全区域时自动提醒通过MQTT协议接入云平台实现手机APP端的历史数据查询和趋势分析。如有侵权或需要完整代码请及时联系博主。
返回列表