一.硬件方案
本系统由STM32单片机核心板、ADXL345加速度传感器、GSM、指示灯、按键电率+蜂鸣器报警及电源组成。
二.设计功能
(1)板子正常情况下是竖直装在口袋里的(adxl345模块在下角竖直立着),一旦倾角传感器检测到平放即摔倒,蜂鸣器报警,且摔倒的时间持续超过15秒短信报警(15秒是为了确定老人已经跌倒且15秒钟都没有自行爬起来,需要报警提醒周围的人帮忙)。如果老人没有跌倒,而是弯腰等等,这属于误报警,则老人可以自己用按键取消键取消警报。
(2)触发GSM模块实现短信的发送, 设备将会向人员发送信息“help me!”!
(3)短信处理及初始化有状态指示灯指示。
(4)GSM上电有几秒初始化,系统供电电源至少要支持5V/2A。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)PCB图如下:
四.软件设计
主程序源码
- 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; //按键延时处理
- }
- }
-
- }
- }
复制代码
|