31、基于51单片机老人防跌倒蜂鸣器报警系统加速度检测(原理图+PCB图+程序)

一、设计简介:

本设计是基于51单片机老人防跌倒蜂鸣器报警系统加速度检测,主要实现以下功能:

1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51 都可通用

2、板子竖直放置的时候,蜂鸣器不报警,板子歪倒一定角度,一定时间没有恢复竖直,则蜂鸣器鸣叫报警。

3、系统带有误报警按键,蜂鸣器报警的时候,如果老人认为是误报警,则按键按下,蜂鸣器停止报警。

4、按键停止报警后,如果还未站起,延时一段时间会报警,防止老人发生意外。

主要硬件组成:

STC89C52单片机、ADXL345重力加速度传感器、按键、蜂鸣器报警及电源

二、原理图

三、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)//如果处于触发警报 延时自加

五、资源获取

 本项目包含的所有文件都可以点击下面的名片,发送 “ 31、基于51单片机老人防跌倒蜂鸣器报警系统加速度检测 ” 获取!
项目纯手打,不是免费的哦~
希望可以帮到你哈!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值