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

一、系统方案
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 或者 Swrite_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 或者 Wwrite_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.mzph.cn/news/166810.shtml

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

相关文章

yarn:无法加载文件 C:\Users\***\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本

原因&#xff1a;PowerShell 脚本的执行有着严格的安全策略限制&#xff01; 解决方案&#xff1a;管理员身份启动Windows PowerShell 在命令行中输入set-ExecutionPolicy RemoteSigned 再使用yarn就可以了

SQL常见函数整理 _ LAG() 向上偏移

1. 用法 窗口函数&#xff0c;用于访问窗口中当前行之前的行的数据。该函数可以根据需要计算当前行之前的值&#xff0c;使我们能够轻松地比较不同行之间的差异和变化。 2. 基本语法 LAG(column, offset, default_value) OVER (ORDER BY column)column&#xff1a;代表在返回…

【UE5】资源(Asset)

了解UE游戏的基本构成 资源&#xff08;Asset&#xff09;: 在UE中&#xff0c;资源&#xff08;Asset&#xff09;是指游戏中使用到的各种素材&#xff0c;例如模型、纹理、材质、声音、动画、蓝图、数据表格、关卡等&#xff08;通常以uasset结尾&#xff09;&#xff0c;他…

Java shiro框架,切换身份后刷新subject的用户属性

/*** title 切换身份&#xff0c;登录后&#xff0c;动态更改subject的用户属性* param principal* desc principal为用户的认证信息*/ public static void reloadAuthorizing(User principal) throws Exception{Subject subject SecurityUtils.getSubject();String realmNam…

如何在springboot项目中使用minio上传下载删除文件

引入maven依赖 <!-- minio --> <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.2</version> </dependency>申请 bucket | access_key | secret_key 项目中配置相关参数 mini…

ROLLUP 的几点说明(十七)

ROLLUP 最根本的作用是提高某些查询的查询效率&#xff08;无论是通过聚合来减少数据量&#xff0c;还是修改列顺序以匹配前缀索引&#xff09;。因此 ROLLUP 的含义已经超出了“上卷”的范围。这也是为什么在源代码中&#xff0c;将其命名为 Materialized Index&#xff08;物…

土壤教学经典用图30张

一、土壤分布 二、土壤形成与气候 三、土壤形成与地形 四、土壤形成与成土母质 五、成土过程示意图 六、土壤剖面实景图 七、土壤剖面示意图 八、土壤质地 以上图片多来源于 人教、湘教、鲁教、中图、沪教 五套新教材及地图册

忘记7-zip密码,如何解压文件?

7z压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了7z压缩包的密码…

华为云测试计划CodeArts TestPlan常见问答汇总

1.【TestPlan】测试用例界面操作历史&#xff0c;能记录哪些操作 答&#xff1a;除了附件上传、更新、用例评论没有记录的&#xff0c;其他测试用例详情内的所有内容&#xff0c;比如描述、条件、测试步骤修改都有记录&#xff1b; 2.【TestPlan】测试用例等级选择规则是什么&…

YOLOv3老矣尚能战否?基于YOLOv3开发构建建钢铁产业产品智能自动化检测识别系统,我们来与YOLOv5进行全方位对比评测

钢铁产业产品智能自动化检测识别相关的项目在我们前面的博文中已经有了相应的实践了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a;《python基于DETR(DEtection TRansformer)开发构建钢铁产业产品智能自动化检测识别系统》 《AI助力钢铁产业数字化&#xff0c;pytho…

计算两个经纬度之间的真是距离----c++

来源:https://www.open-open.com/lib/view/open1430573897802.html #include <cmath> #define EARTH_RADIUS 6371.0;// 地球半径&#xff0c;单位千米static double HaverSin(double theta) {double v sin(theta / 2);return v * v; }static double ConvertDegreesToR…

OPPO VOOC快充原理

1 USB 3.0标准A插头 USB 3.0连接器是基于USB 2.0改进而来的&#xff0c;这个设计给USB 3.0连接器带来了一些潜在风险&#xff0c;如果USB 3.0设备插入主机的速度太慢&#xff0c;3.0的针脚还没来得及被识别到&#xff0c;就会被主机判定成USB 2.0的设备。 Figure 1-1 USB 3.0标…

centos系统下,docker安装sqlserver并用本地Navicat连接

文章目录 一&#xff0c;centos下安装docker二&#xff0c;docker安装sqlserver20192.1 安装遇到的问题2.1.1 修改用户名进不去数据库2.1.2 安装2022版的sqlserver发现启动失败 三&#xff0c;Navicat连接centos下的sqlserver3.1 下载ODBC Driver 参考微软网址&#xff1a; 使…

代码随想录算法训练营第四十五天【动态规划part07】 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 题目链接&#xff1a; 题目页面 求解思路&#xff1a; 动规五部曲 确定dp数组及其下标含义&#xff1a;爬到有i阶楼梯的楼顶&#xff0c;有dp[i]种方法递推公式&#xff1a;dp[i] dp[i-j];dp数组的初始化&#xff1a;dp[0] 1;确…

EcuM介绍

ECUM 1. ECUM 主要需求2. EcuM 设计详情2.1 启动与下电休眠2.1.1 启动与初始化2.1.2 EcuM 下电/休眠2.2 唤醒事件管理2.3 ECUM 模式2.3.1 Flexible2.3.2 Fixed2.3.3 Startup2.3.4 Shutdown2.3.5 SLEEP PHASE: Poll or Halt3. EcuM 集成接口调用4. 名称缩写解释5. 参考文档1. EC…

数据治理技术之数据清洗

数据清洗背景 数据质量一般由准确性、完整性、一致性、时效性、可信性以及可解释性等特征来描述&#xff0c;根据 Rahm 等人在 2000 年对数据质量基于单数据源还是多数据源以及问题出在模式层还是实例层的标准进行分类&#xff0c;将数据质量问题分为单数据源模式层问题、单数…

虚幻学习笔记—给UI添加动画

一、前言 本文所使用的虚幻版本为5.3.2&#xff0c;之前工作都是用unity&#xff0c;做这类效果用的最多的是一个DoTween的插件&#xff0c;在虚幻中都内置集成了这这种效果制作。 图1.1 UI动画 二、过程 1、首先&#xff0c;在诸如按钮、图像等可交互控件中选中&#xff0c;如…

centos userad命令详解

命令作用 用于创建用户常见参数 -d 指定用户的家目录-e 账号的到期时间&#xff0c;格式YYYY-MM-DD-u 指定该用户的默认UID&#xff0c;&#xff08;centos7开始1000是普通用户的第一个UID&#xff09;-g 指定一个初始的用户基本组&#xff08;必须已经存在&#xff09;-G 指定…

计算机网络之运输层

一、概述 物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的的问题&#xff0c;实现了主机到主机的通信 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程 如何为运行在不同主机上的应用进程提供直接的通信服务时运输层的任务…

基于Boost.Asio实现端口映射器

Boost.Asio 是一个功能强大的 C 库&#xff0c;用于异步编程和网络编程&#xff0c;它提供了跨平台的异步 I/O 操作。在这篇文章中&#xff0c;我们将深入分析一个使用 Boost.Asio 实现的简单端口映射服务器&#xff0c;该服务器能够将本地端口的数据包转发到指定的远程服务器上…