毕设帮助、开题指导、技术解答(有偿)见文末。
目录
摘要
目前,随着当今社会老龄化进程的逐步加剧,我们在新闻中经常能看到老人跌倒了,无人扶,进而导致老人的死亡。对于这种悲剧,我们也很无奈,因为怕扶了老人,可能会被讹,老年人跌倒造成的致病、住院率和死亡率急速提高,带来了严重的社会经济负担。因此,在不影响老年人正常活动的前提下,通过科学的手段监测老年人的活动,在检测到跌倒后迅速报警求助,可以有效地减少老年人跌倒带来的健康伤害和医疗开支。在分析比较国内外跌倒检测相关技术研究后,本文提出了一种基于ADXL345倾角传感器的跌倒检测与报警系统。ADXL345倾角传感器实时采集老人在日常活动中产生的倾角数据,然后将数据送到单片机STC89C52进行处理,并判断老年人的运动状态。当系统检测到跌倒发生时,发出报警声音提醒老人和周围的人。
关键词:单片机,按键,蜂鸣器
一、硬件方案
本系统采用51单片机+ADXL345重力加速度传感器、按键、蜂鸣器报警及电源组成。
二、设计功能
1、本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)
2、板子竖直放置的时候,蜂鸣器不报警,板子歪倒一定角度,一定时间没有恢复竖直,则蜂鸣器鸣叫报警。
3、系统带有误报警按键,蜂鸣器报警的时候,如果老人认为是误报警,则按键按下,蜂鸣器停止报警。
4、按键停止报警后,如果还未站起,延时一段时间会报警,防止老人发生意外。
三、实物图
四、原理图
五、PCB图
六、程序源码
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <math.h> //Keil library
#include "delay.h"
#include "adxl345.h"
sbit buzzer=P1^4; //引脚定义
sbit key=P2^2;
unsigned long times_20ms=0; //定时器计数
unsigned char reportFlag=0; //确认是否发送警报
unsigned char CheckNum=0; //adxl345采集次数
unsigned char ErrorNum=0; //adxl345采集次数中正常未跌倒次数
unsigned char read_adxl345=0; //读取adxl345数据标志
unsigned char Delay_Sec=0; //秒延时 定时器中断中处理
void Init_Timer0(void);//定时器初始化
void main (void)
{
Init_Timer0(); //定时器0初始化
buzzer=0; //打开蜂鸣器
DelayMs(100); //延时有助于稳定
buzzer=1; //关闭蜂鸣器
Init_ADXL345(); //初+始化ADXL345
if(Single_Read_ADXL345(0X00)!=0xe5) //读出的数据为0XE5,表示正确//**All notes can be deleted and modified**//
{
DelayMs(5);
// SendStr("ready ok",8);//显示第二行
}
else
{
DelayMs(3);
}
buzzer=1; //闭合蜂鸣器
while(1) //主循环
{
if(read_adxl345==1) //进行读取
{
read_adxl345=0; //读取标志清除
ReadData_x(); //读取数据 并进行判断 再该函数内部
CheckNum++;
if((temp_X<550)||(abs(temp_Y)>750)) //方位值判断 查看正常次数
{
ErrorNum++; //异常计数
}
if(CheckNum>=5) //进行5次处理
{
if(ErrorNum>=1) //角度出现错误 5次出息1次情况
{
if(reportFlag==0) //检测是否第一次开始 是开始延时
{
Delay_Sec=0; //延时清零
}
reportFlag=1; //警报
}
else
{
reportFlag=0; //不进行警报
Delay_Sec = 0;
}
ErrorNum=0; //清空滤波计数
CheckNum=0; //清空检测次数
}
}
if((reportFlag==1)&&(Delay_Sec>=3))//3S 上报
{
buzzer=0; //打开蜂鸣器
}
else
{buzzer=1;} //关闭蜂鸣器
if(key == 0)
{
DelayMs(10);
if(key == 0) //有按键触发 关闭蜂鸣器响声
{
Delay_Sec=0; //清空延时计数
reportFlag=0;
buzzer=1; //关闭蜂鸣器
}
}
}
}
void Init_Timer0(void)
{
//**All notes can be deleted and modified**//
TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
times_20ms++;
if(times_20ms%10==0) //200ms
{
read_adxl345=1; //启动转换
if(reportFlag==1)//如果处于触发警报 延时自加
七、资料包括
需要完整的资料可以点击下面的名片,找我要资源压缩包的百度网盘下载地址及提取码。