[STM32L4+] STM32单片机老人防跌倒报警系统GSM短信上报加速度

[复制链接]
 楼主| 丢丢手绢666 发表于 2021-10-27 17:08 | 显示全部楼层 |阅读模式
一.硬件方案

本系统由STM32单片机核心板、ADXL345加速度传感器、GSM、指示灯、按键电率+蜂鸣器报警及电源组成。


二.设计功能

(1)板子正常情况下是竖直装在口袋里的(adxl345模块在下角竖直立着),一旦倾角传感器检测到平放即摔倒,蜂鸣器报警,且摔倒的时间持续超过15秒短信报警(15秒是为了确定老人已经跌倒且15秒钟都没有自行爬起来,需要报警提醒周围的人帮忙)。如果老人没有跌倒,而是弯腰等等,这属于误报警,则老人可以自己用按键取消键取消警报。

(2)触发GSM模块实现短信的发送, 设备将会向人员发送信息“help me!”!

(3)短信处理及初始化有状态指示灯指示。

(4)GSM上电有几秒初始化,系统供电电源至少要支持5V/2A。


 楼主| 丢丢手绢666 发表于 2021-10-27 17:09 | 显示全部楼层
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
 楼主| 丢丢手绢666 发表于 2021-10-27 17:10 | 显示全部楼层
 楼主| 丢丢手绢666 发表于 2021-10-27 17:11 | 显示全部楼层
2)PCB图如下: 573076179178608fe3.png
 楼主| 丢丢手绢666 发表于 2021-10-27 17:11 | 显示全部楼层
四.软件设计
主程序源码
  1. int main(void)
  2. {       
  3.         delay_init();                     //延时函数初始化
  4.         NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  5.         LED_Init();                          //初始化与LED连接的硬件接?
  6.         KEY_Init();
  7.         uart_init(9600);
  8.         TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms

  9.         buzzer = 1;//初始化
  10.         delay_ms(100);
  11.         buzzer = 0; //关蜂鸣器
  12.         led_gsm = 0;
  13.        
  14.   Init_ADXL345();//初始化 adxl345
  15.   if(Single_Read_ADXL345(0X00)==0xe5)        //读取寄存器值 看是否初始化成功
  16.   {
  17.     delay_ms(5);
  18.   }
  19.   else
  20.   {
  21.     delay_ms(3);
  22.   }

  23.         i=50;
  24.         while(i--) delay_ms(100);//延时
  25.        
  26.         UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
  27.         i=10;
  28.         while(i--) delay_ms(100);//延时

  29.         UART_SendStr(USART1 ,"AT+CSCS="GSM"\r\n",15);//设置文本
  30.         i=10;
  31.         while(i--) delay_ms(100);//延时
  32.        
  33.         led_gsm =1;
  34.         while(1)
  35.         {  
  36.     if(ReadAdxl345== 1)   //定时读取adxl345数据
  37.     {
  38.       ReadAdxl345= 0;
  39.       ReadData_x();                                                  //三轴检测函数
  40.       CheckNum++;
  41.       if((temp_X<550)||(temp_X>10000))       //该数据为检测值 不是固定的 一个大概的 角度
  42.       {
  43.         ErrorNum++;
  44.       }
  45.       if(CheckNum>=5)                  //进行5次处理
  46.       {
  47.         if(keyLater>=3)                  //非按键下
  48.         {
  49.           if(ErrorNum>=1)           //角度出现错误 5次出息3次情况
  50.           {
  51.             buzzer = 1;           //打开蜂鸣器
  52.           }
  53.           else
  54.           {                                       
  55.             buzzer = 0;                //关闭蜂鸣器
  56.             reportLater=0;                //上报延时计数
  57.           }                                       
  58.         }
  59.         ErrorNum=0;                  //清空滤波计数
  60.         CheckNum=0;       
  61.       }
  62.     }

  63.     if(reportLater>=15)        //15s
  64.     {
  65.       led_gsm = 0;//打开led
  66.                        
  67.       UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
  68.       i=3;
  69.       while(i--) delay_ms(100);//延时
  70.                        
  71.       UART_SendStr(USART1 ,"AT+CSCS="GSM"\r\n",15);//设置文本
  72.       i=3;
  73.       while(i--) delay_ms(100);//延时
  74.                         UART_SendStr(USART1 ,"AT+CMGS="+8615555183057"\r\n",26); //测试号
  75. //      UART_SendStr(USART1 ,"AT+CMGS="+8618105140357"\r\n",26);  //可以修改电话号码
  76.       i=3;
  77.       while(i--) delay_ms(100);//延时
  78.                        
  79.       printf("help me !"); //发送短信息内容
  80.       delay_ms(200);//延时
  81.                        
  82.       UART_SendStr(USART1 ,( char *)Crtl_Z, 1);        //发送
  83.       i=40;
  84.       while(i--) delay_ms(100);//延时
  85.                        
  86.       led_gsm =1;                //led关闭
  87.       reportLater=0;        //上报标志清空
  88.       keyLater=0;        //按键清零延时处理
  89.     }
  90.                
  91.     if(key==0)                 //按键处理
  92.     {
  93.       delay_ms(3);          //按键消抖动
  94.       if(key ==0)                 //按键处理
  95.       {
  96.         reportLater=0;          //按键延时上报
  97.         buzzer = 0;                 //关闭蜂鸣器
  98.         keyLater=0;                //按键延时处理
  99.       }
  100.     }
  101.        
  102.         }
  103. }
caoyunhj2301 发表于 2021-10-27 17:13 | 显示全部楼层
UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11);
caoyunhj2301 发表于 2021-10-27 17:13 | 显示全部楼层
设置字符集
kzlzqiqi 发表于 2021-10-27 17:14 | 显示全部楼层
是摔倒之后才会报警吧?关键有什么用呢。。。就也不赶趟扶啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

475

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部