STM32 老人跌倒监测报警系统

从原理图到代码,手把手教你做一块能救命的开发板(附完整硬件清单))

独居老人摔倒后无人发现,是养老场景里最揪心的事。我国每年有超过 4000 万老年人至少跌倒一次,跌倒也是 65 岁以上老人伤害致死的首位原因。如果有一块巴掌大的开发板,能在老人摔倒后自动语音呼救、并把 GPS 位置推送到子女手机,救援的黄金时间就抢回来了。

这篇文章把我做这套「老人跌倒监测报警系统」的完整过程写出来:硬件怎么选、成本多少钱、电路怎么连、核心代码怎么写、我踩过哪些坑,全部摊开讲。做完这套系统,你对 STM32 + 多传感器 + 物联网上云的整套链路会有一次完整的实战。

一、系统做了什么

一句话:老人摔倒 → 设备本地语音呼救 → 同时把报警和定位推送到监护人的手机

具体功能拆解:

功能 实现方式 对应硬件
跌倒检测 三轴加速度变化检测 ADXL345(IIC)
心率监测 光电脉搏采集 PulseSensor(ADC)
定位 卫星定位上报 ATGM336H(UART)
本地呼救 语音播报"有人跌倒,请求帮助" JR6001(UART)
远程报警 MQTT 上报云端 → 手机端 ESP8266-01S(UART)
现场显示 心率/状态实时显示 0.96 寸 OLED12864(IIC)
主控 --- STM32F103C8T6

二、硬件选型与成本清单

做硬件项目,先算账。整套系统物料成本约 60~80 元(不含 PCB 打样与外壳):

器件 型号 数量 参考单价 说明
主控 STM32F103C8T6 1 ~10 元 72MHz Cortex-M3,资源足够
加速度传感器 ADXL345 1 ~8 元 三轴,IIC 输出,±16g 量程
心率传感器 PulseSensor 1 ~15 元 模拟输出,接 ADC
GPS 模块 ATGM336H 1 ~20 元 串口输出 NMEA,配无源天线
WiFi 模块 ESP8266-01S 1 ~10 元 MQTT 上云
语音模块 JR6001 1 ~12 元 串口指令触发播报
显示屏 OLED12864 0.96寸 1 ~10 元 IIC
其他 蜂鸣器/按键/电源等 若干 ~10 元 ---

选型理由讲两句(这是和"只贴清单"的文章拉开差距的地方):

  • 为什么用 ADXL345 而不是 MPU6050?跌倒检测只需要加速度特征(失重→冲击→静止),ADXL345 便宜、IIC 两根线、自带活动/自由落体中断,省掉 MPU6050 的姿态解算开销。如果你的方案要做"倒地后姿态判断"再考虑带陀螺仪的方案。
  • 为什么 GPS 用 ATGM336H?国产、便宜、串口直出 NMEA-0183 协议,解析简单。
  • 语音模块选 JR6001 而不是自己做 DAC 播放:一条串口指令 UART1Write("B0") 触发预置语音,开发量最小。

三、电路设计要点

原理图用 Altium Designer 绘制。连线关系归纳成一张表,接线和排查时照着对:

模块 接口 连接到 STM32 引脚 备注
ADXL345 IIC PB6/PB7(SCL/SDA) 总线需 4.7kΩ 上拉
OLED IIC 与 ADXL345 共总线 地址不冲突(0x3C / 0x53)
ATGM336H UART USART2 9600bps,NMEA 语句
ESP8266-01S UART USART3 注意 3.3V 电平一致
JR6001 UART USART1 指令触发播报
PulseSensor ADC PA1(ADC1通道) 模拟信号

布线三个坑(都是实际踩过的):

  1. ESP8266-01S 必须独立 3.3V 供电。它在 WiFi 发射瞬间峰值电流能到 300mA+,直接从 STM32 最小系统的 3.3V 引脚取电,会出现"模块一联网单片机就复位"的灵异现象,加一颗 470uF 电容或独立 LDO。
  2. IIC 上拉电阻不能省。ADXL345 和 OLED 挂同一条总线时,上拉电阻只保留一组,两套板子各自带上拉会导致电平异常。
  3. GPS 天线要朝天、避开屏蔽。放在 PCB 电池下方或金属外壳里,定位时间从 30 秒变成 10 分钟都搜不到星。

四、核心代码实现

4.1 主程序框架

注意 #include 一律用英文引号,直接复制编译通过:

复制代码
#include "sys.h"
#include "delay.h"
#include "adc.h"
#include "key.h"
#include "OLED_I2C.h"
#include "Control_Report_To_Police.h"

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  // 2位抢占 + 2位响应
    delay_init();
    Usart1_Init(9600);      /* JR6001 语音模块 */
    TIM4_Init(300, 7200);   /* 系统节拍 */
    switch_Init();
    Beep_init();

    OLED_Init();
    OLED_CLS();

    Adc_Init();             /* PulseSensor 心率采集 */
    KEY_Init();
    TIM2_Int_Init(1999, 71);

    while (ADXL345_IIC_GPIO_Init())   /* ADXL345 初始化,失败重试 */
    {
    }

    ALi_ESP8266_GPIO_Init();  /* ESP8266 上电使能 */
    MQTT_Buff_Init();         /* MQTT 报文缓冲 */
    AliIoT_Parameter_Init();  /* 云平台三元组参数 */

    while (1)
    {
        OLED_Display_Cotrol();   /* 界面刷新 + 业务调度 */
    }
}
4.2 跌倒判断:从"加速度异常"到"确认报警"

跌倒的加速度特征是三段:自由落体(合加速度骤降)→ 着地冲击(骤升)→ 长时间静止(合加速度回到 1g 附近但姿态异常)。只判"冲击"会把手拍桌子、坐下都误报,所以要做三段联合判定:

复制代码
/* 跌倒状态机:FALL_FREE(失重) -> FALL_IMPACT(冲击) -> FALL_STILL(静止确认) */
typedef enum { NORMAL = 0, FALL_FREE, FALL_IMPACT, FALL_STILL } FallState;

/*
 * 判定阈值参考(需按实际佩戴方式标定):
 *   合加速度 < 0.4g   持续 > 100ms   -> 进入失重态
 *   合加速度 > 2.5g   500ms 内出现    -> 进入冲击态
 *   合加速度 0.8~1.2g 静止 > 30s      -> 确认跌倒
 */
void Fall_Detect_Process(void)
{
    float g = ADXL345_GetTotalG();   /* x/y/z 合加速度 */

    switch (fall_state)
    {
    case NORMAL:
        if (g < 0.4f) fall_state = FALL_FREE;
        break;

    case FALL_FREE:
        if (g > 2.5f) fall_state = FALL_IMPACT;
        else if (g > 0.8f) fall_state = NORMAL;  /* 误触发回退 */
        break;

    case FALL_IMPACT:
        if (Is_Still(30000))        /* 30s 静止确认 */
            fall_state = FALL_STILL;
        break;

    case FALL_STILL:
        Fall_Alarm();               /* 语音呼救 + 上报云端 + GPS定位 */
        fall_state = NORMAL;
        break;
    }
}
4.3 报警链路

确认跌倒后,按"先本地、后远程"的顺序触发:

复制代码
void Fall_Alarm(void)
{
    UART1Write("B0");            /* 1. JR6001 播报"有人跌倒,请求帮助" */
    UART1Write("AF:35");         /*    音量设为 35 */
    Beep_On();                   /* 2. 本地蜂鸣器同步响 */

    GPS_GetLocation(gps_buf);    /* 3. 取当前经纬度 */
    MQTT_PublishAlarm(gps_buf,   /* 4. MQTT 上报云端 -> 监护人手机 */
                      heart_rate);
}

五、总结

这套系统的价值不在单个模块,而在完整走通"传感采集 → 本地判断 → 双通道报警(语音 + 云端)"的物联网闭环。做毕业设计,它有算法(跌倒状态机)、有硬件(七类外设混合总线)、有云端(MQTT 上报),答辩内容足够;做产品原型,60~80 元的 BOM 也留出了商业化空间。

下一步可以迭代的方向:低功耗(跌倒检测用 ADXL345 中断唤醒主控,电池续航能从小时级提到天级)、加 NB-IoT 摆脱 WiFi 依赖、云端加"静默期确认"(报警后 30 秒内按键可取消,防误报骚扰)。

六、资料内容完整工程资料(原理图、PCB、代码、元件清单)

七、资料获取方式

扫一扫咨询客服

相关推荐
智闲电子设计2 小时前
STM32 硬件 CRC 与 UID 实战:固件校验防变砖,UID 防抄板,这两个外设白用太可惜
stm32·单片机·嵌入式硬件
嵌入式阿蔡2 小时前
CoAP / LwM2M 轻量协议:受限设备为什么不用 MQTT
单片机·物联网·嵌入式
wuyk5553 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
hongmai6668883 小时前
ESP32-WROVER-IE-N4R8:外接天线+8MB内存,专治信号焦虑
笔记·单片机·嵌入式硬件·microsoft·risc-v
恒锐丰科技林技术员3 小时前
EG11722:高耐压 150V 降压 DC‑DC 电源芯片,工业宽压电源优选方案
经验分享·嵌入式硬件
安河桥。3 小时前
MIPI CSI-2物理层接口:C-PHY与D-PHY技术规格说明
嵌入式硬件·视频
雾削木4 小时前
GPIO基本概念
单片机·嵌入式硬件
LCG元5 小时前
STM32 USB CDC 虚拟串口开发实战:从 CubeMX 配置到 printf 重定向与稳定收发
stm32·单片机·嵌入式硬件
zcmodeltech5 小时前
源网荷储一体化沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的源网荷储、多能互补、冷热电三联供全场景联动方案,服务范围覆盖全国
数据库·人工智能·stm32·单片机·嵌入式硬件