基于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.pswp.cn/news/166810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166810.shtml
英文地址,請注明出處:http://en.pswp.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;該服務器能夠將本地端口的數據包轉發到指定的遠程服務器上…