1 系统功能概述

本系统是一种针对老年人群体设计的智能防跌倒定位报警系统,采用51单片机作为控制核心,结合ADXL345三轴加速度传感器用于检测老年人的跌倒状态。当系统检测到可能的跌倒行为后,会触发蜂鸣器报警,并在持续15秒仍未恢复的情况下,通过GSM模块将当前GPS定位信息(经纬度)发送至预设手机号码,实现远程监护功能。整个系统具备跌倒检测、短信报警、位置信息发送、用户确认按钮、状态指示等一体化功能,能够显著提高老年人在紧急情况下的被救援效率,降低安全风险。

2 电路系统设计

系统主要由STC89C52单片机、ADXL345传感器、GSM模块、蜂鸣器、LED指示灯、按键模块、电源模块等部分构成。各个模块协同工作,实现跌倒检测与短信报警的闭环控制。

2.1 STC89C52单片机控制核心

STC89C52单片机是51系列高性能增强型CMOS单片机,具有高速、低功耗、抗干扰强等优点,是本系统的控制核心。所有的模块包括传感器读取、定时器控制、按键判断、蜂鸣器驱动、短信指令解析等均通过此单片机协调完成。

  • 工作电压:5V
  • 时钟频率:12MHz(可扩展至24MHz)
  • IO口资源:充足,满足多个模块通信和控制需求

2.2 ADXL345三轴加速度传感器模块

ADXL345是一款高分辨率、三轴数字输出的加速度传感器,用于检测老年人是否发生跌倒。其数据可通过I2C方式传输给单片机。

  • 测量范围:±2g、±4g、±8g、±16g
  • 通信方式:I2C
  • 安装位置:佩戴设备的底部,竖直放置为正常状态

通过读取X、Y、Z轴的加速度值,可以判断设备的朝向。当设备从竖直变为平放并持续超过15秒时,即可判断为跌倒。

2.3 GSM模块(SIM800/SIM900)

GSM模块负责实现短信功能,当老人跌倒且15秒内未自行恢复站立,系统通过该模块发送包含定位信息的报警短信。

  • 工作电压:4.2V(通过电源模块稳压)
  • 接口:UART串口通信
  • 短信功能:支持AT指令控制发送短信
  • 位置获取:部分模块带GPS功能,可查询经纬度;若无GPS模块可结合外部GPS定位模块实现位置信息获取

2.4 按键模块

用于用户手动取消误报警(例如老人弯腰、坐下),系统会设置在跌倒报警前的确认时间为15秒,用户可在此时间段按键取消报警。

  • 按键数量:1个
  • 接口方式:普通GPIO输入口接入,低电平触发

2.5 蜂鸣器报警模块

在检测到跌倒状态且未及时取消报警的情况下,蜂鸣器会响起,提醒老人及周围人员注意。

  • 类型:有源蜂鸣器
  • 接口方式:单片机IO口输出高电平控制

2.6 LED状态指示灯模块

用于指示系统当前状态,包括:

  • 正常工作状态
  • GSM模块初始化状态
  • 短信发送中状态
  • 短信发送成功/失败状态
  • 接口方式:接单片机GPIO输出,控制LED亮灭

2.7 电源模块

电源模块为系统提供稳定的电压。ADXL345、单片机工作电压为5V,而GSM模块通常要求4.2V,需通过AMS1117等LDO进行稳压转换。

  • 电源输入:5V USB或锂电池供电
  • 电压转换:AMS1117等稳压芯片

3 程序设计

程序设计围绕以下几个核心模块展开:加速度传感器数据采集与跌倒判断、15秒倒地定时器、按键处理、短信处理逻辑、状态指示逻辑等。

3.1 主程序框架

主函数初始化各个模块,包括串口、传感器、按键、蜂鸣器、LED灯,并进入主循环,不断检测跌倒状态和处理相应事件。

void main() {InitSystem();       // 初始化所有模块while(1) {DetectFall();   // 检测是否跌倒HandleSMS();    // 处理短信发送流程UpdateLED();    // 更新LED状态}
}

3.2 ADXL345传感器数据采集

通过I2C通信协议从ADXL345中读取X、Y、Z三个方向的加速度数值,然后进行角度判断。

void Read_ADXL345(void) {X = I2C_Read(ADXL345_X_REG);Y = I2C_Read(ADXL345_Y_REG);Z = I2C_Read(ADXL345_Z_REG);
}

跌倒判断逻辑如下:

bit IsFallen(void) {Read_ADXL345();if (abs(Z) < FALL_THRESHOLD) {  // 判断竖直方向加速度是否显著下降return 1;}return 0;
}

3.3 跌倒持续计时与判断

当系统检测到跌倒行为后,启动一个定时器,若15秒内状态未恢复,判断为真正跌倒并启动报警。

void DetectFall() {if (IsFallen()) {StartFallTimer();while (IsFallen()) {if (fall_timer > 15) {TriggerAlarm();break;}}} else {ResetFallTimer();}
}

3.4 按键取消报警模块

用户按下取消按键时可中止报警流程,避免误报。

void CheckKeyPress() {if (KEY == 0) {Delay(20);  // 消抖if (KEY == 0) {CancelAlarm();}}
}

3.5 GSM短信模块初始化与发送

使用AT指令控制GSM模块发送短信,需初始化串口并通过状态机控制流程。

初始化模块

void InitGSM() {SendString("AT\r");WaitResponse();SendString("AT+CMGF=1\r");  // 设置短信文本模式WaitResponse();
}

发送短信内容

void SendSMS(char* phone, char* content) {char cmd[30];sprintf(cmd, "AT+CMGS=\"%s\"\r", phone);SendString(cmd);Delay(100);SendString(content);SendByte(0x1A);  // 发送结束符
}

短信内容格式(包含经纬度信息)

char sms_text[] = "警报:老人跌倒!位置信息:经度:xxx,纬度:yyy";
SendSMS("138xxxxxxxx", sms_text);

3.6 LED状态灯控制

根据系统不同状态点亮对应LED灯:

void UpdateLED() {if (gsm_sending)LED1 = 1;elseLED1 = 0;if (alarm_active)LED2 = 1;elseLED2 = 0;
}

4 系统工作流程

  1. 系统上电初始化,进入正常监测模式;
  2. ADXL345传感器实时检测佩戴者的姿态角度;
  3. 若检测到从竖直状态变为平放,进入判断流程;
  4. 启动15秒定时器;
  5. 若在15秒内按下取消键,取消报警;
  6. 若15秒后仍处于平放状态,则视为跌倒,蜂鸣器启动报警,LED闪烁提示;
  7. 系统通过GSM模块发送包含经纬度的报警短信到预设手机;
  8. 监护人收到短信可迅速处理。

5 总结

本设计利用STC89C52单片机和ADXL345加速度传感器,实现了老年人跌倒检测与报警功能。通过GSM模块上报位置信息,为远程监护提供了有力支持。系统集成度高、响应灵敏、误报率低,具有良好的实用性与推广价值。在老年人日益增多的社会背景下,该系统有望广泛应用于养老、看护等领域,提高老年人的生命安全保障。