PM2008 센서는 PM1.0과 PM2.5, 그리고 PM10 미세먼지 측정값을 출력한다. 환경부 기준은 PM2.5(초미세먼지 크기 2.5㎛이하인 먼지) 년간 평균치 15㎍/㎥이하, 24시간 평균치 35㎍/㎥이하이고 PM10(미세먼지 크기 10㎛이하인 먼지)은 년간 평균치 50㎍/㎥이하, 24시간 평균치 100㎍/㎥이하로 정하고 있다.
여기서는 PM1.0과 PM2.5는 15이하이면 좋음(초록), 15초과 ~ 35이하이면 보통(노랑), 35초과이면 나쁨(빨강)으로, PM10은 50이하이면 좋음(초록), 50초과 100이하이면 보통(노랑), 100초과이면 나쁨(빨강)으로 표시하게 했다.
실제로 유의미한 값을 표시하기 위해서는 최소한 24시간 평균값을 표시하도록 해야 할 것 같다.
#include <pm2008_i2c.h> PM2008_I2C pm2008_i2c; void setup() { pm2008_i2c.begin(); Serial.begin(9600); pm2008_i2c.command(); delay(1000); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); } void loop() { uint8_t ret = pm2008_i2c.read(); uint8_t pm1p0_grade = 0; uint8_t pm2p5_grade = 0; uint8_t pm10_grade = 0; uint8_t total_grade = 0; if (ret == 0) { // PM 1.0 if (pm2008_i2c.pm1p0_grimm < 16) { pm1p0_grade = 1; } else if (pm2008_i2c.pm1p0_grimm < 35) { pm1p0_grade = 2; } else { pm1p0_grade = 3; } // PM 2.5 if (pm2008_i2c.pm2p5_grimm < 16) { pm2p5_grade = 1; } else if (pm2008_i2c.pm2p5_grimm < 35) { pm2p5_grade = 2; } else { pm2p5_grade = 3; } // PM 10 if (pm2008_i2c.pm10_grimm < 51) { pm10_grade = 1; } else if (pm2008_i2c.pm10_grimm < 101) { pm10_grade = 2; } else { pm10_grade = 3; } // Get worst grade total_grade = max(pm1p0_grade, pm2p5_grade); total_grade = max(total_grade, pm10_grade); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); Serial.print("PM1.0: "); Serial.println(pm2008_i2c.pm1p0_grimm); Serial.print("PM2.5: "); Serial.println(pm2008_i2c.pm2p5_grimm); Serial.print("PM10: "); Serial.println(pm2008_i2c.pm10_grimm); switch (total_grade) { case 1: { Serial.println("Good!"); digitalWrite(3, HIGH); break; } case 2: { Serial.println("Nomal!"); digitalWrite(4, HIGH); break; } case 3: { Serial.println("Worst!!!"); digitalWrite(5, HIGH); break; } default: break; } } delay(2000); }
아두이노UNO & PM2008센서와 LED 연결 |
시리얼 모니터 출력 |
댓글
댓글 쓰기