3. Arduino 실습 – 아날로그 입력(1) 아날로그 입력 – 먼지 센서 먼지 센서 개요 먼지 센서 특징 먼지 검출 센서 적외선 발광 다이오드(IRED) 및 Phototran 저항기가 대각선으로 배치 공기중의 먼지의 반사광을 검출 출력 전압의 패턴으로 먼지와 연기를 구분 먼지 센서 특징 컴팩트한 소형 패키지 저 소비 전류 (Icc: MAX. 20 mA) 단 한 개 펄스의 광도 측정에 의해 먼지의 존재를 감지 가능 집 먼지와 연기를 구분 GP2Y1010AU0F
3. Arduino 실습 – 아날로그 입력(2) 아날로그 입력 – 먼지 센서 제어 방법 먼지 센서는 샤프의 ‘GP2Y1010AU0F’를 사용 대기 중에 적외선을 발사하면 포토트랜지스터가 대기 중의 먼지 농도를 검출 적외선 발광 다이오드를 제어하기 위한 LED 핀 LOW 신호에서 빛을 출력, HIGH 신호에서 OFF LED가 ON 되면 일정 지연 시간 후에 아날로그 입 력 핀을 통해 센싱 값을 읽고 다시 일정 지연 시간 후에 LED를 OFF 먼지가 많으면 높은 값을 출력하며, 적으면 낮은 값을 출력
3. Arduino 실습 – 아날로그 입력(3) 아날로그 입력 – 먼지 농도 출력 먼지 센서 값을 읽어 먼지 농도를 출력 사용 모듈: 먼지 센서 모듈
3. Arduino 실습 – 아날로그 입력(4) 아날로그 입력 – 먼지 농도 출력 회로도
3. Arduino 실습 – 아날로그 입력(5) 아날로그 입력 – 먼지 농도 출력 회로 연결 – 결선 방법 MEGA ADK 모듈의 A5 핀을 먼지 센서 모듈의 LED 핀에 연결 MEGA ADK 모듈의 A6 핀을 먼지 센서 모듈의 VOUT 핀에 연결
3. Arduino 실습 – 아날로그 입력(6) 아날로그 입력 – 먼지 농도 출력 스케치 프로그램 – dust_sensor.h #define DUST_LED_PIN 2 #define DUST_VOUT_PIN A6 void init_dust_sensor(); int read_dust_raw_value(); int read_dust_density();
3. Arduino 실습 – 아날로그 입력(7) 아날로그 입력 – 먼지 농도 출력 스케치 프로그램 – dust_sensor.cpp #include <Arduino.h> #include “dust_sensor.h” int samplingTime = 280; // 0.28ms int delayTime = 40; // 0.32 - 0.28 = 0.04ms int offTime = 9680; // 10 - 0.32 = 9.68ms void init_dust_sensor() { pinMode(DUST_LED_PIN, OUTPUT); } int read_dust_raw_value(){ digitalWrite(DUST_LED_PIN,LOW); delayMicroseconds(samplingTime); int val=analogRead(DUST_VOUT_PIN); delayMicroseconds(delayTime); digitalWrite(DUST_LED_PIN,HIGH); delayMicroseconds(offTime); return val; } float read_dust_density() { int raw_value = read_dust_raw_value(); float voltage = (raw_value * 5.0)/1024.0; // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/ // Chris Nafis (c) 2012 float density = 0.172*voltage – 0.1; return density;
3. Arduino 실습 – 아날로그 입력(8) 아날로그 입력 – 먼지 농도 출력 스케치 프로그램 – dust_sensor.cpp
3. Arduino 실습 – 아날로그 입력(9) 아날로그 입력 – 먼지 농도 출력 스케치 프로그램 – dust_test.ino #include “dust_sensor.h” void setup() { init_dust_sensor(); Seral.begin(115200); } void loop(){ Serial.print(“Dust Density = “); Serial.print(read_dust_density()); Serial.println(“ ug/m^3”); delay(300);