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 연결 |
![]() |
| 시리얼 모니터 출력 |


댓글
댓글 쓰기