아두이노의 사용법은 편집기에서 작성된 코드를 컴파일하여 MP3처럼 USB로 아두이노에 다운로드하여 작동시키는 것이다. 아울러 업로드 된 코드가 DRAM이 아닌 아두이노 플래시 메모리에 저장되어 있어 전원을 껏다가 켜도 다시 작동된다. 즉 플래시 메모리 중심의 마이크로콘트롤러라는 의미이다.
아두이노 프로젝트 시작에 있어서 가장 보편적인 것이 온습도 측정일 것이다. 온도나 습도 각각의 아이템이 아니라 두 가지를 함께 측정하는 이유 간단히 말해서 기상관측(Weather Station) 관점이기 때문이다.
온도나 습도를 각각 측정할 수 있는 센서가 많긴 하지만 아두이노 맞춤으로 되어 있는 것은 아니다.
반면에 아두이노 온습도 측정을 위한 Adafruit사의 DTH11 센서는 은 온습도 둘 다를 측정할 수 있는 디지털 센서로서 아두이노의 디지털 핀 입력 구조를 정확히 반영하여 제작한 일종의 맞춤형 센서라 볼 수 있다.
아두이노 보드의 디지털 입출력 핀 사용법은 pinMode(핀 번호, 입력 또는 출력 상태 지정) 명령을 사용 후 digitalRead 또는 digitalWrite(핀 번호, High 또는 Low 지정) 에 의해 디지털 데이터를 입출력하는 구조이다. 비록 아두이노 보드로 등록된 종류가 다양하지만 어느 보드던 간에 많은 수의 디지털 핀을 제공하고 있는데 Adafruit사의 DTH11 센서는 이들 핀에 맞춤형으로 제작된 센서이기 때문에 그 사용법이 대단히 간결하다.
이 블로그에서는 PCB에 설치된 DTH11 센서를 사용하고 있는데 실제 PCB의 핀 수는 3개이다. Vcc는 5V에 GND는 접지에 디지털 데이터 핀은 5번에 핀에 연결하도록 한다.
참고로 저전력용 배선을 위해서는 5V 대신 3.3V 즉 3V3 배선도 가능함에 유의하자. 이러한 사실은 NodeMCU WiFi라든지 Cactus Micro WiFi 모듈의 경우 5V 핀이 하나밖에 없어 납땜 하지 않고 깔끔한 배선을 원한다면 여분으로 제공되는 3V3 배선을 활용할 필요가 있다. 확인해 본 결과 측정 값은 그다지 변동이 없었다.
참고로 이와는 대조적으로 HMC5883L 자기장 센서라든지 또는 L3G4200D 자이로센서와 같이 I2C 인터페이스를 사용하는 센서들이 있는데 사실 대다수의 센서들은 이 I2C 인터페이스에 특화된 경우가 많은데 그 프로그래밍 기법이 좀 더 복잡해진다.
일반적으로 온도나 습도는 전형적인 아날로그 량이지만 Adafruit 사의 DTH 센서들은 센서 내부에 실제로 센서와 마이크로콘트롤러가 들어 있어 결과물을 펄스 형태의 듀티로 디지털화 하여 출력하며 이 디지털화된 온습도 값을 처리하기 위해서 제작자인 Adafruit사가 제공하는 라이브러리 DHT11.h가 필요하다. DTH11.h 외에도 보다 정밀한 성능의 DTH22센서를 비롯하여 유사한 라이브러리들이 있을 수 있는데 본 블로그에서는 정확하게 DTH11.h 라이브러리를 사용하기로 한다.
아래에 첨부된 라이브러리 파일을 다운로드하여 압축을 해제한다.
라이브러리의 위치는 아두이노 디렉토리 아래의 libray 디렉토리도 좋으며 또는 본인이 경로를 정확히 지정해 줄 수 있는 곳에 설치하도록 하며 다음 사례를 참조하도록 한다. 라이브러리 안에 DTH11 파일이 있는데 이 파일을 클릭하여 마우스 오른쪽 버튼을 눌러 속성을 체크하면 확장자가 H임을 알 수 있다. 그밖에 여러 가지 내용물들이 들어 있으나 그대로 놔두길 바란다.
프로그램을 입력하여 컴파일 업로딩하기 전에 다음과 같이 먼저 라이브러리 경로를 지정하도록 하자.
위치는 사용자의 예제 파일을 모아둔 곳이 제일 좋다.
아두이노 스케치 탭에서 라이브러리 포함하기로 들어가 ZIP 라이브러리 추가...를 선택 클릭 후 라이브러리가 들어 있는 DHT11_library디렉토리를 찾아서 클릭하여 경로 지정 작업을 완료한다.
경로 지정 작업이 완료되면 다시 스케치 탭에서 라이브러리 포함하기를 누루면 DHT11 libray가 등록되어 있음을 알 수 있다. 참고로 본 블로그에서 다루었던 BMP센서라든지 MQTT Pixy등의 라이브러리도 등록이 되어 있다.
온습도 측정을 위해서 아래의 프로그램을 복사하여 아두이노 편집기에서 보드 및 포트 번호를 지정 확인한 다음 컴파일하여 업로드 한다.
프로그램에서 보면 핀번호를 4번으로 하였으므로 실제 배선 시에 4번 핀에 데이터 선을 연결하였는지 반드시 확인하기 바란다. 시간 지연은 2초로 하였다. 센서 데이터 자료에 의하면 1초 한번 샘플링이 가능하다 하였으나 측정 외에 여러 명령어들이 실행되어야 할 시간도 필요하며 실제 모니터 할 경우에 지나치게 빠른 속도로 출력이 되면 데이터 관찰이 곤란해지기도 한다. Thingspeak의 경우 15초 기준이지만 여기서는 5초 정도에 1회 출력이 알맞을 것이다. 사실 한 측정 지점에서 온습도 변화가 그다지 심하지 않다는 점을 명심하자.
DHT11_01
#include <DHT11.h> //라이브러리 불러오기
int pin=4; //Signal 이 연결된 아두이노의 핀번호
DHT11 dht11(pin);
void setup()
{
Serial.begin(9600); //통신속도 설정
}
void loop()
{
int err;
float temp, humi;
if((err=dht11.read(humi, temp))==0) //온도, 습도 읽어오기 및 에러 체크
{
Serial.print("temperature:");
Serial.print(temp);
Serial.print(" humidity:");
Serial.print(humi);
Serial.println();
}
else //에러 처리 과정
{
Serial.println();
Serial.print("Error No :");
Serial.print(err);
Serial.println();
}
delay(5000); //5초마다 측정
}
업로딩 완료 후 DTH11 센서의 실시간 측정 현황을 시리얼 모니터 창을 통해 확인하도록 하자.
겨울철 실내에서 창가 온도는 섭씨 14도이며 습도가 21%로서 대단히 낮은 값을 보여 주고 있다. DTH11 데이터 자료에 의하면 이 센서는 온도 범위 0∼50°C 습도 범위 20∼80%로 지정되어 있다. 현재 습도 값이 거의 하한 근처에 있음을 알 수 있다.
이 DTH11 센서에 의한 아두이노 온습도 측정 프로젝트는 아두이노를 접한 누구나가 다 경험하는 중요 프로젝트이며 이를 시발점으로 하여 측정 결과의 그래프 출력이라든지 또는 무선 와이파이에 의한 온습도 기상 관측 결과의 Thingspeak 사이트에그 래프 기록 저장 문제 및 스마트 폰에서의 결과 출력을 다루어 볼 예정이다.
온습도 센서 DHT11 라이브러리를 다운 받으세요.