[매드정] 아두이노 강좌 - 27. 먼지 센서(GP2Y1010AU0F) 모듈 동작

안녕하세요!! 매드 입니다~ ㅎㅎ

지난 시간에는 WiFi 모듈 2부로 AT COMMAND 동작시키다가 지대로 패망했는데요...

이번 시간에 펌웨어 업데이트부터 미리 준비해서 해볼려고 했는데...

역시나 바쁨과(귀차니즘과) 다른 일정들(또다른 귀차니즘)으로 인하여 먼지센서를 먼저 동작시켜보려고 합니다!!

많은 양해 부탁 드립니다. (--)(__) 꾸벅


27-1. 먼지센서(GP2Y1010AU0F) 란?

<GP2Y1010AU0F(출처:구글사진)>

이 먼지센서는 샤프에서 만든 먼지센서로 모델명은 GP2Y1010AU0F로 되어 있습니다. 저렴한 가격탓에 아두이노에서 많은 사람들에게 사용되고 있는 먼지센서죠. ㅎㅎ

다만 저렴한 만큼 고성능 먼지 센서들보다는 정확도가 떨어진다는데 한번 아래 비교 그래프를 봐볼까요 ㅎ

<먼지센서 보정 사진(출처:구글사진)>

DC1100 Pro 라는 먼지센서와 비교한 그래프인데 거의 엇비슷하기는 하지만 차이가 있는 것이 보입니다. ㅡㅠ 게다가 사용해봤는데 생각보다 다루기 까다롭다는 생각이 드네요.

일단 다뤄봤을 때 몇가지 단점들이 있는데 우선은 측정 범위가 너무 좁다는 점이 되겠네요. ㅎㅎ 아무래도 아날로그 출력이라 최소 최대치 범위가 작아서 그럴 수 있기는 한데 스펙상으로 봤을 때 정상적인 범위라서 머라 할 수 없는 부분이구요 ㅠ

다른 곳을 찾아보니 오염에 취약하다는 단점이 있다고 하네요. 흠.. 제가 테스트 할 때도 초기값이 이상하게 높게 나오는 현상이 있었는데 입으로 내부에 바람을 불어서 한번 측정해 봐야겠네요 ㅎㅎ


27-2. 먼지센서 연결

<먼지센서 연결(출처:http://www.hardcopyworld.com/ngine/aduino/index.php/archives/1485)>

<먼지센서 연결(출처:http://www.hardcopyworld.com/ngine/aduino/index.php/archives/1485)>

먼지센서 연결은 위 그림과 같이 되는 것을 알 수 있습니다. 우선은 부품이 2가지가 더 필요한데요. 220uF 캐패시터와 150옴 저항입니다.

납땜을 하셔도 되고 브레드보드에 꼿아서 쓰셔도 되는데 어짜피 먼지센서를 바로 브레드보드에 꼿을 수 없기 때문에 납땜을 추천드립니다. ㅎㅎ

일단 작업이되고 아두이노랑 연결만하면 기본 동작은 되는 것을 확인할 수 는 있습니다.

다만 전압이나 RAW 값이 너무 높게 출력된다면 (먼지 없을 때 전압으로 대략 1V 미만이 나오는게 정상) 센서를 자세히보시면 미세 조정할 수 있는 곳이 보이는데 그곳을 + 드라이버로 미세하게 돌려서 맞추는것도 필요할 것 같네요!~ ㅎㅎ

켈리브레이션이 필요한 센서이지만 우선은 이렇게만 사용해도 대략적인 공기의 좋고 나쁨 정도는 판단할 수 있을 것으로 생각 됩니다~


27-3. 펌웨어

/*
 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);
}

코드참조 : http://www.dfrobot.com/wiki/index.php/Sharp_GP2Y1010AU


일단 동작은 시켜봤는데 ㅎㅎ 응용은 다음 기회에!!

다음시간에는 .... WiFi 모듈을 할 수 있을지.....




댓글 쓰기

0 댓글