디지털 전환과 앰비언트

PMS7003과 NodeMCU를 이용한 미세먼지 측정 본문

카테고리 없음

PMS7003과 NodeMCU를 이용한 미세먼지 측정

IOT전략연구소 2018. 4. 20. 16:10
728x90

샤프의 미세먼지 센서인 GP2Y1014AU0F가 정확하지 않은 것 같아서 새로운 미세먼지 센서를 구입해 봤습니다. 바로 PMS7003이라는 제품입니다. PMS5003도 있던데 더 최신 버전인 것 같아서 구매를 했습니다. 


알리에서 15.99달러짜리도 있고, 18.59 달러 짜리도 있어서 각각 하나씩 구매를 해 봤는데, 15.59달러짜리가 먼저 도착했습니다. 2.6달러 정도 차이가 있던데, 커넥터가 없는 것이더군요. 덕분에 간만에 땜질까지 했는데, 그냥 18.59달러짜리를 구매하시는 게 좋을 것 같습니다. 


일단, 급하게 https://blog.naver.com/compass1111/221074629107 에 있는 링크를 가져다 약간 수정을 했습니다. mySerial의 RX와 TX를 D1, D2로 바꾼 것 정도입니다. 원래 코드는 아두이노 것이라서 5, 11번으로 되어 있더군요. 


#include <SoftwareSerial.h>

SoftwareSerial mySerial(5, 4); // RX, TX
unsigned char pms[32];

int PM1_0, PM2_5, PM10;

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() {
  if(mySerial.available()>=32){

    for(int j=0; j<32 ; j++){
      pms[j]=mySerial.read();
    }
    
    PM1_0=(pms[10]<<8)  | pms[11];
    PM2_5=(pms[12]<<8)  | pms[13];
    PM10 =(pms[14]<<8)  | pms[15];
    Serial.printf("PM1.0: %d,  PM2.5: %d,  PM10: %d  \r\n", PM1_0, PM2_5,PM10);
  }

  delay(1000); 

}


급하게 NodeMCU와 PMS7003을 연결한 모습입니다. 좀 조악하죠 ㅋㅋ 센서의 1, 2번은 5V인 Vin에 연결했구요, 3, 4번은 GND에 연결했습니다. 그리고, 7번 RX와 9번 TX를 각각 NodeMCU의 4번(D2)와 5번(D1)에 연결했습니다. 즉, 센서의 RX는 NodeMCU의 TX로 설정한 D2와, 센서의 TX는 NodeMCU의 RX로 설정한 D1과 연결한거죠.




그리고 그 결과물을 시리얼 모니터로 받아서 엑셀에서 그래프를 그려봤습니다. 아래 그림처럼 세 개의 값이 변하는 것을 확인할 수 있습니다. PM10을 기준으로 57-58 사이는 제 방에서 측정한 거구요, 거실로 이동하니 15 근처로 내려가더군요. 그리고, 집 밖으로 이동하니 95 부근까지 올라가는 것을 확인할 수 있었습니다.


테스트할 당시 집에서 가장 가까운 곳의 AirVisual 데이터값은 105를 나타내고 있으니 매우 비슷하게 나오는 것을 알 수 있습니다. 





728x90
반응형