[매드정] 아두이노 강좌 - 13. 온도 습도 센서 모듈 동작


안녕하세요~ 매드 입니다.

추석 연휴 잘 보내셨는지요!! 후후.. 지난 시간에는 설 연휴이다 보니 (쿨럭쿨럭) 한주를 쉬었습니다. 그래서!~ 지난 시간에 말씀드린데로 이번 시간에는 온습도 센서를 다루어 보도록 하겠습니다.

일단 온습도 센서를 다룰려면 언제나처럼 온도 센서랑 습도 센서가 무엇인지 간단히 알아보고 갈까요?


13-1. 온도 & 습도 센서

< 출처 : 구글 사진 >

우선 언제나처럼 다짜고짜 구글에 온습도 센서 종류라고 검색했더니 정말 여러종류의 온습도 센서들이 나옵니다. 사진만 보면 현재 아두이노나 오픈 하드웨어에서 많이 사용하는 온습도 센서들 위주로 나온 것을 보실 수 있습니다.

센서들의 종류가 많은 것은 알겠는데 이 원리는 무엇인지 간단히 알아볼까요?

우선 온도는 '원자 또는 분자가 가지고 있는 운동 또는 진동 에너지의 크기를 나타낸 것' 이라고 하네요! 이 온도는 직접 계측이 불가하고 변위, 압력, 저항, 전압, 주파수 등의 다른 물리량으로 변환하여 계측 합니다.
(문득 갑자기 든 생각인데 반대로 이 온도변화를 이용해 바람의 세기도 측정하는 제품을 본적이 있는 것 같은... )

이 온도는 섭씨(℃), 화씨(F), 절대온도(K) 로 표현할 수 있습니다. 자세한 각각의 내용은 인터넷에 물어보면 금방 나오겠죠 >.<

< 출처 : 없는게 없는 구글 >

이 온도센서의 종류는 다음과 같이 나눠져 있습니다. 여러 종류의 센서들이 나오는데 각각의 장단점이 있습니다. 개별적인 장단점은 따로 인터넷 검색을 통해 ... (쿨럭쿨럭 떠넘기기..)

주로 사용하는 것으로는 써미스터 방식이나 좀더 정밀하게는 백금측온저항 방식을 많이 사용한다고 생각하시면 될 것 같습니다.

최근에 많이 떠오르고 있는 온도 센서가 있는데 여러분들도 많이 보셨을 꺼에요. 비접촉식으로 고기집에서 많이 사용하고 있는데요. 적외선 방식의 온도센서가 있습니다.
레이저로 징~ 쏘는 것 같은데 신기하게 온도가 측정되죠?~ 이 방식이 좀 더 확장되면 영화나 산업 현장에서 볼 수 있는 열화상 카메라도 비슷한 원리로 생각하시면 됩니다.

다음은 습도센서를 간단히 알아보죠.

습도센서는 온도센서와 마찬가지로 임피던스, 전기전도성, 열전도, 정전용량 등의 전기적인 신호로 변환하여 우리가 눈으로 확인할 수 있도록 표현되게 됩니다.

< 출처 : 구글 검색 >

습도센서도 마찬가지로 여러 종류로 나누어지네요~
보니까 온도센서랑 비슷한 방식들도 보이네요.
그래서 온습도 센서가 같이 나오나!? >.<( 막던짐.. )


< 출처 : 구글 사진 >

온도센서와 마찬가지로 방식에 따라서 특징이 다릅니다. 사용하고 싶고 필요한 부분에 맞춰서 사용하면 될 것 같네요~

후.. 여기까지 구글 검색으로 온습도 특징에 대해서 날로 먹어봤습니다. 이제 우리가 사용할 온습도 센서를 찾아보도록 하죠.


13-2. DHT-11

< 출처 : 구글 사진 >

역시나 아두이노 온습도 센서라고 검색하니 아두이노랑 온습도센서 모듈이 연결된 사진이 나오네요. 다짜고짜 연결부터 해보면 5V, GND, 신호선은 아두이노 2번핀에 연결했습니다.

이 아두이노에서 많이 사용하고 있는 온습도 센서가 DHT-11 이라는 온습도 센서 인데요. 연결하는건 알겠으니 원리를 데이타시트를 통해 한번 찾아보도록하죠.


< 출처 : 구글 사진 >

모듈이 아닌 센서만 본다면 요런식의 연결이네요 크게 다르지 않게 보이는데 모듈에는 신호선에 풀업 저항이 하나 달려있습니다!~ 이게 먼소리인고하니 외부에 풀업저항을 달아서 사용하던가 아두이노 내부 풀업저항을 사용하면 PCB 없는 위의 센서만으로도 큰 문제 없이 사용할 수 있다는 얘기가 되겠네요.

< 출처 : 구글 사진 >

아.. 먼가 어려운게 나왔습니다. 사실 이부분이 핵심이고 앞으로도 어떤 센서를 다루던 통신방식이 있는 센서를 다룰 때는 위와같은 통신 신호가 어떻게 되어있는지를 잘 보고 진행하셔야 합니다. 구글에서 가장 쉬워보이는 사진을 가져왔는데 잘 보이시는지 모르겠네요 ㅠ

어떤 것이든 서로 커뮤니케이션을 위해서는 프로토콜이 맞아야하는데요. 사람을 기준으로 설명하면 미국사람 한국사람 종(종류)이 달라 새로 대화할려면 언어(프로토콜)이 맞아야 합니다. 둘중 한명이 영어를 쓰던 한국어를 쓰던가해서 맞춰야겠죠?~

우리는 아두이노로 센서에 맞춥니다!

센서의 스타트LO와 HI 신호를 읽어서 시작신호를 알아채고 이후 0신호가 50us, 1신호가 70us 로 들어오면 'DATA1' 신호로 인식하고 0신호 50us 뒤에 1신호가 26us로 들어오게되면 'DATA0' 으로 인식하게 되는 구조입니다. 어디서 많이 본 것 같지 않나요??

지난 시간에 했었던 WS2812B 도 비슷한 방식으로 DATA0과 1을 구분했었죠~!?

사실은 이와 같은 센서를 사용하기 위해서는 MCU의 내부타이머를 이용하여 0과 1의 시간을 측정하고 DATA0과 1을 구분하는 작업하여 신호를 받게 됩니다.

천만다행으로 우리의 아두이노는 많이 사용하는 센서들을 친절하게도 외국형님들께서 이미 만들어서 '오픈 소스' 로 올려두셨습니다. ㅠㅠ

바쁜 와중에 잠깐 뻘소리 하자면 이상하게 국내 프로그래머나 엔지니어들은 자신의 기술을 쉽게 오픈하지 않습니다. 물론 그게 틀린것은 아니지만 외국의 활발한 오픈소스 활동을 보다보면 우리나라가 인류를 위한 문화와 발전을 위한 선구자 적인 생각을 가지기 위해서는 아직 100년도 모자르지 않나 생각해봅니다.

천만다행으로 인터넷의 발달로 많은 사람들이 자신의 기술과 노하우들을 서로 공유할 수 있으니 앞으로는 교육계 기득권층의 울타리에서 많이 벗어나 스터디 모임과 같은 새로운 교육 틀이 생기지 않을까 예상해봅니다.

말이 길었네요!!

바로 실습가보죠~


13-3. 펌웨어 코드

#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("DHT11 test!");

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
}




언제나처럼 실습은 영상으로 진행합니다!~
ㅎㅎ 다음 시간에는 다른 온도센서들을 다뤄보도록 하겠습니다~


댓글 쓰기

2 댓글

  1. In file included from C:\Users\BBRL\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.cpp:22:0:

    C:\Users\BBRL\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory

    #include

    ^

    compilation terminated.

    라이브러리 DHT_sensor_library를 버전 1.3.0 폴더: C:\Users\BBRL\Documents\Arduino\libraries\DHT_sensor_library 에서 사용
    exit status 1
    보드 Arduino/Genuino Uno 컴파일 에러.

    ======================================
    위 코드로 컴파일 했는데, 위와같은 에러가 발생했습니다. 어디가 문제인걸까요?

    답글삭제
    답글
    1. 안녕하세요~
      아마 라이브러리가 다르거나 첨부가 안된것 같습니다.
      라이브러리 확인 부탁 드립니다~

      삭제