基于Ardunio的車內環境監測
單片機源程序如下:
- #include <DHT22.h>
- // Only used for sprintf
- #include <stdio.h>
- #define Aout A1
- int led = 2;
- int temp = 0;
- // Data wire is plugged into port 7 on the Arduino
- // Connect a 4.7K resistor between VCC and the data pin (strong pullup)
- #define DHT22_PIN 7
- // Setup a DHT22 instance
- DHT22 myDHT22(DHT22_PIN);
- int dustPin=A0;
- double dustVal=0;
- int ledPower=22;
- int delayTime=280;
- int delayTime2=40;
- int offTime=9680;
- double getOutputV() {
- digitalWrite(ledPower,LOW);
- delayMicroseconds(delayTime);
- dustVal=analogRead(dustPin);
- delayMicroseconds(delayTime2);
- digitalWrite(ledPower,HIGH);
- delayMicroseconds(offTime);
- //Arduino模擬量讀取值的范圍為0~1023,以下換算為0~5v
- double outputV = dustVal / 1024 * 5;
- return outputV;
- }
- /**
- 根據輸出電壓計算灰塵密度
- */
- double getDustDensity(double outputV) {
- //輸出電壓和灰塵密度換算公式: ug/m3 = (V - 0.9) / 5 * 1000
- double ugm3 = abs((outputV - 0.9) / 5 * 1000);
- //去除檢測不到的范圍
- return ugm3;
- }
- /**
- 根據灰塵密度計算AQI
- 環境空氣質量指數(AQI)技術規定(試行)](http://kjs.mep.gov.cn/hjbhbz/bzwb/dqhjbh/jcgfffbz/201203/t20120302_224166.htm
- */
- double getAQI(double ugm3) {
- double aqiL = 0;
- double aqiH = 0;
- double bpL = 0;
- double bpH = 0;
- double aqi = 0;
- //根據pm2.5和aqi對應關系分別計算aqi
- if (ugm3 >= 0 && ugm3 <= 35) {
- aqiL = 0;
- aqiH = 50;
- bpL = 0;
- bpH = 35;
- } else if (ugm3 > 35 && ugm3 <= 75) {
- aqiL = 50;
- aqiH = 100;
- bpL = 35;
- bpH = 75;
- } else if (ugm3 > 75 && ugm3 <= 115) {
- aqiL = 100;
- aqiH = 150;
- bpL = 75;
- bpH = 115;
- } else if (ugm3 > 115 && ugm3 <= 150) {
- aqiL = 150;
- aqiH = 200;
- bpL = 115;
- bpH = 150;
- } else if (ugm3 > 150 && ugm3 <= 250) {
- aqiL = 200;
- aqiH = 300;
- bpL = 150;
- bpH = 250;
- } else if (ugm3 > 250 && ugm3 <= 350) {
- aqiL = 300;
- aqiH = 400;
- bpL = 250;
- bpH = 350;
- } else if (ugm3 > 350) {
- aqiL = 400;
- aqiH = 500;
- bpL = 350;
- bpH = 500;
- }
- //公式aqi = (aqiH - aqiL) / (bpH - bpL) * (desity - bpL) + aqiL;
- aqi = (aqiH - aqiL) / (bpH - bpL) * (ugm3 - bpL) + aqiL;
- return aqi;
- }
- /**
- 根據aqi獲取級別描述
- */
- String getGradeInfo(double aqi) {
- String gradeInfo;
- if (aqi >= 0 && aqi <= 50) {
- gradeInfo = String("Perfect");
- } else if (aqi > 50 && aqi <= 100) {
- gradeInfo = String("Good");
- } else if (aqi > 100 && aqi <= 150) {
- gradeInfo = String("Mild polluted");
- } else if (aqi > 150 && aqi <= 200) {
- gradeInfo = String("Medium polluted");
- } else if (aqi > 200 && aqi <= 300) {
- gradeInfo = String("Heavily polluted");
- } else if (aqi > 300 && aqi <= 500) {
- gradeInfo = String("Severely polluted");
- } else {
- gradeInfo = String("Broken roof!!!");
- }
- return gradeInfo;
- }
- /*
- LCD Arduino
- PIN1 = GND
- PIN2 = 5V
- RS(CS) = 8;
- RW(SID)= 9;
- EN(CLK) = 3;
- PIN15 PSB = GND;
- */
- #include "LCD12864RSPI.h"
- #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
- unsigned char msg1[]={0xCA, 0xAA,0xB6, 0xC8}; //濕度
- unsigned char msg2[]={ 0xCE, 0xC2, 0xB6, 0xC8}; //溫度
- unsigned char msg3[]={ 0xD3, 0xD0, 0xBA, 0xA6,0xC6,0xF8,0xCC,0xE5,0xC5,0xA8,0xB6,0xC8,0xB9,
- 0xFD,0xB8,0xDF};
- unsigned char msg4[]={ 0xC7, 0xEB, 0xB1, 0xA3,0xB3,0xD6,0xBF,0xD5,0xC6,0xF8,0xB3,0xA9,0xCD,
- 0xA8,0xBB, 0xF2,};
- unsigned char msg5[]={ 0xBD, 0xF8,0xD0,0xD0,0xB7,0xC0,0xBB,0xA4};
- unsigned char msg6[]="AQI:";
- // unsigned char msg7[]="PM2.5";
- unsigned char msg8[]={ 0xC7,0xD7,0xA3,0xAC,0xBB,0xB6,0xD3,0xAD,0xC4,0xFA,0xCA,0xB9,0xD3,
- 0xC3,0xA3, 0xA1};
- unsigned char msg9[]={ 0xD3,0xC5};
- unsigned char msg10[]={ 0xC1,0xBC};
- unsigned char msg11[]={ 0xC7,0xE1,0xB6,0xC8,0xCE,0xDB,0xC8,0xBE};
- unsigned char msg12[]={ 0xD6,0xD0,0xB6,0xC8,0xCE,0xDB,0xC8,0xBE};
- unsigned char msg13[]={ 0xD6,0xD8,0xB6,0xC8,0xCE,0xDB,0xC8,0xBE};
- unsigned char msg16[]={ 0xD1,0xCF,0xD6,0xD8,0xCE,0xDB,0xC8,0xBE};
- unsigned char msg14[]={ 0xBC,0xEC,0xB2,0xE2,0xB5,0xBD,0xD3,0xD0,0xBA,0xA6,0xC6,0xF8,0xCC,
- 0xE5,0xD4, 0xDA};
- unsigned char msg15[]={ 0xB0,0xB2,0xC8,0xAB,0xB7,0xB6,0xCE,0xA7,0xC4,0xDA,0xA3,0xA1};
- unsigned char logo0[]={
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,
- 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
- 0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
- 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,
- 0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,
- 0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,
- 0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,
- 0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,
- 0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,
- 0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,
- 0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,
- 0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,
- 0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,
- 0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,
- 0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x38,0x00,0x40,0x00,
- 0x00,0x80,0x1C,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x78,0x03,0xF8,0x00,
- 0x07,0xF0,0x1E,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x70,0x07,0xFE,0x00,
- 0x0F,0xFC,0x0E,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xF0,0x1F,0xBF,0x00,
- 0x3F,0x7E,0x0F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xE0,0x3E,0x0F,0x80,
- 0x7C,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xE0,0x7C,0x07,0xC0,
- 0xF8,0x0F,0x87,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0xE0,0xF8,0x01,0xE1,
- 0xF0,0x03,0xC3,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0xC0,0xF0,0x01,0xE1,
- 0xE0,0x03,0xC3,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0xC0,0xE0,0x00,0xE1,
- 0xC0,0x01,0xC3,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
- 0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
- 0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
- 0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
- 0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xF0,0x00,0x0C,0x00,
- 0x0C,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x70,0x00,0x1E,0x00,
- 0x1E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x78,0x00,0x1F,0x00,
- 0x3E,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x38,0x00,0x07,0x80,
- 0xF8,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x3C,0x00,0x03,0xE1,
- 0xF0,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x1E,0x00,0x01,0xFF,
- 0xE0,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0xFF,
- 0x80,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x3F,
- 0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,
- 0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,
- 0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,
- 0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,
- 0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,
- 0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,
- 0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,
- 0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,
- 0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
- 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
- 0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,
- 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- void s_wsd(int r,int c)//在12864的X,Y坐標點顯示Dht11的溫度和濕度
- {
- char tws[16];
- myDHT22.readData();
- snprintf(tws, sizeof(tws),"%i.%01hioC %i.%01i%%RH",myDHT22.getTemperatureCInt()/10, abs(myDHT22.getTemperatureCInt()%10),myDHT22.getHumidityInt()/10, myDHT22.getHumidityInt()%10);
- LCDA.DisplayString(r,c,(unsigned char *)tws,sizeof(tws));
- }
- void g_wsd(int x,int y)
- {
- char buf[14];
- double outputV = getOutputV();
- double ugm3 = getDustDensity(outputV);
- double aqi = getAQI(ugm3);
- int ugm31=ugm3;
- int aqi1=aqi;
-
- snprintf(buf, sizeof(buf),"PM2.5:%3iugm3",ugm31);
- LCDA.DisplayString(x,y,(unsigned char *)buf,sizeof(buf));
- }
- void setup()
- {LCDA.Initialise(); // 屏幕初始化
- delay(100);
- LCDA.DisplayString(1,0,msg8,sizeof(msg8));
- delay(2000);
- LCDA.CLEAR();//清屏
- delay(100);
- LCDA.DrawFullScreen(logo0);
- delay(2000);
- LCDA.CLEAR();//清屏
- delay(100);
- // start serial port
- Serial.begin(9600);
- Serial.println("DHT22 Library Demo");
- pinMode(Aout, INPUT);
- pinMode(led,OUTPUT);
- pinMode(ledPower,OUTPUT);
- pinMode(dustPin, INPUT);
- }
- void loop()
- {
- LCDA.CLEAR();//清屏
- delay(100);
- DHT22_ERROR_t errorCode;
- delay(100);
- Serial.print("Requesting data...");
- temp = analogRead(Aout);
- Serial.print("CO: ");
- Serial.println(temp);
- if((100<temp)&&(temp<=250) )
- {
- digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
- // wait for a second
- LCDA.DisplayString(0,0,msg3,sizeof(msg3));
- LCDA.DisplayString(1,0,msg4,sizeof(msg4));
- LCDA.DisplayString(2,0,msg5,sizeof(msg5));
- delay(3000);
- digitalWrite(led, LOW);
- LCDA.CLEAR();//清屏
- }
- if( temp>250)
- {delay(100);
- digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
- // wait for a second
- LCDA.DisplayString(0,0,msg3,sizeof(msg3));
- LCDA.DisplayString(1,0,msg4,sizeof(msg4));
- LCDA.DisplayString(2,0,msg5,sizeof(msg5));
- delay(4000);
- //LCDA.CLEAR();//清屏
- }
-
- if(temp<=100)
- {
- digitalWrite(led, LOW);// turn the LED on (HIGH is the voltage level)
- LCDA.CLEAR();//清屏
- delay(200);
- LCDA.DisplayString(0,0,msg14,sizeof(msg14));
- LCDA.DisplayString(1,0,msg15,sizeof(msg15));
- delay(3000);
- LCDA.CLEAR();//清屏
- }
- double outputV = getOutputV(); //采樣獲取輸出電壓
- double ugm3 = getDustDensity(outputV); //計算灰塵濃度
- double aqi = getAQI(ugm3); //計算aqi
- String gradeInfo = getGradeInfo(aqi); //計算級別
- Serial.print("dianya ");
- Serial.println(outputV);
- Serial.print("pm2.5 ");
- Serial.println(ugm3);
- Serial.print("AQI ");
- Serial.println(aqi);
- Serial.print("dengji ");
- Serial.println(getGradeInfo(aqi));
- delay(100);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
基于Ardunio的車內環境檢測儀.rar
(3.4 KB, 下載次數: 29)
2017-12-19 21:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|