|
本系統主要是通過arduino控制激光粉塵傳感器來檢測空氣中的PM2.5及其他氣體含量,并在lcd1602上顯示出來。具體詳細代碼在壓縮包。
- #include <Arduino.h>
- #include <LiquidCrystal.h>
- LiquidCrystal lcd( 7, 6, 5, 4, 3, 2);
- #define LENG 31 //0x42 + 31 bytes equal to 32 bytes
- unsigned char buf[LENG];
-
- int PM01Value=0; //define PM1.0 value of the air detector module
- int PM2_5Value=0; //define PM2.5 value of the air detector module
- int PM10Value=0; //define PM10 value of the air detector module
-
-
- void setup()
- {
- Serial.begin(9600); //使用串口0
- Serial.setTimeout(1500); //設置超時時間為1500毫秒(大于傳感器傳送數據周期1秒)
-
- // lcd.print("PM1.0: ");
- // lcd.print(PM01Value);
- //lcd.println(" ug/m3");
-
-
-
- // lcd.print("PM1 0: ");
- //lcd.print(PM10Value);
- //lcd.println(" ug/m3");
- //lcd.println();
- }
-
- void loop()
- {
- if(Serial.find(0x42)){ //檢測到0x42時,開始讀取
- Serial.readBytes(buf,LENG);
-
- if(buf[0] == 0x4d)
- {
- if(checkValue(buf,LENG))
- {
- PM01Value=transmitPM01(buf); //count PM1.0 value of the air detector module
- PM2_5Value=transmitPM2_5(buf);//count PM2.5 value of the air detector module
- PM10Value=transmitPM10(buf); //count PM10 value of the air detector module
- }
- }
- }
-
- static unsigned long OledTimer=millis();
- if (millis() - OledTimer >=1000)
- {
- OledTimer=millis();
-
- Serial.print("PM1.0: ");
- Serial.print(PM01Value);
- Serial.println(" ug/m3");
-
- Serial.print("PM2.5: ");
- Serial.print(PM2_5Value);
- Serial.println(" ug/m3");
-
- Serial.print("PM1 0: ");
- Serial.print(PM10Value);
- Serial.println(" ug/m3");
- Serial.println();
- }
- lcd.begin(16, 2);
- lcd.setCursor(0,0);
- lcd.print("PM2.5: ");
- lcd.print(PM2_5Value);
- lcd.println("ug/m3 ");
- lcd.setCursor(0,1);
- lcd.print("PM10: ");
- lcd.print(PM10Value);
- lcd.println("ug/m3 ");
- lcd.println();
- }
- char checkValue(unsigned char *thebuf, char leng)
- {
- char receiveflag=0;
- int receiveSum=0;
-
- for(int i=0; i<(leng-2); i++){
- receiveSum=receiveSum+thebuf[i];
- }
- receiveSum=receiveSum + 0x42;
-
- if(receiveSum == ((thebuf[leng-2]<<8)+thebuf[leng-1])) //check the serial data
- {
- receiveSum = 0;
- receiveflag = 1;
- }
- return receiveflag;
- }
-
- int transmitPM01(unsigned char *thebuf)
- {
- int PM01Val;
- PM01Val=((thebuf[3]<<8) + thebuf[4]); //count PM1.0 value of the air detector module
- return PM01Val;
- }
-
- //transmit PM Value to PC
- int transmitPM2_5(unsigned char *thebuf)
- {
- int PM2_5Val;
- PM2_5Val=((thebuf[5]<<8) + thebuf[6]);//count PM2.5 value of the air detector module
- return PM2_5Val;
- }
-
- //transmit PM Value to PC
- int transmitPM10(unsigned char *thebuf)
- {
- int PM10Val;
- PM10Val=((thebuf[7]<<8) + thebuf[8]); //count PM10 value of the air detector module
- return PM10Val;
- }
復制代碼
|
-
-
空氣質量檢測PM2.5.zip
2020-2-16 15:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
61.12 KB, 下載次數: 13, 下載積分: 黑幣 -5
|