先上图。 从上到下分别是 温度、湿度、光照度、颗粒物上接线图: [mw_shl_code=c,true] /* BH1750光照强度传感器接法: VCC-5v GND-GND SCL-SCL(A5) SDA-SDA(A4)
DHT11接法: VCC–>5V GND–>GND DATA–>D9
PPD42NS接法: 针脚冲下,从右至左为1-5接口 Pin 1 => GND Pin 3 => 5VDC Pin 4 => D8
LCD5110接法: clk = D7 //clock din = D6, // data-in dc = D5, // data select reset = D2, //reset sce = D3); // enable */
//bh1750相关 int BH1750address = 0x23; byte buff[2];
//lcd5110相关 LCD_PCD8544 lcd;
//PPD42NS颗粒物传感器相关 int pin = 8; unsigned long duration; unsigned long starttime; unsigned long sampletime_ms = 30000; unsigned long lowpulseoccupancy = 0; float ratio = 0; double concentration = 0;
void setup() { Serial.begin(9600); //初始化LCD lcd.begin(); lcd.clear(); lcd.setCursor(0, 0);//在第一行打印出 Environment 字符串 lcd.print(” Environment “); lcd.setCursor(0, 1);//光标移至第2行(从0开始数算起) 第1个像素(下同) lcd.print(“Temp :”);//显示出温度提示(下同) lcd.setCursor(73, 1);//光标移至第2行(从0开始数算起) 第72个像素 lcd.print(“oC”);//显示出温度单位(下同) lcd.setCursor(0, 2); lcd.print(“Humi :”); lcd.setCursor(79, 2); lcd.print(“%”); lcd.setCursor(0, 3); lcd.print(“Light:”); lcd.setCursor(73,3); lcd.print(“lx”); lcd.setCursor(0, 4); lcd.print(“PM :”); lcd.setCursor(0, 5);//光标移至第6行(从0开始数算起) 第37个像素 lcd.print(” Best wishes”);//显示出 Best wishes
pinMode(pin,INPUT); starttime = millis(); }
void loop() { //计算颗粒物 duration = pulseIn(pin, LOW); lowpulseoccupancy = lowpulseoccupancy+duration;
if ((millis()-starttime) > sampletime_ms) { ratio = lowpulseoccupancy/(sampletime_ms*10.0); concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; //串口打印出颗粒物数据 Serial.print(lowpulseoccupancy); Serial.print(","); Serial.print(ratio); Serial.print(","); Serial.println(concentration); lowpulseoccupancy = 0;//串口打印出DHT11测出的温湿度数据 DHT11.read(DHT11PIN); int dht11temp = DHT11.temperature; Serial.print(“temperature:”); Serial.println(dht11temp); int dht11hum = DHT11.humidity; Serial.print(“humidity:”); Serial.println(dht11hum);
//串口打印出BH750光照度数据 double light = BH1750(); Serial.print(“light:”); Serial.println(light);
//lcd上显示数据 lcd.setCursor(37, 1);//光标移至第2行(从0开始数,1就是第二个) 第37个像素(下同) lcd.print(dht11temp);//显示出温度(下同) lcd.setCursor(37, 2); lcd.print(dht11hum); lcd.setCursor(37, 3); lcd.print(light); lcd.setCursor(37, 4); lcd.print(concentration);
starttime=millis(); }}
//BH1750相关函数 double BH1750() { int i=0; double val=0; Wire.beginTransmission(BH1750address); Wire.write(0x10);//1lx reolution 120ms Wire.endTransmission(); delay(200); Wire.beginTransmission(BH1750address); Wire.requestFrom(BH1750address, 2); while(Wire.available()) // { buff = Wire.read(); // receive one byte i++; } Wire.endTransmission(); if(2==i) { val=((buff[0]<<8)|buff[1])/1.2; } return val; }
[/mw_shl_code]
