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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6410|回復(fù): 1
收起左側(cè)

基于arduino的遠(yuǎn)程定位報(bào)警系統(tǒng)設(shè)計(jì)

[復(fù)制鏈接]
ID:215619 發(fā)表于 2018-8-12 07:37 | 顯示全部樓層 |閱讀模式
出于對(duì)arduino的熱愛 ,本人在課外閑暇之余做了一個(gè)基于arduino的遠(yuǎn)程報(bào)警系統(tǒng),可以實(shí)現(xiàn)將危險(xiǎn)信息遠(yuǎn)程發(fā)送給手機(jī),起到安全監(jiān)控的作用,算是一個(gè)小白設(shè)計(jì),還請(qǐng)多多指點(diǎn)。 主要功能有
1.氣體檢測(cè)與溫濕度檢測(cè)功能
2.數(shù)據(jù)實(shí)時(shí)傳輸功能
3.GPS定位功能
代碼如下  接線就不一點(diǎn)點(diǎn)說了 根據(jù)代碼定義的IO接即可。

11.jpg

  1. #include<Arduino.h>
  2. #include <dht11.h>
  3. #include <SoftwareSerial.h>
  4. #include <Servo.h>
  5. Servo myservo;  
  6. SoftwareSerial mySerial(10, 11); // RX, TX

  7. char nmeaSentence[68];
  8. String latitude;   //緯度
  9. String longitude;   //經(jīng)度
  10. String beiJingTime;   //北京時(shí)間
  11. String gpsTime;

  12. dht11 DHT11;

  13. #define DHT11PIN 8
  14. #define Sensor A5
  15. #define LED 13
  16. #define Sensor_DO 2
  17. #define GPSSerial Serial
  18. #define ADpin A0  
  19. #define pwmPin 6
  20. unsigned int SensorValue = 0;
  21. int ADBuffer = 0;
  22. void SendMessage()
  23. {
  24.   mySerial.print("AT+CSCS=\"GSM\"\r\n");
  25.   delay(1000);
  26.   mySerial.print("AT+CMGF=1\r\n");
  27.   delay(1000);
  28.   
  29.   mySerial.print("AT+CMGS=\"000000000\"\r\n");//此處為接受信息的手機(jī)
  30.   delay(1000);
  31.   mySerial.print("SensorValue:");      //短信內(nèi)容  6C14 4F53 6D53 5EA6
  32.   mySerial.println(SensorValue);
  33.   mySerial.print("Humidity (%): ");    //6E7F 5EA6
  34.   mySerial.println((float)DHT11.humidity, 2);
  35.   mySerial.print("Temperature (oC): ");//6E29 5EA6
  36.   mySerial.println((float)DHT11.temperature, 2);
  37.   mySerial.print("latitude:");        //7ECF 5EA6
  38.   mySerial.println(latitude);
  39.   mySerial.print("longitude: " );     //7EAC 5EA6
  40.   mySerial.println(longitude);
  41.   mySerial.print("beiJingTime: ");   //5317 4EAC 65F6 95F4
  42.   mySerial.println(beiJingTime);
  43.   delay(1000);
  44.   mySerial.write(0x1A);
  45.   delay(2000);
  46. }

  47. void  humiture()
  48. {
  49.   int chk = DHT11.read(DHT11PIN);

  50.   Serial.print("Read sensor: ");
  51.   switch (chk)
  52.   {
  53.     case DHTLIB_OK:
  54.                 Serial.println("OK");
  55.                 break;
  56.     case DHTLIB_ERROR_CHECKSUM:
  57.                 Serial.println("Checksum error");
  58.                 break;
  59.     case DHTLIB_ERROR_TIMEOUT:
  60.                 Serial.println("Time out error");
  61.                 break;
  62.     default:
  63.                 Serial.println("Unknown error");
  64.                 break;
  65.       }
  66.        /* Serial.print("Humidity (%): ");
  67.   Serial.println((float)DHT11.humidity, 2);

  68.   Serial.print("Temperature (oC): ");
  69.   Serial.println((float)DHT11.temperature, 2);
  70. delay(2000);*/

  71. }

  72. void Gas()
  73.   {     
  74.           pinMode(Sensor_DO,INPUT);
  75.           pinMode(Sensor,INPUT);  
  76.           Serial.begin(9600);
  77.         
  78.         SensorValue=analogRead(Sensor);      
  79.         SensorValue = 10*SensorValue;
  80.        Serial.print("SensorValue: ");
  81.     Serial.println(SensorValue);  

  82.     }

  83. void Ring()
  84. {  
  85.   mySerial.begin(9600);
  86.   mySerial.print("ATD13573278960;\r\n");//可從此條語句修改需要更換的手機(jī)號(hào)
  87.   delay(1000);
  88. }

  89. void GPS()
  90. {
  91. GPSSerial.begin(9600);      //定義波特率9600
  92.   for (unsigned long start = millis(); millis() - start < 1000;)  //一秒鐘內(nèi)不停掃描GPS信息
  93.   {
  94.     while (GPSSerial.available()) //串口獲取到數(shù)據(jù)開始解析
  95.     {
  96.       char c = GPSSerial.read();  //讀取一個(gè)字節(jié)獲取的數(shù)據(jù)

  97.       switch(c)         //判斷該字節(jié)的值
  98.       {
  99.       case ' :         //若是$,則說明是一幀數(shù)據(jù)的開始
  100.         GPSSerial.readBytesUntil('*', nmeaSentence, 67);    //讀取接下來的數(shù)據(jù),存放在nmeaSentence字符數(shù)組中,最大存放67個(gè)字節(jié)
  101.         //Serial.println(nmeaSentence);
  102.         latitude = parseGprmcLat(nmeaSentence); //獲取緯度值
  103.         latitude.substring(6);
  104.         longitude = parseGprmcLon(nmeaSentence);//獲取經(jīng)度值
  105.         gpsTime = parseGprmcTime(nmeaSentence);//獲取GPS時(shí)間

  106.         if(latitude > "")   //當(dāng)不是空時(shí)候打印輸出
  107.         {
  108.           GPSSerial.println("------------------------------------");
  109.           GPSSerial.println("latitude: " + latitude);
  110.         }

  111.         if(longitude > "")    //當(dāng)不是空時(shí)候打印輸出
  112.         {
  113.           GPSSerial.println("longitude: " + longitude);
  114.         }  
  115.         if(gpsTime > "")    //當(dāng)不是空時(shí)候打印輸出
  116.         {
  117.           beiJingTime = getBeiJingTime(gpsTime);  //獲取北京時(shí)間
  118.           GPSSerial.println("beiJingTime: " + beiJingTime);        
  119.         }   
  120.       }
  121.     }
  122.   }
  123. }

  124. String getBeiJingTime(String s)
  125. {
  126.   int hour = s.substring(0,2).toInt();
  127.   int minute = s.substring(2,4).toInt();
  128.   int second = s.substring(4,6).toInt();

  129.   hour += 8;

  130.   if(hour > 24)
  131.     hour -= 24;
  132.   s = String(hour) +":"+String(minute) +":"+ String(second);
  133.   return s;
  134. }

  135. String parseGprmcLat(String s)
  136. {
  137.   int pLoc = 0; //paramater location pointer 參數(shù)位置指針
  138.   int lEndLoc = 0; //lat parameter end location LAT參數(shù)結(jié)束位置
  139.   int dEndLoc = 0; //direction parameter end location 方向參數(shù)終點(diǎn)位置
  140.   String lat;
  141.   if(s.substring(0,4) == "GPRM")
  142.   {
  143.     //Serial.println(s);
  144.     for(int i = 0; i < 5; i++)
  145.     {
  146.       if(i < 3)
  147.       {
  148.         pLoc = s.indexOf(',', pLoc+1);
  149.       }
  150.       if(i == 3)
  151.       {
  152.         lEndLoc = s.indexOf(',', pLoc+1);
  153.         lat = s.substring(pLoc+1, lEndLoc);
  154.       }
  155.       else
  156.       {
  157.         dEndLoc = s.indexOf(',', lEndLoc+1);
  158.         lat = lat + " " + s.substring(lEndLoc+1, dEndLoc);
  159.       }
  160.     }
  161.     return lat;
  162.   }
  163. }

  164. String parseGprmcLon(String s)
  165. {
  166.   int pLoc = 0; //paramater location pointer
  167.   int lEndLoc = 0; //lat parameter end location
  168.   int dEndLoc = 0; //direction parameter end location
  169.   String lon;
  170.   
  171.   if(s.substring(0,4) == "GPRM")
  172.   {
  173.     //Serial.println(s);
  174.     for(int i = 0; i < 7; i++)
  175.     {
  176.       if(i < 5)
  177.       {
  178.         pLoc = s.indexOf(',', pLoc+1);
  179.       }
  180.       if(i == 5)
  181.       {
  182.         lEndLoc = s.indexOf(',', pLoc+1);
  183.         lon = s.substring(pLoc+1, lEndLoc);
  184.       }
  185.       else
  186.       {
  187.         dEndLoc = s.indexOf(',', lEndLoc+1);
  188.         lon = lon + " " + s.substring(lEndLoc+1, dEndLoc);
  189.       }
  190.     }
  191.     return lon;
  192.   }
  193. }


  194. String parseGprmcTime(String s)
  195. {
  196.   int pLoc = 0; //paramater location pointer
  197.   int lEndLoc = 0; //lat parameter end location
  198.   int dEndLoc = 0; //direction parameter end location
  199.   String gpsTime;
  200.   if(s.substring(0,4) == "GPRM")
  201.   {
  202.     //Serial.println(s);
  203.     for(int i = 0; i < 2; i++)
  204.     {
  205.       if(i < 1)
  206.       {
  207.         pLoc = s.indexOf(',', pLoc+1);
  208.       }
  209.       else
  210.       {
  211.         lEndLoc = s.indexOf(',', pLoc+1);
  212.         gpsTime = s.substring(pLoc+1, lEndLoc);
  213.       }
  214.     }
  215.     return gpsTime;
  216.   }
  217. }

  218. // Turn char[] array into String object
  219. String charToString(char *c)
  220. {

  221.   String val = "";

  222.   for(int i = 0; i <= sizeof(c); i++)
  223.   {
  224.     val = val + c[i];
  225.   }

  226.   return val;
  227.   }

  228. void Buzzer()
  229.   {
  230.     pinMode(4,OUTPUT);
  231.     digitalWrite(4,HIGH);
  232.    // delay(3000);
  233.    // fengmingqioff();
  234.    }
  235. void Buzzeroff()
  236.   {
  237.     pinMode(4,OUTPUT);
  238.     digitalWrite(4,LOW);
  239.    }
  240.    void fire()
  241.    {
  242.   Serial.println(analogRead(A0));//串口發(fā)送模擬電壓值
  243.   ADBuffer = analogRead(ADpin);     //讀AD值  
  244.   Serial.print("AD = ");  
  245.   Serial.println(ADBuffer);  
  246.     }

  247. void setup() {
  248.   // put your setup code here, to run once:
  249.   Serial.begin(9600);
  250.   while (!Serial) {
  251.     ; // wait for serial port to connect. Needed for native USB port only
  252.   }
  253.    mySerial.begin(4800);
  254. }

  255. void loop() {
  256.          GPS();
  257.          Gas();
  258.           humiture();  
  259.          fire();        
  260.          delay(1000);
  261.          if(SensorValue>800||DHT11.temperature>45||ADBuffer < 10)
  262.          {
  263.           Buzzer();
  264.           Ring();
  265.           SendMessage();
  266.           GPS();  
  267.          }
  268.          else
  269.          {
  270.                Buzzeroff();
  271.          }
  272. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:645888 發(fā)表于 2019-11-20 16:53 | 顯示全部樓層
您好,能交流下么?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久伊人影院 | 人妖一区 | 国产伊人久久久 | 久久99精品久久 | 97超碰人人草 | 久久99精品久久久久久 | 成人免费福利视频 | 精品免费| 中文字幕免费在线 | 午夜影院在线免费观看视频 | 亚洲一区二区三区在线视频 | 97精品国产 | 玖玖综合在线 | 日韩一级黄色毛片 | 国产三级在线观看播放 | 国产免费一区二区 | 亚洲精品日韩在线观看 | 男女羞羞视频大全 | 精品国产伦一区二区三区观看说明 | 日日干夜夜操 | 亚洲欧美男人天堂 | 国产精品成人久久久久 | 久久91精品久久久久久9鸭 | 亚洲精品久久 | 黄色大片免费播放 | 日韩高清中文字幕 | 视频在线h | 欧美中文字幕一区 | 在线一级片 | 新av在线| av中文字幕在线播放 | 精品免费国产一区二区三区四区介绍 | 日韩在线91 | 亚洲一二三视频 | 国产精品精品 | 亚州中文字幕 | 91视频官网 | 天天久久 | 九九热免费观看 | 欧美乱人伦视频 | 国产成人精品一区二区三区在线观看 |