ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아두이노 온습도 센서 DHT-11, DHT-22(AM2302) 비교 테스트
    스터디/아두이노 2017. 3. 20. 00:52
    반응형

    온습도센서 dht-22(AM2302), dht-11 비교를 해보자

    전에 라즈베리파이에서 사용하기 위해 알리익스프레스에서 온습도센서 dht22 센서를 구입했다

    http://findnew.tistory.com/2


    배송이 너무 늦어지는 바람에 아두이노와 dht11 까지 구매해버렸다.

    http://findnew.tistory.com/12



    온습도센서 2개 생겨 버렸다

    두 센서의 차이는 간단히 아래 표를 보면 된다


    두센서의 데이터시트 파일도 첨부하겠다

    DHT-22 : 

    DHT22(AM2302).pdf


    DHT-11 : 

    DHT11.pdf



    작동 전압 : 3.3V ~ 5.5V


     

    DHT11

    DHT22

     온도 측정범위

     0 ~ 50℃

     -40 ~ 80

     온도 측정오차

     2

     0.5

     습도 측정범위

     20 ~ 80%

     0 ~ 100%

     습도 측정오차

     5%

     2%

    측정 간격

     1초 2초










    두 센서는 정밀도 차이 만큼이나 가격 차이도 난다.

    미리 말하자면 DHT-22 센서를 추천한다




    왼쪽 파란색이 DHT-11, 오른쪽 흰색이 DHT-22 센서이다


    모듈 타입으로 3개의 핀으로 구성되어 있다

    + : 5V or 3.3V

    out : DATA - signal (digital 2번 핀을 이용하겠다)

    - :  GND

    위처럼 연결한다



    원래 라즈베리파이에서 사용하려고 했었지만 아두이노가 생겨버려

    좀더 간편한 아두이노에서 테스트해보겠다



    이 센서에 관한 라이브러리 제공되고 있어 그것을 이용하겠다

    라이브러리 추가가 되지 않을 경우 아래 링크에서 다운 받아 이용해도 된다

    // - Adafruit Unified Sensor Library: https://github.com/adafruit/Adafruit_Sensor
    // - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library



    아래 스케치 메뉴에서 라이브러리 관리를 클릭한다





    라이브러리 매니저 창에서 "dht" 검색하고

    DHT sensor library by Adafruit 를 설치한다




    설치완료 후 파일 > 예제 > DHT sensor libray > DHT_Unified_Sensor 를 선택한다

    만약 보이지 않으면 아두이노 IDE(스케치)를 재시작한다.





    아래와 같은 소스가 열리는데

    적당히 수정하여 사용하면 된다


    센서 종류에 따라 아래 빨간색 소스 부분을 주석/해제 처리해서 사용한다


    LCD를 이용하려면 추가 코드가 필요한데

    그건 나중에 기회가 되면 포스팅하겠다



    // DHT Temperature & Humidity Sensor
    // Unified Sensor Library Example
    // Written by Tony DiCola for Adafruit Industries
    // Released under an MIT license.

    // Depends on the following Arduino libraries:
    // - Adafruit Unified Sensor Library: https://github.com/adafruit/Adafruit_Sensor
    // - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library


    #include <Adafruit_Sensor.h>
    #include <DHT.h>
    #include <DHT_U.h>

    #define DHTPIN            2         // Pin which is connected to the DHT sensor.

    // Uncomment the type of sensor in use:
    //#define DHTTYPE           DHT11     // DHT 11
    #define DHTTYPE           DHT22     // DHT 22 (AM2302)

    //#define DHTTYPE           DHT21     // DHT 21 (AM2301)

    // See guide for details on sensor wiring and usage:
    //   https://learn.adafruit.com/dht/overview

    DHT_Unified dht(DHTPIN, DHTTYPE);

    uint32_t delayMS;

    void setup() {
      Serial.begin(9600);
      // Initialize device.
      dht.begin();
      Serial.println("DHTxx Unified Sensor Example");
      // Print temperature sensor details.
      sensor_t sensor;
      dht.temperature().getSensor(&sensor);
      Serial.println("------------------------------------");
      Serial.println("Temperature");
      Serial.print  ("Sensor:       "); Serial.println(sensor.name);
      Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
      Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
      Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" *C");
      Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" *C");
      Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" *C"); 
      Serial.println("------------------------------------");
      // Print humidity sensor details.
      dht.humidity().getSensor(&sensor);
      Serial.println("------------------------------------");
      Serial.println("Humidity");
      Serial.print  ("Sensor:       "); Serial.println(sensor.name);
      Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
      Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
      Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println("%");
      Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println("%");
      Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println("%"); 
      Serial.println("------------------------------------");
      // Set delay between sensor readings based on sensor details.
      delayMS = sensor.min_delay / 1000;
    }

    void loop() {
      // Delay between measurements.
      delay(delayMS);
      // Get temperature event and print its value.
      sensors_event_t event; 
      dht.temperature().getEvent(&event);
      if (isnan(event.temperature)) {
        Serial.println("Error reading temperature!");
      }
      else {
        Serial.print("Temperature: ");
        Serial.print(event.temperature);
        Serial.println(" *C");
      }
      // Get humidity event and print its value.
      dht.humidity().getEvent(&event);
      if (isnan(event.relative_humidity)) {
        Serial.println("Error reading humidity!");
      }
      else {
        Serial.print("Humidity: ");
        Serial.print(event.relative_humidity);
        Serial.println("%");
      }
    }



    위 코드를 컴파일하고 업로드 한다.

    시리얼 모니터로 데이터를 확인한다



    아래는 LCD를 이용하여 데이터를 표시한 것이다

    DHT11, 22 센서를 각각 5V, 3.3V에 연결하고 테스트 하였다


    1. DHT-22 :  5V



    2. DHT-22 : 3.3V



    3. DHT-11 : 5V


    4. DHT-11 : 3.3V




    같은 시간대에 같은 장소에서 테스한 결과인데

    DHT-22 와 DHT-11 의 차이가 제법 크다


    일단 DHT-22의 경우는 5V, 3.3V 일때 온도, 습도 차이가 별로 없는 결과를 보여준다

    5v : 온도 24.20 'C, 습도 46.10 %

    3.3v : 온도 24.10 'C 습도 46.30 %


    DHT-11의 경우 입력전압에 따라 온도 오차가 크게 발생한다

    5v : 온도 21.00 'C 습도 60.00 %

    3.3v : 온도 24.00 'C 습도 58.00 %



    내가 가지고 있는 센서가 이렇다는 것이다.

    워낙 정밀도가 높지 않은 저가형 센서들이라 섣불리 판단하기는 어렵지만

    이번 경우는 DHT-22 가 조금 더 신뢰할 만한 결과를 보여준다고 생각할 수 있다.


    보다 정확한 테스트를 위해서는 온도계 습도계를 옆에 두고 테스트 해가면서 보정값 처리도 해주어야 할 것 같다


    DHT-11의 경우 3.3v 에서 DHT-22 의 온도측정값과 근접한 결과가 나온다

    그런데 습도는 워낙 편차가 커서 모르겠다.


    어쨌든 조금 더 비싼 DHT22의 측정값에 믿음이 더 가는 것은 사실이다



    반응형

    댓글

Designed by Tistory.