出于对arduino的热爱 ,本人在课外闲暇之余做了一个基于arduino的远程报警系统,可以实现将危险信息远程发送给手机,起到安全监控的作用,算是一个小白设计,还请多多指点。 主要功能有
1.气体检测与温湿度检测功能2.数据实时传输功能 3.GPS定位功能 代码如下 接线就不一点点说了 根据代码定义的IO接即可。
- #include<Arduino.h>
- #include <dht11.h>
- #include <SoftwareSerial.h>
- #include <Servo.h>
- Servo myservo;
- SoftwareSerial mySerial(10, 11); // RX, TX
- char nmeaSentence[68];
- String latitude; //纬度
- String longitude; //经度
- String beiJingTime; //北京时间
- String gpsTime;
- dht11 DHT11;
- #define DHT11PIN 8
- #define Sensor A5
- #define LED 13
- #define Sensor_DO 2
- #define GPSSerial Serial
- #define ADpin A0
- #define pwmPin 6
- unsigned int SensorValue = 0;
- int ADBuffer = 0;
- void SendMessage()
- {
- mySerial.print("AT+CSCS=\"GSM\"\r\n");
- delay(1000);
- mySerial.print("AT+CMGF=1\r\n");
- delay(1000);
-
- mySerial.print("AT+CMGS=\"000000000\"\r\n");//此处为接受信息的手机
- delay(1000);
- mySerial.print("SensorValue:"); //短信内容 6C14 4F53 6D53 5EA6
- mySerial.println(SensorValue);
- mySerial.print("Humidity (%): "); //6E7F 5EA6
- mySerial.println((float)DHT11.humidity, 2);
- mySerial.print("Temperature (oC): ");//6E29 5EA6
- mySerial.println((float)DHT11.temperature, 2);
- mySerial.print("latitude:"); //7ECF 5EA6
- mySerial.println(latitude);
- mySerial.print("longitude: " ); //7EAC 5EA6
- mySerial.println(longitude);
- mySerial.print("beiJingTime: "); //5317 4EAC 65F6 95F4
- mySerial.println(beiJingTime);
- delay(1000);
- mySerial.write(0x1A);
- delay(2000);
- }
- void humiture()
- {
- int chk = DHT11.read(DHT11PIN);
- Serial.print("Read sensor: ");
- switch (chk)
- {
- case DHTLIB_OK:
- Serial.println("OK");
- break;
- case DHTLIB_ERROR_CHECKSUM:
- Serial.println("Checksum error");
- break;
- case DHTLIB_ERROR_TIMEOUT:
- Serial.println("Time out error");
- break;
- default:
- Serial.println("Unknown error");
- break;
- }
- /* Serial.print("Humidity (%): ");
- Serial.println((float)DHT11.humidity, 2);
- Serial.print("Temperature (oC): ");
- Serial.println((float)DHT11.temperature, 2);
- delay(2000);*/
- }
- void Gas()
- {
- pinMode(Sensor_DO,INPUT);
- pinMode(Sensor,INPUT);
- Serial.begin(9600);
-
- SensorValue=analogRead(Sensor);
- SensorValue = 10*SensorValue;
- Serial.print("SensorValue: ");
- Serial.println(SensorValue);
- }
- void Ring()
- {
- mySerial.begin(9600);
- mySerial.print("ATD13573278960;\r\n");//可从此条语句修改需要更换的手机号
- delay(1000);
- }
- void GPS()
- {
- GPSSerial.begin(9600); //定义波特率9600
- for (unsigned long start = millis(); millis() - start < 1000;) //一秒钟内不停扫描GPS信息
- {
- while (GPSSerial.available()) //串口获取到数据开始解析
- {
- char c = GPSSerial.read(); //读取一个字节获取的数据
- switch(c) //判断该字节的值
- {
- case ' : //若是$,则说明是一帧数据的开始
- GPSSerial.readBytesUntil('*', nmeaSentence, 67); //读取接下来的数据,存放在nmeaSentence字符数组中,最大存放67个字节
- //Serial.println(nmeaSentence);
- latitude = parseGprmcLat(nmeaSentence); //获取纬度值
- latitude.substring(6);
- longitude = parseGprmcLon(nmeaSentence);//获取经度值
- gpsTime = parseGprmcTime(nmeaSentence);//获取GPS时间
- if(latitude > "") //当不是空时候打印输出
- {
- GPSSerial.println("------------------------------------");
- GPSSerial.println("latitude: " + latitude);
- }
- if(longitude > "") //当不是空时候打印输出
- {
- GPSSerial.println("longitude: " + longitude);
- }
- if(gpsTime > "") //当不是空时候打印输出
- {
- beiJingTime = getBeiJingTime(gpsTime); //获取北京时间
- GPSSerial.println("beiJingTime: " + beiJingTime);
- }
- }
- }
- }
- }
- String getBeiJingTime(String s)
- {
- int hour = s.substring(0,2).toInt();
- int minute = s.substring(2,4).toInt();
- int second = s.substring(4,6).toInt();
- hour += 8;
- if(hour > 24)
- hour -= 24;
- s = String(hour) +":"+String(minute) +":"+ String(second);
- return s;
- }
- String parseGprmcLat(String s)
- {
- int pLoc = 0; //paramater location pointer 参数位置指针
- int lEndLoc = 0; //lat parameter end location LAT参数结束位置
- int dEndLoc = 0; //direction parameter end location 方向参数终点位置
- String lat;
- if(s.substring(0,4) == "GPRM")
- {
- //Serial.println(s);
- 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; //paramater location pointer
- int lEndLoc = 0; //lat parameter end location
- int dEndLoc = 0; //direction parameter end location
- String lon;
-
- if(s.substring(0,4) == "GPRM")
- {
- //Serial.println(s);
- 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 parseGprmcTime(String s)
- {
- int pLoc = 0; //paramater location pointer
- int lEndLoc = 0; //lat parameter end location
- int dEndLoc = 0; //direction parameter end location
- String gpsTime;
- if(s.substring(0,4) == "GPRM")
- {
- //Serial.println(s);
- for(int i = 0; i < 2; i++)
- {
- if(i < 1)
- {
- pLoc = s.indexOf(',', pLoc+1);
- }
- else
- {
- lEndLoc = s.indexOf(',', pLoc+1);
- gpsTime = s.substring(pLoc+1, lEndLoc);
- }
- }
- return gpsTime;
- }
- }
- // Turn char[] array into String object
- String charToString(char *c)
- {
- String val = "";
- for(int i = 0; i <= sizeof(c); i++)
- {
- val = val + c[i];
- }
- return val;
- }
-
- void Buzzer()
- {
- pinMode(4,OUTPUT);
- digitalWrite(4,HIGH);
- // delay(3000);
- // fengmingqioff();
- }
- void Buzzeroff()
- {
- pinMode(4,OUTPUT);
- digitalWrite(4,LOW);
- }
- void fire()
- {
- Serial.println(analogRead(A0));//串口发送模拟电压值
- ADBuffer = analogRead(ADpin); //读AD值
- Serial.print("AD = ");
- Serial.println(ADBuffer);
- }
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for native USB port only
- }
- mySerial.begin(4800);
- }
- void loop() {
- GPS();
- Gas();
- humiture();
- fire();
- delay(1000);
- if(SensorValue>800||DHT11.temperature>45||ADBuffer < 10)
- {
- Buzzer();
- Ring();
- SendMessage();
- GPS();
- }
- else
- {
- Buzzeroff();
- }
- }
复制代码
|