久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3860|回復: 1
打印 上一主題 下一主題
收起左側

基于STM8S單片機的跌倒報警儀設計

[復制鏈接]
跳轉到指定樓層
樓主
1.1、報警裝置發展現狀和發展趨勢
近年來,隨著計算機技術、網絡技術、傳感器技術等高科技技術的發展,以及半導體制造工藝的提高,智能設備的性能有了很大的提高。
目前跌倒報警裝置是通過無線對講系統研發的,它外觀相對精美,但是設計忽略了一個問題,人性化,因為大多數產品不夠人性化,另外,部分設備需要進行操作按鈕、實施對講,就更不現實。當前智能裝備了較多的傳感器和智能系統,為設計成功研制提供了研究平臺。
1.2研究的意義和價值
利用智能設備進行跌倒檢測是一個可行的且有很大推廣潛力的技術,同時甚至可以完成兩個工作:跌倒檢測和救助通信。這樣不僅可以降低系統成本,實時監測人體活動,還可以結合GPS確定用戶的跌倒位置。第一時間發現跌倒事件發生地點。因此,基于智能設備的上述優點,本文設計了一種裝置小巧,攜帶方便的智能跌倒監控設備。

聯系QQ:824238920



單片機源程序如下:
  1. #include <SoftwareSerial.h>
  2. #include <MsTimer2.h>
  3. #include "Wire.h"
  4. #include "I2Cdev.h"
  5. #include "MPU6050.h"

  6. MPU6050 accelgyro;
  7. #define NUM     10
  8. #define NUM_XYZ 6
  9. //int16_t ax[NUM], ay[NUM], az[NUM];
  10. //int16_t gx[NUM], gy[NUM], gz[NUM];
  11. int16_t agxyz[NUM_XYZ][NUM];
  12. long Sumagxyz[NUM_XYZ];
  13. long Avgagxyz[NUM_XYZ];

  14. bool blinkState = false;

  15. const int BEEP = 10;
  16. const int KEY_0 = 8;
  17. const int LED   = 9;
  18. static unsigned char index = 0;
  19. static unsigned char Send = 3;
  20. static unsigned char Key_State = 0;
  21. static unsigned char Waring    = 0;
  22. static unsigned char BEEP_State = 0;

  23. static unsigned char Tmr20msFlag = 0;
  24. static unsigned char gMainLoop100msCnt  = 1;  
  25. static unsigned char gMainLoop500msCnt  = 2;
  26. static unsigned char gMainLoop1000msCnt = 3;
  27. static unsigned char gSchedularType     = 0;
  28. static int lastKEY0 = 0;

  29. char nmeaSentence[68];
  30. String last_latitude  = "";
  31. String last_longitude = "";

  32. String Set_latitude  = "";
  33. String Set_longitude = "";

  34. String g_latitude     = "";
  35. String g_longitude    = "";
  36. SoftwareSerial mySerial(2, 3); // RX, TX
  37. void flash()
  38. {                        
  39.   Tmr20msFlag = 1;
  40.   //Serial.println("20ms");
  41. }

  42. void  Task_20ms(void)
  43. {
  44.     KeyCheck();
  45.     if(Key_State)
  46.     {  
  47.         GetData();
  48.     }
  49. }

  50. void  Task_100ms(void)
  51. {
  52.     if(Key_State)
  53.     {  
  54.        if( (Check()) && ( Waring == 0))
  55.        {
  56.            Waring = 1;
  57.            Send   = 0;
  58.        }
  59.     }
  60.     else
  61.     {
  62.        Waring = 0;
  63.     }
  64.     if( Waring == 0 )
  65.     {
  66.         BEEP_State = HIGH;
  67.     }
  68.     else
  69.     {
  70.         BEEP_State = !BEEP_State;
  71.     }
  72.     digitalWrite(BEEP,BEEP_State); //蜂鳴器響
  73.     //Serial.println("100ms");   
  74. }

  75. void  Task_500ms(void)
  76. {
  77.     if(Waring == 1)
  78.     {
  79.         if( Send == 0 )
  80.         {
  81.             SendGPS0();
  82.             Send = 1;
  83.         }
  84.         else
  85.         {  
  86.             SendGPS1();  
  87.             Send = 0;
  88.         }
  89.     }
  90.     else
  91.     {
  92.         //Waring==0;
  93.     }
  94.   //Serial.println("500ms);
  95. }

  96. void  Task_1000ms(void)
  97. {
  98.     //Serial.println("1000ms");
  99. }

  100. void GetData(void)
  101. {
  102.     int16_t lax, lay, laz;
  103.     int16_t lgx, lgy, lgz;
  104.     accelgyro.getMotion6(&lax, &lay, &laz, &lgx, &lgy, &lgz);   
  105.     agxyz[0][index] = lax;    agxyz[1][index] = lay,    agxyz[2][index] = laz;
  106.     agxyz[3][index] = lgx,    agxyz[4][index] = lgy,    agxyz[5][index] = lgz;
  107.     if( index > NUM )   index = 0;
  108. }

  109. bool Check(void)
  110. {
  111.    bool reval = 0;
  112.    unsigned char i= 0;
  113.    unsigned char j= 0;
  114.    for( i = 0;i < NUM_XYZ; i++ )
  115.    {
  116.         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];
  117.         Avgagxyz[i] = Sumagxyz[i]/NUM;
  118.         Sumagxyz[i] = 0;
  119.         for( j = 0;j < NUM; j++ )
  120.         {
  121.             Sumagxyz[i] = Sumagxyz[i] + (agxyz[i][j] -Avgagxyz[i])*(agxyz[i][j] -Avgagxyz[i]);
  122.         }
  123.         Avgagxyz[i]= Sumagxyz[i]/NUM;  
  124.         Avgagxyz[i]= Avgagxyz[i]/10000;;
  125.    }
  126.    if((Avgagxyz[0]>100)&&(Avgagxyz[1]>100)&&(Avgagxyz[2]>100))
  127.    {
  128.      reval = 1;
  129.    }
  130.     return reval;
  131. }

  132. void  Task_IDLE(void)
  133. {
  134.      KeyCheck();
  135.      if(Key_State)
  136.      {  
  137.           GetGPS();
  138.      }
  139.      else
  140.      {
  141.      }
  142.    //Serial.println("IDLE");
  143. }

  144. void KeyCheck(void)
  145. {
  146.   int lKEY0 = digitalRead(KEY_0);
  147.   if(( lKEY0 != lastKEY0) && (lKEY0 == 1 ))
  148.   {
  149.      Key_State = !Key_State;
  150.      if(Key_State)
  151.      {  
  152.           digitalWrite(LED,LOW);
  153.           Serial.println("Lock");
  154.      }
  155.      else
  156.      {
  157.           digitalWrite(LED,HIGH);
  158.           Serial.println("UnLock");
  159.      }
  160.   }
  161.   lastKEY0 = lKEY0;
  162. }

  163. String parseGprmcLat(String s)
  164. {
  165.     int pLoc = 0;  int lEndLoc = 0;   int dEndLoc = 0;   String lat;
  166.     if(s.substring(0,4) == "GPRM")
  167.     {   
  168.         for(int i = 0; i < 5; i++)
  169.         {
  170.             if(i < 3)   {   pLoc    = s.indexOf(',', pLoc+1);                                                        }
  171.             if(i == 3)  {   lEndLoc = s.indexOf(',', pLoc+1);    lat = s.substring(pLoc+1, lEndLoc);                 }
  172.             else        {   dEndLoc = s.indexOf(',', lEndLoc+1); lat = lat + " " + s.substring(lEndLoc+1, dEndLoc);  }
  173.         }
  174.         return lat;
  175.     }
  176. }

  177. String parseGprmcLon(String s)
  178. {
  179.     int pLoc = 0;   int lEndLoc = 0;   int dEndLoc = 0;   String lon;
  180.     if(s.substring(0,4) == "GPRM")
  181.     {
  182.         for(int i = 0; i < 7; i++)
  183.         {
  184.             if(i < 5)   {    pLoc    = s.indexOf(',', pLoc+1);                                                         }
  185.             if(i == 5)  {    lEndLoc = s.indexOf(',', pLoc+1);     lon = s.substring(pLoc+1, lEndLoc);                 }
  186.             else        {    dEndLoc = s.indexOf(',', lEndLoc+1);  lon = lon + " " + s.substring(lEndLoc+1, dEndLoc);  }
  187.         }
  188.         return lon;
  189.     }  
  190. }

  191. String DataChange(String s)
  192. {
  193.    int i=0;   int pLoc = 0;  int lEndLoc = 0;
  194.    String DD=""; String FF=""; String NE="";
  195.    String FFo="";   char FF0[20]="";   
  196.    float n=0.0;
  197.    String Output="";
  198.    
  199.    pLoc    = s.indexOf('.',0);
  200.    lEndLoc = s.indexOf(' ',0);
  201.    
  202.    DD = s.substring(0, pLoc-2);   
  203.    FF = s.substring(pLoc-2,lEndLoc);
  204.    NE = s.substring(lEndLoc+1,lEndLoc+2);
  205.    
  206.    n = FF.toFloat()/60;  dtostrf(n,0,10,FF0);
  207.    for(i=1;i<10;i++)   {    FFo += FF0[i];    }
  208.    
  209.    Output = NE+": "+DD+FFo;
  210.    return Output;
  211. }

  212. void GetGPS(void)
  213. {
  214.     String latitude  = "";                 //緯度
  215.     String longitude = "";                 //經度
  216.     while (mySerial.available())
  217.     {
  218.         char c = mySerial.read();
  219.         switch(c)
  220.         {
  221.             case '
  222.                     mySerial.readBytesUntil('*', nmeaSentence, 67);  
  223.                     latitude  = parseGprmcLat(nmeaSentence);
  224.                     longitude = parseGprmcLon(nmeaSentence);
  225.                     if(latitude > "") {  
  226.                         //Serial.println("latitude: " + latitude);
  227.                         //g_latitude = latitude;
  228.                         g_latitude = DataChange(latitude);  
  229.                     }                  
  230.                     if(longitude> "") {  
  231.                       //Serial.println("longitude: " + longitude);  
  232.                       //g_longitude = longitude;  
  233.                       g_longitude = DataChange(longitude);  
  234.                     }
  235.                     break;
  236.            default:
  237.                 break;
  238.         }
  239.     }
  240. }

  241. void SendGPS0()
  242. {
  243.     if( ( g_latitude  != last_latitude  ) && ( g_latitude  > "" ) )
  244.     {
  245.         Serial.println("latitude: "  + g_latitude );
  246.     }
  247.     last_latitude = g_latitude;

  248. }
  249. void SendGPS1()
  250. {
  251.     if(( g_longitude != last_longitude ) && ( g_longitude > "" ))
  252.     {
  253.         Serial.println("longitude: " + g_longitude);
  254.     }
  255.     last_longitude = g_longitude;
  256. }

復制代碼


所有資料51hei提供下載(只發了主程序文件):
【代碼】基于STM8S的跌倒報警儀設計 code.rar (1.98 KB, 下載次數: 46)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:272824 發表于 2018-5-12 23:56 | 只看該作者
怎么沒有硬件
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜视频免费网站 | 日韩在线91 | av日韩在线播放 | 久久三区| 欧美日韩精品久久久免费观看 | 国产精品一区在线观看 | a精品视频 | 黄色一级视频 | 亚洲欧美日韩国产综合 | 中文字幕亚洲区一区二 | 九一在线观看 | 一区二区三区四区av | 精品欧美激情在线观看 | 高清av一区 | 精品国产乱码久久久久久a丨 | 伊人天堂网 | 成人精品在线观看 | 亚洲狠狠 | 国产精品美女久久久久久久网站 | 国产男女猛烈无遮掩视频免费网站 | 日韩一区二区在线播放 | 在线免费观看黄视频 | 国产欧美一区二区三区久久手机版 | 99久久久久国产精品免费 | 91免费观看国产 | 天堂免费看片 | 国产一区二区三区亚洲 | 奇米超碰在线 | 精品国产一区二区在线 | 欧美不卡视频 | 日本免费视频在线观看 | av网站免费 | 亚洲精品免费视频 | 91精产国品一二三区 | 成人激情视频在线观看 | 亚洲综合色丁香婷婷六月图片 | 伊人久操 | 免费三级网站 | 国产99久久| 日韩av啪啪网站大全免费观看 | 精品福利在线 |