基于51单片机倾角MPU6050老人跌倒远程GSM短信报警器+源程序

news2024/11/16 10:16:33

一、系统方案
1、本设计采用这51单片机作为主控器。
2、MPU6050角度值送到液晶1602显示。
3、红外传感器检测心率。
4、跌倒远程GSM报警。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
void LCD_Init() //初始化液晶时间显示
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x10);
}

void LCD_Clear(void)
{
write_com(0x01);
}
2、液晶显示程序
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x–)
for(y=110;y>0;y–);
}

void write_com(uchar com)
{
w=0;
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_dat(uchar date)
{
w=0;
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void write_char(uchar x,uchar y,uchar dat)
{
if (x == 0)
{
write_com(0x80 + y);
}
else
{
write_com(0xC0 + y);
}
write_dat(dat);
}

void write_string(uchar x,uchar y,uchar *s) //显示字符串
{
if(x==0)
write_com(0x80+y);
else
write_com(0xc0+y);
while(*s)
{
write_dat(*s);
s++;
}
}

void shownum(uchar x,uchar y,int dat,uchar n) //x=行 y=列 dat 数据位
{
if(n5)
{
if(x
0)
{
write_com(0x80+y); //显示湿度值
write_dat(dat%100000/10000+0x30);
write_dat(dat%10000/1000+0x30);
write_dat(dat%1000/100+0x30);
write_dat(dat%100/10+0x30);
write_dat(dat%10+0x30);
}
if(x==1)
{
write_com(0xc0+y); //显示湿度值
write_dat(dat%100000/10000+0x30);
write_dat(dat%10000/1000+0x30);
write_dat(dat%1000/100+0x30);
write_dat(dat%100/10+0x30);
write_dat(dat%10+0x30);
}
}

if(n==4)
	{
		 if(x==0)
		 {
					write_com(0x80+y);  //显示湿度值
			    write_dat(dat%10000/1000+0x30);
					write_dat(dat%1000/100+0x30);
					write_dat(dat%100/10+0x30);
					write_dat(dat%10+0x30);
		 }
			if(x==1)
			{				
					write_com(0xc0+y);  //显示湿度值 
					write_dat(dat%10000/1000+0x30);
					write_dat(dat%1000/100+0x30);
					write_dat(dat%100/10+0x30);
					write_dat(dat%10+0x30);
			}
	}
	
		if(n==3)
	{
		 if(x==0)
		 {
					write_com(0x80+y);  
					write_dat(dat%1000/100+0x30);
					write_dat(dat%100/10+0x30);
					write_dat(dat%10+0x30);
		 }
			if(x==1)
			{	
					write_com(0xc0+y);  
					write_dat(dat%1000/100+0x30);
					write_dat(dat%100/10+0x30);
					write_dat(dat%10+0x30);
			}
	}		
		if(n==2)
	{
			if(x==0)
		 {
					write_com(0x80+y);  
					write_dat(dat%100/10+0x30);
					write_dat(dat%10+0x30);
		 }
			if(x==1)
			{	
					write_com(0xc0+y);  
					write_dat(dat%100/10+0x30);
					write_dat(dat%10+0x30);
			}
	}

}
3、MPU6050程序
void show_x()
{
int i;
float t;
i=GetData(ACCEL_XOUT_H); //X ,16位
i/=64; //转换为10位数据
if(i<0)
{
i=-i;
// DisplayOneChar(2,1,‘-’);
write_com(0xC0+8);
write_dat(0x2D);
}
else
{
write_com(0xC0+8);
write_dat(0x2B);
}
t=(float)i*3.9;
if(t>800)
{
beep1();
}
else
beep=1;
write_dat((uint)t/1000+0x30);
write_dat(0x2e);
write_dat((uint)t%1000/100+0x30);
}

void show_y()
{
int i;
float t;
i=GetData(ACCEL_YOUT_H); //X ,16位
i/=64; //转换为10位数据 1024
if(i<0)
{
i=-i;
// DisplayOneChar(2,1,‘-’);
write_com(0xC0+8);
write_dat(0x2D);
}
else
{
write_com(0xC0+8);
write_dat(0x2B);
}
t=(float)i*3.9;
write_dat((uint)t/1000+0x30);
write_dat(0x2e);
write_dat((uint)t%1000/100+0x30);
}

void show_z()
{
int i;
float t;
i=GetData(ACCEL_ZOUT_H); //X ,16位
i/=64; //转换为10位数据
if(i<0)
{
i=-i;
// DisplayOneChar(2,1,‘-’);
write_com(0x80+2);
write_dat(0x2D);
}
else
{
write_com(0x80+2);
write_dat(0x2B); //+
}
t=(float)i*31; //转化为90度
angle=(uint)t/100+(uint)t%1000/100;
// shownum(0,8,angle,4);
write_dat((uint)t/1000+0x30);
write_dat(0x2e);
write_dat((uint)t%1000/100+0x30);
}

void show_sx()
{
int i;
float t;
i=GetData(GYRO_XOUT_H); //X ,16位
i/=64; //转换为10位数据
if(i<0)
{
i=-i;
flag=0;
angle=i;
// DisplayOneChar(2,1,‘-’);
write_com(0xC0+8);
write_dat(0x2D); //-
}
else
{
flag=1;
angle=i;
write_com(0xC0+8);
write_dat(0x2B); //+
}
if(i>10)
beep2();
else
beep=1;
write_dat(i/1000+0x30);
write_dat(i%100/10+0x30);
write_dat(i%10+0x30);
}

void show_sy()
{
int i;
float t;
i=GetData(GYRO_YOUT_H); //X ,16位
i/=64; //转换为10位数据
if(i<0)
{
// DisplayOneChar(2,1,‘-’);
i=-i;
flag=0;
angle=i;
write_com(0xC0+8);
write_dat(0x2D);
}
else
{
flag=1;
angle=i;
write_com(0xC0+8);
write_dat(0x2B);
}
write_dat(i/1000+0x30);
write_dat(i%100/10+0x30);
write_dat(i%10+0x30);
}
void show_sz()
{
int i;
float t;
i=GetData(GYRO_ZOUT_H); //X ,16位
i/=64; //转换为10位数据
if(i<0)
{
i=-i;
flag=0;
angle=i;
// DisplayOneChar(2,1,‘-’);
write_com(0xC0+8);
write_dat(0x2D);
}
else
{
flag=1;
angle=i;
write_com(0xC0+8);
write_dat(0x2B);
}

 write_dat(i/100+0x30);
 write_dat(i%100/10+0x30);
 write_dat(i%10+0x30);

}

4、核心算法程序
void main()
{
LCD_Init() ;
InitMPU6050(); //
init_uart();
// Time0_init();
write_string(0,0," Please “);
write_string(1,0,” Wait ");
delayms(1000);
LCD_Clear() ;
delayms(500);
write_string(0,0,“A:”);
write_char(0,5,0xdf) ;

while(1)
{
	show_z();
	Alarm(angle);
	

		
					
	if(displayOK==0)//如果显示关
	{
	 	rate = 0;
	}
	else//如果显示开
	{
 		rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);  //计算脉搏次数
	}
			
	
	
	 write_com(0x80+7);
   write_dat(rate/100+0x30);
	 write_dat(rate%100/10+0x30);
	 write_dat(rate%10+0x30);
	write_dat('/');
	write_dat('m');
	write_dat('i');
	write_dat('n');
	
	if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'G' && RX_Buffer[6] == ',' && RX_Buffer[13] == '.')			//确定是否收到"GPGGA"这一帧数据
	{
		for( i = 0; i < 68 ; i++)
		{
			Display_GPGGA_Buffer[i] = RX_Buffer[i];	
		}
		

		Flag_Calc_GPGGA_OK = 1;
	}
	if(Flag_Calc_GPGGA_OK == 1)
	{
		
		Flag_Calc_GPGGA_OK = 0;
	

		write_com(0x80+0x40);			//设置指针
		write_dat(Display_GPGGA_Buffer[28]);			//N 或者 S
		write_dat(Display_GPGGA_Buffer[17]);			//纬度
		write_dat(Display_GPGGA_Buffer[18]);			//纬度
		write_dat('.');								//.
		write_dat(Display_GPGGA_Buffer[19]);			//纬度
		write_dat(Display_GPGGA_Buffer[20]);			//纬度
	
		write_dat(' ');		
		write_dat(Display_GPGGA_Buffer[42]);			//E 或者 W

		write_dat(Display_GPGGA_Buffer[30]);			//经度
		write_dat(Display_GPGGA_Buffer[31]);	
		write_dat(Display_GPGGA_Buffer[32]);	
		write_dat('.');								//.						
		write_dat(Display_GPGGA_Buffer[33]);			
		write_dat(Display_GPGGA_Buffer[34]);	
		
	}
	
	
}

}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1246810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux | 创建 | 删除 | 查看 | 基本命名详解

Linux | 创建 | 删除 | 查看 | 基本命名详解 文章目录 Linux | 创建 | 删除 | 查看 | 基本命名详解前言一、安装Linux1.1 方法一&#xff1a;云服务器方式1.2 方法二&#xff1a;虚拟机方式 二、ls2.2 ll 三、which3.1 ls -ld 四、pwd五、cd5.1 cd .\.5.2 ls -al5.3 重新认识命…

万份水稻样本,挖掘罕见变异

水稻作为全球最重要的粮食作物之一&#xff0c;为全球一半以上的人口提供食物。自然变异是基因改良和现代育种的重要遗传基础&#xff0c;广泛挖掘水稻种质群体中的变异具有重要意义&#xff0c;近年来&#xff0c;科学家们更多关注大规模群体中的稀有变异。 2023年10月&#…

Nat. Biotechnol. | 利用深度学习进行蛋白质同源性检测和结构比对

今天为大家介绍的是来自Kyunghyun Cho和Richard Bonneau团队的一篇论文。在生物技术领域&#xff0c;挖掘序列&#xff08;sequence&#xff09;、结构&#xff08;structure&#xff09;和功能&#xff08;function&#xff09;之间的关系&#xff0c;需要更好的方法来比对那些…

国内企业出海首选的免费开源订单管理系统(OMS)解决方案

用开源智造Odoo订单管理系统 (OMS) 解决方案实现"订单到收款"流程自动化 开源智造Odoo 订单管理软件功能消除了手动操作瓶颈&#xff0c;可防止出错&#xff0c;还建立了从销售报价到订单履行的顺畅工作流来确保及时开票和付款&#xff0c;从而帮助您理顺订单处理过程…

前端设计问题:iframe

居中问题&#xff1a; 尝试了一般的居中方法&#xff0c;无效果 display: flex;justify-content: center;align-items: center;放到导航栏下面不居中 放到页面底部还是不居中 Code <iframe id"demo_sanshui" src"demo_sanshui.html" width"120%…

什么是 npm —— 写给初学者的编程教程

原文链接&#xff1a; 什么是 npm —— 写给初学者的编程教程 自 2009 年以来&#xff0c;Node.js 一直席卷全球。成千上万个系统基于 Node.js 构建&#xff0c;促使开发者在社区宣称“JavaScript 正在吞噬软件”。 Node 成功的主要因素之一是它广受欢迎的软件包管理器——np…

【Vue】Vue3 配置全局 scss 变量

variables.scss $color: #0c8ce9;vite.config.ts // 全局css变量css: {preprocessorOptions: {scss: {additionalData: import "/styles/variables.scss";,},},},.vue 文件使用

Docker 快速搭建 Gitlab 服务

linux环境&#xff1a; 使用 vim 编辑 hosts 文件&#xff1a; vim /etc/hosts按 I 进入编辑模式&#xff0c;在文件末行追加上虚拟机的 IP 和要设置的域名&#xff1a; 192.168.1.17 gitlab.kunwu.toplwindows环境&#xff1a; Windows 系统的 hosts 文件位于 C:\Windows\S…

please upgrade numpy version to >=1.20

升级 upgrade numpy_升级numpy-CSDN博客 pip install numpy --upgrade 没有pip conda install numpy --upgrade 会报错 conda list numpy来查看numpy版本 似乎这个numpy要看numpy-base这个 似乎没有pip

【AOSP】生成签名文件release key,通过Android源码对apk进行签名

简介 现在apk都需要签名&#xff0c;Flutter做的项目官方规定编译apk必须签名。 签名的好处&#xff1a; 应用来源验证&#xff1a; 应用签名允许Android系统验证应用的来源。每个应用都使用开发者的私钥进行签名&#xff0c;而应用的签名信息包含在应用的APK文件中。当用户尝…

组合不重复的3位数

编程要求 给出四个不同的数字&#xff0c;能够组成多少个不重复的3位数&#xff0c;按照从小到大的顺序输出&#xff0c;每行一个。 测试用例 测试输入 1 2 3 4 测试输出 123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 …

生产实践:Redis与Mysql的数据强一致性方案

公众号「架构成长指南」&#xff0c;专注于生产实践、云原生、分布式系统、大数据技术分享。 数据库和Redis如何保存强一致性&#xff0c;这篇文章告诉你 目的 Redis和Msql来保持数据同步&#xff0c;并且强一致&#xff0c;以此来提高对应接口的响应速度&#xff0c;刚开始考…

2016年10月3日 Go生态洞察:Go 1.7中的子测试和子基准测试

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

复亚智能交通无人机:智慧交通解决方案大公开

城市的现代化发展离不开高效的交通管理规划。传统的交通管理系统庞大繁琐&#xff0c;交警在执行任务时存在安全隐患。在这一背景下&#xff0c;复亚智能交通无人机应运而生&#xff0c;成为智慧交通管理中的重要组成部分。交通无人机凭借其高灵活性、低成本、高安全性等特点&a…

6个常用的聚类评价指标

评估聚类结果的有效性&#xff0c;即聚类评估或验证&#xff0c;对于聚类应用程序的成功至关重要。它可以确保聚类算法在数据中识别出有意义的聚类&#xff0c;还可以用来确定哪种聚类算法最适合特定的数据集和任务&#xff0c;并调优这些算法的超参数(例如k-means中的聚类数量…

rhino 取消画线自带控制点方法~

很多朋友反映不知道 rhino 怎么取消画线自带控制点&#xff1f;下面就这个问题&#xff0c;一起来看看吧&#xff01; 软件地址&#xff1a;Rhino 8 for Mac中文下载 rhino 怎么取消画线自带控制点&#xff1f; 在Rhino中选择“线条”工具&#xff0c;或者使用快捷键“L”来…

上门预约小程序开发优势

想要放松身心&#xff0c;享受按摩的舒适感&#xff1f;那就需要一个专业的按摩师来上门服务。我们开发的预约按摩小程序app系统&#xff0c;汇聚各类上门按摩服务&#xff0c;包括推拿SPA、小儿推拿、中医等&#xff0c;为您提供高价值、高标准的养生健康体验。24小时随时提供…

『接口测试干货』| Newman+Postman接口自动化测试完整过程

『接口测试干货』| NewmanPostman接口自动化测试完整过程 1 Newman简介2 如何安装Newman&#xff1f;2.1 安装NodeJs2.2 安装Newman2.2 解决Newman不是内部命令 3 Newman使用3.1 Newman如何运行集合&#xff1f;3.2 如何查看帮助文档&#xff1f;3.3 环境变量设置3.4 关于全局变…

MyBatisPlus总结

MyBatis-Plus时Mybatis的Best Partner MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性 无侵入损耗小强大的 CR…

第21章 JUC并发编程

通过本章的学习可以学到&#xff1a;掌握java.util.concurrent(JUC)开发框架的核心接口与使用特点,掌握TimeUnit类的作用&#xff0c;并且可以使用此类实现日期时间数据转换&#xff0c;掌握多线程原子操作类的实现以及与volatile关键字的应用&#xff0c;理解ThreadFactory类的…