본문 바로가기
아두이노 센서

[센서/먼지] 공기의 탁함, 먼지 농도 등을 측정하는 샤프(sharp)의 GP2Y1010AU 센서

by 작동미학 2015. 6. 26.
반응형

공기중의 먼지를 mg/m^3 단위로 측정해보자.

 

▶ 이 가이드를 따라하면

- 공기중의 먼지 농도를 간단히 측정할 수 있다.

 

▶ 먼저 읽으면 좋은 글

- Arduino 일반 : http://bbangpan.tistory.com/1

- PMS7003 : https://bbangpan.tistory.com/101

 

▶ 부품 설명 및 회로 구성

Sharp의 GP2Y1010AU (혹은 GP2Y1010AU0F)는 20mA/5V 정도의 전력만으로도 먼지 농도를 측정할 수 있는 저렴한 센서이다. 내부적으로는 적외선 송수신기를 통해 먼지로 빛이 약해지는 정도를 측정해 먼지 농도를 구한다고 알려져 있다. PM2.5정도의 초 미세먼지 입자도 측정이 가능하다(PM2.5는 직경이 2.5um 수준 입자).

이 녀석을 처음 구매하면 이렇게 배송이 온다. 220μF 커패시터(capacitor)와 150옴(ohm)의 저항이 같이 오는데, 회로 구성에 꼭 필요하다.

<Sharp GP2Y1010AU0F 센서, capacitor와 저항이 같이 동봉된 것을 사자>

이 녀석의 초기 가장 큰 고민은 바로 납땜이 필요하다는 것이다. 불행히도 고난이도 납땜(?)이 필요하며, 이를 위해 일반 납땜 공구 외에도 고정 받침대도 필요하다. 이 블로그의 원칙은 납땜이 없이 하는 것들을 다루는데, 불행히도 이 부품은 이를 피할 수가 없었다. 미안하니까 youtube 관련 납땜 강좌 동영상을 하나 참조하도록 하자. https://www.youtube.com/watch?v=Xv1j0qwwfP0

<납땜을 위해서는 이런 받침대가 필요하다.>

배선도 이제 capacitor와 저항이 필요하다.

<실제 배선은 위와 같다. Capacitor는 긴 다리가 양(+)이다.>

 

<간단 회로도를 공유한다. 빨간색 끝 라인을 기준으로 VCC,VO,S-GND,LED,LED-GND,V-LED로 불린다.>

 

<핀 번호에 대한 www.sunfounder.com 발췌/역시 빨간선만 기준으로 순서만 보자>

<arduinodev.woofex.net 발췌/역시 6번 빨간색 기준만 보자. 나머지는 선 색이 조금 다르다>

소스 및 정보 등은 이 사이트를 추가 참조한다. http://www.dfrobot.com/wiki/index.php/Sharp_GP2Y1010AU

 

▶ 소스 코드 입력 및 구동

상기 dfrobot의 소스를 발췌하여 게시한다.

 

/*

Standalone Sketch to use with a Arduino UNO and a

Sharp Optical Dust Sensor GP2Y1010AU0F

*/

 

int measurePin = 0; //Connect dust sensor to Arduino A0 pin

int ledPower = 2; //Connect 3 led driver pins of dust sensor to Arduino D2

 

int samplingTime = 280;

int deltaTime = 40;

int sleepTime = 9680;

 

float voMeasured = 0;

float calcVoltage = 0;

float dustDensity = 0;

 

void setup(){

Serial.begin(9600);

pinMode(ledPower,OUTPUT);

}

 

void loop(){

digitalWrite(ledPower,LOW); // power on the LED

delayMicroseconds(samplingTime);

 

voMeasured = analogRead(measurePin); // read the dust value

 

delayMicroseconds(deltaTime);

digitalWrite(ledPower,HIGH); // turn the LED off

delayMicroseconds(sleepTime);

 

// 0 - 5V mapped to 0 - 1023 integer values

// recover voltage

calcVoltage = voMeasured * (5.0 / 1024.0);

 

// linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/

// Chris Nafis (c) 2012

dustDensity = 0.17 * calcVoltage - 0.1;

 

Serial.print("Raw Signal Value (0-1023): ");

Serial.print(voMeasured);

 

Serial.print(" - Voltage: ");

Serial.print(calcVoltage);

 

Serial.print(" - Dust Density: ");

Serial.println(dustDensity); // unit: mg/m3

 

delay(1000);

}

 

컴파일 및 구동하여 시리얼 모니터를 보면 아래와 같이 결과를 볼 수 있다. 이런 종류 센서 측정이 난감할 때가 있는데(알코올 센서는 술을 마셔야 되는 등..) 적당히 먼지많은 수건이나 헝겊을 격렬하게 흔들면 신기하게도 먼지 농도가 올라간다. 다만, 실제 공기중의 농도는 대략 0.02~0.05mg(20~50μg)/m^3 정도가 일반적이므로 약간의 calibration이 필요하다고 알려져 있다.

(완전한 clean room과 적당히 농도가 알려진 곳에서 측정하여 linear하게 증가한다고 생각하고 보정하면 된다.) 이 calibration이전에는 대략 좋아짐과 나빠짐의 정도만 측정 가능하다.

<하단의 수치가 올라간 것은 헝겊을 털었기 때문이다. Density의 단위는 mg/m^3, 즉 1제곱미터당 mg이다>

데이터 쉬트를 확인하면 위 측정된 전압과 먼지 농도와의 관계가 나온다. 이를 보면 calibration이 어떻게 가능한지 대략 알 수 있다. 3.5V이전까지는 선형으로 전압과 먼지 농도의 관계를 알 수 있다. Y축이 전압, X축이 먼지 농도이다.

<전압과 먼지농도 관계 그래프/GP2Y1010AU datasheet 발췌>

이렇게 먼지 센서는 환풍 장치와 연결하거나 실내 혹은 실외 먼지 농도를 측정할 수 있다. 참조로 1mg=1000μg(마이크로 그램)이다.

 

▶ 구매 가이드

GP2Y2010AU : http://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20150625072505&isPremium=y&SearchText=dust+sensor+sharp

(저항과 capacitor를 집에 보유하고 있지 않다면, 동봉된 것으로 구매한다, $10)

 

강의 키워드

Arduino UNO, dust sensor, 먼지 센서, sharp GP2Y1010AU0F, GP2Y1010AU

반응형