基于单片机的老人防摔倒的设计与实现

功能介绍

  • 以51单片机作为主控系统;
  • 通过LCD1602液晶显示屏显示当前的经纬度及时间的信息;
  • 温度传感器采集当前体温;
  • 通过GPS接收模块获得当前位置的位置的经度、纬度、时间和高度等信息;
  • 通过ADXL345检测老人摔倒的一瞬间重力加速度通过按键设置加速度上限,如果超过上限说明老人摔倒,蜂鸣器进行报警提醒GSM发送短信;
  • 通过SIM900A模块,将单片机和手机进行短信通信,手机上可以显示采集到的时间和经纬度信息;
  • 整个电路以5v供电;

电路图

PCB

源代码

cpp 复制代码
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>//printf串口输出头文件

#define uchar unsigned char
#define ushort  unsigned int
#define uint  unsigned long

#include "lcd1602.h"
#include "uart_trx.h"
#include "eeprom52.h"

#define RATIO 800		//系数,建议选择800-1000

sbit key1 = P1^0;//加键
sbit key2 = P1^1;//减键

sbit beep = P2^0;//蜂鸣器
sbit Fan = P1^3;//风扇

unsigned char pmBuf[7] = 0;//数据接收数组
uint PM25_Value = 0;     		//PM = ((pmBuf[1]<<8)+pmBuf[2])/1024*8*ratio
uint PM25_ValueMax = 200; //上限初始值

void EEPROM_WRITE()//EEPROM写入
{
		SectorErase(0x2000);//擦除扇区
	  byte_write(0x2001, (PM25_ValueMax>>8)&0xFF);//存储高8位
	  byte_write(0x2002, (PM25_ValueMax>>0)&0xFF);//存储低8位
	  byte_write(0x2009, 111);//存储校验值
}

void EEPROM_READ()//EEPROM读出
{
		if(byte_read(0x2009)!=111)//开机检测单片机是不是第一次使用,如果不是第一次使用,则先把数据存储一遍,再读取,数据就不会乱码
		{
				EEPROM_WRITE();//存储
			  delay_ms(100);
		}
		PM25_ValueMax = byte_read(0x2001)<<8 | byte_read(0x2002);//读取上限值
}

void Get_PM(void)//读取PM2.5值,具体的数据帧意思,请自行查阅芯片手册
{
    char i = 0;
    char j = 0;
    char k = 0;

	  COM.RX_Cnt = 0;
    if(COM.B_RX_OK == 1)//串口数据接收完成
    {
        for(i = 0; i<8; i++)
        {
            if((RX_Buffer[i] == 0xAA)&&(RX_Buffer[i+6]==0xFF))//判断接收的数据是否正确
            {
                goto find2;
            }
        }
        goto end2;
find2:
        for(j = 0; j<7; j++)
        {
            pmBuf[j] = RX_Buffer[i+j];//数据获取
        }

        PM25_Value = (unsigned int)((pmBuf[1]*256)+pmBuf[2])*5/2048.0*RATIO;//计算PM2.5值
        COM.B_RX_OK = 0;
    }
end2:
    return;
}



void main(void)
{
    unsigned int test;

	  EEPROM_READ();//开机读取存储值
    LCD_init();//1602初始化
    Uart_Init(2400);//串口初始化波特率2400
  
    LCD_write_string(0,0,"Pm2.5:    ug/m3 ");
    LCD_write_string(0,1,"PmMax:    ug/m3 ");
	  //显示上限值
	  LCD_write_char(7, 1, PM25_ValueMax % 1000 / 100 + 0x30);
		LCD_write_char(8, 1, PM25_ValueMax % 100 / 10 + 0x30);
		LCD_write_char(9, 1, PM25_ValueMax % 10 + 0x30);
    while(1)
    {
			if (test ++ > 250)//大约250ms读取一次
			{
					test = 0 ;

					Get_PM();//获取PM2.5
					if(PM25_Value > 999)//限值,最大999
					 PM25_Value = 999;
					//显示PM2.5
					LCD_write_char(7, 0, PM25_Value % 1000 / 100 + 0x30);
					LCD_write_char(8, 0, PM25_Value % 100 / 10 + 0x30);
					LCD_write_char(9, 0, PM25_Value % 10 + 0x30);
					
					if(PM25_Value >= PM25_ValueMax)//超过上限,蜂鸣器报警
					{
							beep = ~beep;
						  Fan = 0;
						  delay_ms(100);
					}
					else
					{
							beep = 1;
						  Fan = 1;
					}
			}
			if(key1 == 0)//加键按下
			{
					delay_ms(10);//消抖
				  if(key1 == 0)
					{
						  beep = 0;
						  delay_ms(100);
						  beep = 1;
							while(key1 == 0);
						  if(PM25_ValueMax<999)PM25_ValueMax+=10;//上限最大到999,每次加10
						  //显示
						  LCD_write_char(7, 1, PM25_ValueMax % 1000 / 100 + 0x30);
							LCD_write_char(8, 1, PM25_ValueMax % 100 / 10 + 0x30);
							LCD_write_char(9, 1, PM25_ValueMax % 10 + 0x30);
						  EEPROM_WRITE();//保存
					}
			}
			if(key2 == 0)//减键按下
			{
					delay_ms(10);
				  if(key2 == 0)
					{
						  beep = 0;
						  delay_ms(100);
						  beep = 1;
							while(key2 == 0);
						  if(PM25_ValueMax>=10)PM25_ValueMax-=10;//上限最小到0,每减10
						  //显示
						  LCD_write_char(7, 1, PM25_ValueMax % 1000 / 100 + 0x30);
							LCD_write_char(8, 1, PM25_ValueMax % 100 / 10 + 0x30);
							LCD_write_char(9, 1, PM25_ValueMax % 10 + 0x30);
						  EEPROM_WRITE();//保存
					}
			}
			delay_ms(1);
    }
}

元器件清单

|-------------------|----------|----|
| 基于单片机的老人防摔倒的设计与实现 |
| 名称 | 型号 | 数量 |
| 单片机 | STC89C52 | 1 |
| IC座 | DIP40 | 1 |
| 万能板 | 9*15cm | 1 |
| 晶振 | 11.0592M | 1 |
| 电解电容 | 10uF | 1 |
| 电解电容 | 1000uf | 1 |
| 瓷片电容 | 22pF | 2 |
| 电阻 | 10K | 3 |
| 电阻 | 1K | 4 |
| 电阻 | 2K | 1 |
| LED红 | 5MM | 1 |
| LED绿 | 5MM | 1 |
| 蜂鸣器 | 有源 | 1 |
| 三极管 | S9012 | 1 |
| 按键 | | 5 |
| 显示屏 | LCD1602 | 1 |
| 排针 | 16P | 1 |
| 排母 | 16P | 1 |
| 人体红外模块 | HC-SR501 | 1 |
| 排母 | 3P | 1 |
| 温度传感器 | DS18B20 | 1 |
| 烟雾传感器 | MQ-2 | 1 |
| 模数转换器 | ADC0832 | 1 |
| IC座 | 8P | 1 |
| GSM模块 | SIM800c | 1 |
| 电源座 | 5MM | 1 |
| 电源线 | 5V2A | 1 |
| 自锁开关 | | 1 |
| 继电器 | | 1 |
| 小水泵 | | 1 |
| 导线 | | 若干 |
| 焊锡丝 | | 若干 |

参考文献

参考文献

1\]王德保.GPS在城市控制网中的应用研究\[D\].山东:山东科技大学,2005. \[2\]何立民.从现代计算机视角看嵌入式系统(4)嵌入式系统40年发展史\[J\].单片机与嵌入式系统应用,2016,16(04):77-79. \[3\]康桂霞,刘达.FPGA应用技术教程\[M\].北京:人民邮电出版社:201306.229. \[4\]朴德慧,衣英刚.液晶显示器驱动板MCU电路介绍(上)\[J\].家电检修技术,2012(11):53. \[5\]段廷魁.全球卫星定位系统(GNSS)在工程测量中的实践运用探索0\[J\].科技创新与应用,2021(05):182-184. \[6\]宋戈,黄鹤松.51单片机应用开发范例大全\[M\].北京:人民邮电出版社:国家信息技术紧缺人才培养工程系列丛书,201206.558. \[7\]罗小青.单片机原理及应用教程\[M\].北京:人民邮电出版社,201409.180. \[8\]沈庆阳.单片机实践与应用\[M\].北京:清华大学出版社,2002. \[9\]杜深慧.温湿度检测装置的设计与实现\[M\].北京:机械工业出版社,2004. \[10\]林嘉.基于89S52的LCD1602程序设计\[J\].电脑知识与技术,2012(26):6376-6378. \[11\]刘光伟.基于单片机的温室温湿度监测系统设计与实现\[D\].秦皇岛市:燕山大学,2012. \[12\]褚福强,董学仁.单片机的网络接入技术研究\[J\].仪器仪表用户,2006(05):4-5. \[13\]陈英俊.基于单片机的温湿度监测和报警系统设计\[J\].广东石油化工学院学报,2013(04):42-46. \[14\]廖丽媛.基于应变式扭矩传感器的测量系统的设计\[D\].上海市:东华大学,2013. \[15\]刘九庆.温室环境工程技术\[M\].吉林:东北林业大学出版社,2002. \[16\]王明喜,崔世茂.大棚型日光温室光照、温度及湿度等性能的初步研究\[J\].农业工程技术(温室园艺),2008(05):19-21. \[17\]张迎辉.单片微型计算机键盘接口设计\[J\].信息技术,2004(07):68-69+91. \[18\]张友德,赵志英.单片微型机原理应用与实验\[M\].上海市:复旦大学出版社,2003. \[19\]赵芝芸.温室智能监控系统\[D\].江苏:江苏科技大学,2010. \[20\]张宏伟.基于STM32的智能环境监测系统设计与实现\[J\].大庆师范学院学报,2020(05):32-35. \[21\]王世伟,杨越.基于STM32的多型号舵机调试器设计\[J\].九江学院学报(自然科学版),2020,35(02):33-36. \[22\]Pengcheng Zhao,Meijun Ni,Chao Chen,Chenxi Wang,PingpingYang,Xiahui Wang,Chunyan Li,Yixi Xie,Junjie Fei. A Novel Self-protection Hydroquinone Electrochemical Sensor Based on Thermo -sensitive Triblock Polymer PS-PNIPAm-PS\[J\]. \[23\]Jian Wang,Jing Chen,Xiaofu Xiong,Xiaofeng Lu,ZhengLiao,Xiaobo Chen.Temperature safety analysis and backup protectionscheme improvement for overhead transmission line in poweroscillation condition\[T\].Electric Power Systems Research,2019,166. \[24\]Fuji Electric Co.Ltd.;Patent Issued for SeiconductorDevice And Method Of Outputting Temperature Alarm (USPTO10,164,626)\[J\].Electronics Newsweekly,2019. \[25\]VERSID,INC;Patent Issued for Refrigeration UnitTemperature Alarm Using Thermal Properties of Food to Eliminate FalseAlarms (USPTO 9752810)\[J\].Computers,Networks \&Communications,2017. \[26\]Fuji Electric Co.Ltd;Patent Application Titled"Semiconductor Device and Method of Outputting Teperature Alarm"Published Online (USPTO 20170077919)\[J\]. Technology \& BusinessJournal,2017. \[27\]su Yuanping,Xu Lihong,Goodman Erik D.Multi-layerhierarchical optimisation of greenhouse climate setpoints for energyconservation and improvement of crop yield\[J\].Biosystems \[28\]黄松茂.基于STM32的家庭环境监测系统的设计与实现\[D\].甘肃兰州.西北师范大学,2018.:23-30. \[29\]李大琳.智能车内温度监测系统设计\[J\].山东工业技术,2014(12):80-81. \[30\]郭雯,王海涛. 智能输液系统的发展与应用.医疗卫生装备,2012

相关推荐
Miuney_MAX8 小时前
【单片机】之HC32F460中断向量选择
单片机·嵌入式硬件
XINVRY-FPGA10 小时前
XC3S1000-4FGG320I Xilinx AMD Spartan-3 SRAM-based FPGA
嵌入式硬件·机器学习·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
猫猫的小茶馆13 小时前
【ARM】ARM的介绍
c语言·开发语言·arm开发·stm32·单片机·嵌入式硬件·物联网
猫猫的小茶馆13 小时前
【PCB工艺】数模电及射频电路基础
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·pcb工艺
点灯小铭13 小时前
基于单片机的智能药物盒设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
梓德原13 小时前
【基础】详细分析带隙型稳压电路的工作原理
单片机·嵌入式硬件·物联网
国科安芯14 小时前
航天医疗领域AS32S601芯片的性能分析与适配性探讨
大数据·网络·人工智能·单片机·嵌入式硬件·fpga开发·性能优化
小李做物联网15 小时前
【物联网毕业设计】60.1基于单片机物联网嵌入式项目程序开发之图像厨房监测系统
stm32·单片机·嵌入式硬件·物联网
贝塔实验室16 小时前
新手如何使用Altium Designer创建第一张原理图(三)
arm开发·单片机·嵌入式硬件·fpga开发·射频工程·基带工程·嵌入式实时数据库
@good_good_study16 小时前
STM32 ADC多通道采样实验
stm32·单片机·嵌入式硬件