1.1、報警裝置發展現狀和發展趨勢
近年來,隨著計算機技術、網絡技術、傳感器技術等高科技技術的發展,以及半導體制造工藝的提高,智能設備的性能有了很大的提高。
目前跌倒報警裝置是通過無線對講系統研發的,它外觀相對精美,但是設計忽略了一個問題,人性化,因為大多數產品不夠人性化,另外,部分設備需要進行操作按鈕、實施對講,就更不現實。當前智能裝備了較多的傳感器和智能系統,為設計成功研制提供了研究平臺。
1.2研究的意義和價值
利用智能設備進行跌倒檢測是一個可行的且有很大推廣潛力的技術,同時甚至可以完成兩個工作:跌倒檢測和救助通信。這樣不僅可以降低系統成本,實時監測人體活動,還可以結合GPS確定用戶的跌倒位置。第一時間發現跌倒事件發生地點。因此,基于智能設備的上述優點,本文設計了一種裝置小巧,攜帶方便的智能跌倒監控設備。
聯系QQ:824238920
2.png (202.78 KB, 下載次數: 45)
下載附件
模塊照片
2018-5-10 23:49 上傳
1.png (256.77 KB, 下載次數: 59)
下載附件
手機藍牙連接模塊
2018-5-10 23:49 上傳
單片機源程序如下:
- #include <SoftwareSerial.h>
- #include <MsTimer2.h>
- #include "Wire.h"
- #include "I2Cdev.h"
- #include "MPU6050.h"
- MPU6050 accelgyro;
- #define NUM 10
- #define NUM_XYZ 6
- //int16_t ax[NUM], ay[NUM], az[NUM];
- //int16_t gx[NUM], gy[NUM], gz[NUM];
- int16_t agxyz[NUM_XYZ][NUM];
- long Sumagxyz[NUM_XYZ];
- long Avgagxyz[NUM_XYZ];
- bool blinkState = false;
- const int BEEP = 10;
- const int KEY_0 = 8;
- const int LED = 9;
- static unsigned char index = 0;
- static unsigned char Send = 3;
- static unsigned char Key_State = 0;
- static unsigned char Waring = 0;
- static unsigned char BEEP_State = 0;
- static unsigned char Tmr20msFlag = 0;
- static unsigned char gMainLoop100msCnt = 1;
- static unsigned char gMainLoop500msCnt = 2;
- static unsigned char gMainLoop1000msCnt = 3;
- static unsigned char gSchedularType = 0;
- static int lastKEY0 = 0;
- char nmeaSentence[68];
- String last_latitude = "";
- String last_longitude = "";
- String Set_latitude = "";
- String Set_longitude = "";
- String g_latitude = "";
- String g_longitude = "";
- SoftwareSerial mySerial(2, 3); // RX, TX
- void flash()
- {
- Tmr20msFlag = 1;
- //Serial.println("20ms");
- }
- void Task_20ms(void)
- {
- KeyCheck();
- if(Key_State)
- {
- GetData();
- }
- }
- void Task_100ms(void)
- {
- if(Key_State)
- {
- if( (Check()) && ( Waring == 0))
- {
- Waring = 1;
- Send = 0;
- }
- }
- else
- {
- Waring = 0;
- }
- if( Waring == 0 )
- {
- BEEP_State = HIGH;
- }
- else
- {
- BEEP_State = !BEEP_State;
- }
- digitalWrite(BEEP,BEEP_State); //蜂鳴器響
- //Serial.println("100ms");
- }
- void Task_500ms(void)
- {
- if(Waring == 1)
- {
- if( Send == 0 )
- {
- SendGPS0();
- Send = 1;
- }
- else
- {
- SendGPS1();
- Send = 0;
- }
- }
- else
- {
- //Waring==0;
- }
- //Serial.println("500ms);
- }
- void Task_1000ms(void)
- {
- //Serial.println("1000ms");
- }
- void GetData(void)
- {
- int16_t lax, lay, laz;
- int16_t lgx, lgy, lgz;
- accelgyro.getMotion6(&lax, &lay, &laz, &lgx, &lgy, &lgz);
- agxyz[0][index] = lax; agxyz[1][index] = lay, agxyz[2][index] = laz;
- agxyz[3][index] = lgx, agxyz[4][index] = lgy, agxyz[5][index] = lgz;
- if( index > NUM ) index = 0;
- }
- bool Check(void)
- {
- bool reval = 0;
- unsigned char i= 0;
- unsigned char j= 0;
- for( i = 0;i < NUM_XYZ; i++ )
- {
- Sumagxyz[i] = agxyz[i][0]+agxyz[i][1]+agxyz[i][2]+agxyz[i][3]+agxyz[i][4]+agxyz[i][5]+agxyz[i][6]+agxyz[i][7]+agxyz[i][8]+agxyz[i][9];
- Avgagxyz[i] = Sumagxyz[i]/NUM;
- Sumagxyz[i] = 0;
- for( j = 0;j < NUM; j++ )
- {
- Sumagxyz[i] = Sumagxyz[i] + (agxyz[i][j] -Avgagxyz[i])*(agxyz[i][j] -Avgagxyz[i]);
- }
- Avgagxyz[i]= Sumagxyz[i]/NUM;
- Avgagxyz[i]= Avgagxyz[i]/10000;;
- }
- if((Avgagxyz[0]>100)&&(Avgagxyz[1]>100)&&(Avgagxyz[2]>100))
- {
- reval = 1;
- }
- return reval;
- }
- void Task_IDLE(void)
- {
- KeyCheck();
- if(Key_State)
- {
- GetGPS();
- }
- else
- {
- }
- //Serial.println("IDLE");
- }
- void KeyCheck(void)
- {
- int lKEY0 = digitalRead(KEY_0);
- if(( lKEY0 != lastKEY0) && (lKEY0 == 1 ))
- {
- Key_State = !Key_State;
- if(Key_State)
- {
- digitalWrite(LED,LOW);
- Serial.println("Lock");
- }
- else
- {
- digitalWrite(LED,HIGH);
- Serial.println("UnLock");
- }
- }
- lastKEY0 = lKEY0;
- }
- String parseGprmcLat(String s)
- {
- int pLoc = 0; int lEndLoc = 0; int dEndLoc = 0; String lat;
- if(s.substring(0,4) == "GPRM")
- {
- for(int i = 0; i < 5; i++)
- {
- if(i < 3) { pLoc = s.indexOf(',', pLoc+1); }
- if(i == 3) { lEndLoc = s.indexOf(',', pLoc+1); lat = s.substring(pLoc+1, lEndLoc); }
- else { dEndLoc = s.indexOf(',', lEndLoc+1); lat = lat + " " + s.substring(lEndLoc+1, dEndLoc); }
- }
- return lat;
- }
- }
- String parseGprmcLon(String s)
- {
- int pLoc = 0; int lEndLoc = 0; int dEndLoc = 0; String lon;
- if(s.substring(0,4) == "GPRM")
- {
- for(int i = 0; i < 7; i++)
- {
- if(i < 5) { pLoc = s.indexOf(',', pLoc+1); }
- if(i == 5) { lEndLoc = s.indexOf(',', pLoc+1); lon = s.substring(pLoc+1, lEndLoc); }
- else { dEndLoc = s.indexOf(',', lEndLoc+1); lon = lon + " " + s.substring(lEndLoc+1, dEndLoc); }
- }
- return lon;
- }
- }
- String DataChange(String s)
- {
- int i=0; int pLoc = 0; int lEndLoc = 0;
- String DD=""; String FF=""; String NE="";
- String FFo=""; char FF0[20]="";
- float n=0.0;
- String Output="";
-
- pLoc = s.indexOf('.',0);
- lEndLoc = s.indexOf(' ',0);
-
- DD = s.substring(0, pLoc-2);
- FF = s.substring(pLoc-2,lEndLoc);
- NE = s.substring(lEndLoc+1,lEndLoc+2);
-
- n = FF.toFloat()/60; dtostrf(n,0,10,FF0);
- for(i=1;i<10;i++) { FFo += FF0[i]; }
-
- Output = NE+": "+DD+FFo;
- return Output;
- }
- void GetGPS(void)
- {
- String latitude = ""; //緯度
- String longitude = ""; //經度
- while (mySerial.available())
- {
- char c = mySerial.read();
- switch(c)
- {
- case '
- mySerial.readBytesUntil('*', nmeaSentence, 67);
- latitude = parseGprmcLat(nmeaSentence);
- longitude = parseGprmcLon(nmeaSentence);
- if(latitude > "") {
- //Serial.println("latitude: " + latitude);
- //g_latitude = latitude;
- g_latitude = DataChange(latitude);
- }
- if(longitude> "") {
- //Serial.println("longitude: " + longitude);
- //g_longitude = longitude;
- g_longitude = DataChange(longitude);
- }
- break;
- default:
- break;
- }
- }
- }
- void SendGPS0()
- {
- if( ( g_latitude != last_latitude ) && ( g_latitude > "" ) )
- {
- Serial.println("latitude: " + g_latitude );
- }
- last_latitude = g_latitude;
- }
- void SendGPS1()
- {
- if(( g_longitude != last_longitude ) && ( g_longitude > "" ))
- {
- Serial.println("longitude: " + g_longitude);
- }
- last_longitude = g_longitude;
- }
復制代碼
0.jpg (9 KB, 下載次數: 57)
下載附件
2018-5-11 01:35 上傳
所有資料51hei提供下載(只發了主程序文件):
【代碼】基于STM8S的跌倒報警儀設計 code.rar
(1.98 KB, 下載次數: 46)
2018-5-10 23:51 上傳
點擊文件名下載附件
設計代碼 下載積分: 黑幣 -5
|