중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

미세먼지 센서 PM-D4 사용하기

2019-09-20 16:23:03

미세먼지는 우리 눈에 보이지 않는 아주 작은 물질로, 대기 중에 오랫동안 떠다니거나 흩날려 내려오는 직경 10㎛ 이하의 입자상 물질을 말합니다.

 

참고 : Naver 지식백과

 

 

이처럼 미세먼지는 눈에 보이지 않을 만큼 매우 작기 때문에 대기 중에 머물러 있다 호흡기를 거쳐 폐 등에 침투하거나 혈관을 따라 체내로 이동하여 들어감으로써 건강에 나쁜 영향을 미칠 수도 있습니다.

 

 

최근 전국적으로 미세먼지 문제가 심각해지고 있어서 많은 사람들이 미세먼지에 관심이 늘어나고 있습니다.

 

 

 

 

그래서 현재 있는 공간에 미세먼지 농도 / 양을 직접 측정하여 얼마나 심각한지 확인하기 위해 아두이노로 다양한 프로젝트를 만들고 있습니다.

(미세먼지 측정기)

 

아두이노로 미세먼지 관련 프로젝트를 만들 때 Sharp사에서 나온 GP2Y1010AU 를 자주 사용합니다.

(사용방법 : 하드카피월드)

 

위 센서는 상대적으로 가격이 싸고 구하기 쉬운대신 미세먼지 크기에 따른 구별이 불가능하고 영점을 맞추는 작업이나 노이즈 제거 작업등 번거로운 작업이 필요합니다.

(상세 내용 : 새다리님 블로그)

 

그래서 코코아팹 미세먼지 측정기는 위 센서보다 더 편하고 정확한 PM-D4 미세먼지 센서를 사용합니다.

 

 

 

이번 컨텐츠에서는 이 미세먼지 센서(PM-D4)의 연결방법과 측정 결과를 확인하는 법에 대해 알아보겠습니다.

 

 

 

부품 목록

NO 부품명 수량 상세설명
1 오렌지 보드 1  
2 미세먼지센서 1 PM-D4
3 브레드보드 1  
4 점퍼케이블 4  

 

부품명 오렌지 보드 미세먼지센서 브레드보드 점퍼케이블
파트

 

 

하드웨어 making

브레드 보드

 

 

 

 

 

 

핀의 번호를 잘 확인하신 후 연결해 주세요.

(센서에서 팬모터가 있는 부분이 1번핀입니다.)

 

이 미세먼지 센서는 Serial interface를 이용해서 센서값을 받아오기 때문에 PWM핀 대신 RX, TX핀을 연결해 줍니다.

 

연결해야할 핀은 VCC, GND. RX. TX 총 4핀입니다. (위 설명에 보시면 1, 2, 4, 5번 핀)

 

Sleep핀과 PWM핀은 따로 연결 하지 않으셔도 됩니다.

 

미세먼지 센서의 핀은 일반적으로 사용하는 점퍼케이블과 규격이 다릅니다.

센서와 같이 들어가 있는 케이블을 이용하여 보드와 연결해주세요.

 

 

 

소프트웨어 coding

 

#include <SoftwareSerial.h>

SoftwareSerial dustSerial(2, 3);

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

void loop(){
  if(dustSerial.available()){                // 먼지센서로 부터 데이터가 전달되면  
    Serial.println(dustSerial.read(), HEX);  // 출력 데이터를 HEX값으로 출력
  }
  delay(10);
}

 

위 코드를 업로드 후 시리얼 모니터를 열어보시면 밑의 사진과 같이 HEX값들을 확인할 수 있습니다.

 

 

 

 

데이터시트를 보면 결과값이 0x42 0x4D 부터 시작해서 중요한 미세먼지량은 5번째 값부터 2줄씩 결과를 출력하게 됩니다.

 

아래 이미지를 참고하면 PM1.0 값은 5, 6번 째 값이므로 위에 결과에서 0, 7이 됩니다. 결과적으로 현재 PM1.0 미세먼지농도는 7ug/m3 값이 됩니다.

 

 

 

TIP PM-D4 미세먼지센서로 Serial Interface 사용시 기본 통신속도는 9600bps 입니다.

 

 

 

 

TIP 들어오는 센서값들 중 맨 처음값은 무조건 0x42, 0x4D 로 고정이기 때문에, 0x42와 0x4D가 들어오면 그 때를 기준으로 데이터를 구분해주시면 됩니다.

(센서값은 총 32바이트가 들어오므로 0x42를 기준으로 32줄을 확인하셔도 됩니다.)

 

 

 

 

 

매번 위와 같이 32개 다 받아서 하나씩 분류하기 힘드니 32바이트 데이터 중 필요한 데이터만 추출하는 라이브러리를 만들었습니다.

(PM1, PM2.5, PM10 미세먼지양 ug/m3 단위로 추출)

 

아래 버튼을 이용하여 라이브러리를 다운 받으신 후 스케치 -> 라이브러리 포함하기 -> .ZIP 라이브러리 추가  버튼을 이용하여 스케치에 라이브러리를 추가해 준 후 아래 코드를 실행해줍니다.

 

 

#include <dustSensor_kocoa.h>

dustSensor_kocoa dust;

int pm10;
int pm25;
int pm1;

void setup() {
  Serial.begin(9600);
  dust.begin(2, 3);
}

void loop() {
  pm10 = dust.pm10Value();
  pm25 = dust.pm25Value();
  pm1 = dust.pm1Value();

  Serial.print("PM10 Dust : ");
  Serial.println(pm10);
  Serial.print("PM2.5 Dust : ");
  Serial.println(pm25);
  Serial.print("PM1 Dust : ");
  Serial.println(pm1);
  Serial.println();
}

 

 

 

위 코드를 업로드후 시리얼 모니터를 보면 아래와 같이 결과가 나옵니다.

(32바이트 결과를 받고 분류하는 작업을 진행하여 센서 측정하는데 시간이 약간 소모됩니다.)

 

 

 

 

소프트웨어 설명

begin(), pm1Value(), pm25Value(), pm10Value()

 

미세먼지 라이브러리는 begin, pm1Value(), pm25Value(), pm10Value() 함수를 사용합니다.

 

begin()함수는 미세먼지센서가 연결된 핀번호를 설정해주는데 사용합니다.

pm1Value(), pm25Value(), pm10Value() 는 각각 미세먼지를 측정할 때 사용합니다.

* 함수별로 PM1, PM2.5, PM10 을 측정합니다. 결과는 int값으로 나옵니다.

 

미세먼지 측정하는 함수 별로 각각 측정값을 받아오는데 시간이 약간씩 걸립니다.(약 1초)

 

 

 

 

 

 

kocoafab

안녕하세요. 코코아팹 운영자입니다.