打印
[STM32L4+]

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

[复制链接]
802|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一.硬件方案

本系统由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图如下:

使用特权

评论回复
5
丢丢手绢666|  楼主 | 2021-10-27 17:11 | 只看该作者
四.软件设计
主程序源码
int main(void)
{       
        delay_init();                     //延时函数初始化
        NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        LED_Init();                          //初始化与LED连接的硬件接?
        KEY_Init();
        uart_init(9600);
        TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms

        buzzer = 1;//初始化
        delay_ms(100);
        buzzer = 0; //关蜂鸣器
        led_gsm = 0;
       
  Init_ADXL345();//初始化 adxl345
  if(Single_Read_ADXL345(0X00)==0xe5)        //读取寄存器值 看是否初始化成功
  {
    delay_ms(5);
  }
  else
  {
    delay_ms(3);
  }

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

        UART_SendStr(USART1 ,"AT+CSCS=\"GSM\"\r\n",15);//设置文本
        i=10;
        while(i--) delay_ms(100);//延时
       
        led_gsm =1;
        while(1)
        {  
    if(ReadAdxl345== 1)   //定时读取adxl345数据
    {
      ReadAdxl345= 0;
      ReadData_x();                                                  //三轴检测函数
      CheckNum++;
      if((temp_X<550)||(temp_X>10000))       //该数据为检测值 不是固定的 一个大概的 角度
      {
        ErrorNum++;
      }
      if(CheckNum>=5)                  //进行5次处理
      {
        if(keyLater>=3)                  //非按键下
        {
          if(ErrorNum>=1)           //角度出现错误 5次出息3次情况
          {
            buzzer = 1;           //打开蜂鸣器
          }
          else
          {                                       
            buzzer = 0;                //关闭蜂鸣器
            reportLater=0;                //上报延时计数
          }                                       
        }
        ErrorNum=0;                  //清空滤波计数
        CheckNum=0;       
      }
    }

    if(reportLater>=15)        //15s
    {
      led_gsm = 0;//打开led
                       
      UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
      i=3;
      while(i--) delay_ms(100);//延时
                       
      UART_SendStr(USART1 ,"AT+CSCS=\"GSM\"\r\n",15);//设置文本
      i=3;
      while(i--) delay_ms(100);//延时
                        UART_SendStr(USART1 ,"AT+CMGS=\"+8615555183057\"\r\n",26); //测试号
//      UART_SendStr(USART1 ,"AT+CMGS=\"+8618105140357\"\r\n",26);  //可以修改电话号码
      i=3;
      while(i--) delay_ms(100);//延时
                       
      printf("help me !"); //发送短信息内容
      delay_ms(200);//延时
                       
      UART_SendStr(USART1 ,( char *)Crtl_Z, 1);        //发送
      i=40;
      while(i--) delay_ms(100);//延时
                       
      led_gsm =1;                //led关闭
      reportLater=0;        //上报标志清空
      keyLater=0;        //按键清零延时处理
    }
               
    if(key==0)                 //按键处理
    {
      delay_ms(3);          //按键消抖动
      if(key ==0)                 //按键处理
      {
        reportLater=0;          //按键延时上报
        buzzer = 0;                 //关闭蜂鸣器
        keyLater=0;                //按键延时处理
      }
    }
       
        }
}

使用特权

评论回复
6
caoyunhj2301| | 2021-10-27 17:13 | 只看该作者
UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11);

使用特权

评论回复
7
caoyunhj2301| | 2021-10-27 17:13 | 只看该作者
设置字符集

使用特权

评论回复
8
kzlzqiqi| | 2021-10-27 17:14 | 只看该作者
是摔倒之后才会报警吧?关键有什么用呢。。。就也不赶趟扶啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

394

帖子

0

粉丝