아두이노프로세싱 프로그래밍

아두이노 초보자를 위한 “온습도 센서 DHT11 측정 결과의 FND(Finite Numeric Display) 7 세그먼트 디스플레이”

coding art 2017. 4. 1. 20:54
728x90

DHT11 센서를 사용하는 온습도 측정 아두이노 프로젝트는 너무나 잘 알려져 있다. 하지만 대부분 결과 처리 방식에 있어서 시리얼 모니터를 사용한다든지 또는 많은 수의 배선이 필요한 LCD 판넬을 사용하기도 한다.

 

이번 블로그에서는 이미 성능 시험을 마친 4쪽짜리 FND 7 세그먼트를 사용하는 온습도 시스템 코딩을 제시한다. 이 시스템은 비록 무선와이파이를 사용하지 않는다 해도 자체로 휴대용 전지를 연결하게 되면 독립된 온습도 시스템으로 사용이 가능하며 배선도에서 보듯이 총 배선 수도 6줄로 대단히 간결함을 알 수 있다.




아두이노 온습도 측정을 위한 Adafruit사의 DTH11 센서는 온습도 둘 다를 동시에 측정할 수 있는 디지털 센서로서 아두이노의 디지털 핀 입력 구조를 정확히 반영하여 제작한 일종의 맞춤형 센서라 볼 수 있다.

아두이노 보드의 디지털 입출력 핀 사용법은 pinMode() 명령을 사용 후 digitalRead() 또는 digitalWrite()에 의해 디지털 데이터를 입출력하는 구조이다.

이번 블로그에서는 이미 앞서 게재된 블로그에 사용되었던 DHT11_01 코드를 아주 조금 변형하여 FND 7 세그먼트 4쪽을 사용하여 온도와 습도를 실시간으로 디스플레이하기로 하자. 알고보면 대단히 쉬우나 초보자에게는 그렇지 않을 수 있으며, 가능하면 아래에 언급된 2개의 프로젝트 수행 후 이번 프로젝트 수행을 권한다.
   
      아두이노 Adafruit DTH11 센서를  이용한  온습도 모니터링
     
http://blog.daum.net/ejleep1/320


필요하다면 이 블로그에서 DHT11센서 사용을 위한 라이브러리 DHT11_library.zip을 다운받아 아는 경로에 설치하고 압축을 푼 후 스케치 탭에서 라이브러리 추가하기 작업을 실시하기 바란다. 한편 4쪽짜리 FND 7세그먼트를 사용하는데 필요한 별도의 라이브러리는 없다.

이 블로그에서도 PCB 상에 빨간색 LED와 함께 설치된 DHT11 센서를 사용하고 있는데 실제 PCB의 핀 수는 3개이다. 즉 Vcc는 3.3V에 GND는 GND 즉 접지에, 디지털 데이터 핀은 5번핀에 연결하도록 한다.

아울러 온습도 측정 결과를 디스플레이하기 위한 3 핀짜리 4쪽의 FND 7세그먼트의 배선 방법도 대단히 간결하다. 그 사용법 및 부품에 대한 정보는 아래의 블로그를 참조하도록 하자.

      아두이노 우노에 의한 FND(Finite Numeric Display) 7 세그먼트 구동
     
http://blog.daum.net/ejleep1/357

FND 의 2개의 핀은 전원 즉 5V와 GND에 배선하도록 한다. 3.3V 전원은 이미 DHT11 센서가 사용 중이므로 FND 7세그먼트는 5V에 배당한다. GND는 2개 있으므로 하나씩 할당하면 된다.  나머지 FND 의 핀 하나는 아두이노 우노의 TX 핀 즉 1번 핀에 연결하면 된다. 참고로 우노의 0번 핀은 RX핀이다.

온습도 측정 지원을 위한 라이브러리를 반드시 설치하자.

아두이노 우노의 통신 속도는 9600 으로 설정한다.


온습도 데이터는 dht11.read()에서 읽어 들인다.

FND 7세그먼트에 출력 과정은 시리얼 창에 출력하는 과정과 동일하다. 온도 데이터와 습도 데이터를 구분하기 위해 접두어로서 온도는 C 습도는 H를 사용하였다.

온도와 습도를 측정하는 DHT11센서는 일반 기상 관측 예보에서처럼 소숫점 이하는 사용하지 않는다는 점에 유의하자.
 따라서 Serial.print(숫자,DEC) 명령을 사용함에 있어서 DEC의 값을 0 으로 두면 된다.

아울러 반드시 시간 지연 delay(1500)을 두어야 안정적으로 디스플레이 된다. 이 명령이 없으면 깜박하고 사라지기 때문에 볼 수 없다.

결국 온도 습도 측정에 있어서 3초의 시간 지연을 감안하면 3초 또는 그 이상에 한번 씩 샘플링하면 충분하다.


































FND_4_segments_DHT11_01


#include <DHT11.h>    //라이브러리 불러오기
int pin = 5;            //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(" C");
    Serial.println(temp, 0);
    delay(1500);
    Serial.print(" H");
    Serial.println(humi, 0);
    delay(1500);
    Serial.println();
  }
  else    {
    Serial.println();
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();   
  }
  delay(3000);                        //3초마다 측정
}//프로그램 끝