完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一.硬件方案
本系统由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=1rn",11); //设置字符集 i=10; while(i--) delay_ms(100);//延时 UART_SendStr(USART1 ,"AT+CSCS="GSM"rn",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=1rn",11); //设置字符集 i=3; while(i--) delay_ms(100);//延时 UART_SendStr(USART1 ,"AT+CSCS="GSM"rn",15);//设置文本 i=3; while(i--) delay_ms(100);//延时 UART_SendStr(USART1 ,"AT+CMGS="+8615555183057"rn",26); //测试号 // UART_SendStr(USART1 ,"AT+CMGS="+8618105140357"rn",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; //按键延时处理 } } } } |
|
|
|
只有小组成员才能发言,加入小组>>
3318 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9063 浏览 16 评论
4088 浏览 18 评论
1185浏览 3评论
609浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
601浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2337浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1897浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 09:24 , Processed in 1.095324 second(s), Total 48, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号