標題:
基于Ardunio的DHT22車內(nèi)環(huán)境監(jiān)測程序
[打印本頁]
作者:
Hightdream
時間:
2017-12-19 21:32
標題:
基于Ardunio的DHT22車內(nèi)環(huán)境監(jiān)測程序
基于Ardunio的車內(nèi)環(huán)境監(jiān)測
單片機源程序如下:
#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,以下?lián)Q算為0~5v
double outputV = dustVal / 1024 * 5;
return outputV;
}
/**
根據(jù)輸出電壓計算灰塵密度
*/
double getDustDensity(double outputV) {
//輸出電壓和灰塵密度換算公式: ug/m3 = (V - 0.9) / 5 * 1000
double ugm3 = abs((outputV - 0.9) / 5 * 1000);
//去除檢測不到的范圍
return ugm3;
}
/**
根據(jù)灰塵密度計算AQI
環(huán)境空氣質(zhì)量指數(shù)(AQI)技術(shù)規(guī)定(試行)](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;
//根據(jù)pm2.5和aqi對應(yīng)關(guān)系分別計算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;
}
/**
根據(jù)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黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
基于Ardunio的車內(nèi)環(huán)境檢測儀.rar
(3.4 KB, 下載次數(shù): 29)
2017-12-19 21:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1