산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 튜토리얼: DHT11 & DHT22 센서로 온도와 습도 마스터하기

개요

이 아두이노 튜토리얼에서는 아두이노 보드와 함께 DHT11 또는 DHT22 센서를 사용하여 온도와 습도를 측정하는 방법을 배웁니다. 아래 동영상을 시청하거나 작성된 튜토리얼을 읽어보세요.

센서 사양 및 차이점

이 센서들은 매우 저렴하면서도 뛰어난 성능을 제공하기 때문에 전자 애호가들 사이에서 인기가 높습니다. 두 센서의 주요 사양과 차이점은 다음과 같습니다.

DHT22는 더 비싼 버전으로 당연히 더 나은 사양을 가지고 있습니다. 온도 측정 범위는 -40°C ~ +125°C이며 정확도는 ±0.5°C입니다. 반면 DHT11의 온도 범위는 0°C ~ 50°C에 정확도는 ±2°C입니다. 습도 측정에서도 DHT22는 0~100% 범위에 2~5% 정확도를, DHT11은 20~80% 범위에 5% 정확도를 제공합니다.

아두이노 튜토리얼: DHT11 & DHT22 센서로 온도와 습도 마스터하기

DHT11이 DHT22보다 나은 두 가지 사양이 있습니다. 샘플링 속도가 DHT11은 1Hz(초당 1회 측정)인 반면 DHT22는 0.5Hz(2초당 1회 측정)이며, DHT11의 본체 크기가 더 작습니다. 두 센서의 동작 전압은 3~5V이며, 측정 시 최대 전류는 2.5mA입니다.

필요한 부품

DHT11 / DHT22 작동 원리

이 센서들이 실제로 어떻게 작동하는지 살펴보겠습니다. 센서는 습도 감지 소자, NTC 온도 센서(서미스터), 그리고 센서 뒷면의 IC로 구성됩니다.

아두이노 튜토리얼: DHT11 & DHT22 센서로 온도와 습도 마스터하기

습도 측정 원리

습도 측정에는 두 개의 전극 사이에 수분을 보유하는 기판이 있는 습도 감지 소자를 사용합니다. 습도가 변하면 기판의 전도도, 즉 전극 사이의 저항이 변합니다. 이 저항 변화는 IC에서 측정 및 처리되어 마이크로컨트롤러가 읽을 수 있는 형태로 변환됩니다.

아두이노 튜토리얼: DHT11 & DHT22 센서로 온도와 습도 마스터하기

온도 측정 원리

온도 측정에는 NTC 온도 센서 또는 서미스터를 사용합니다. 서미스터는 온도 변화에 따라 저항이 변하는 가변 저항입니다. 이 센서들은 세라믹이나 폴리머 같은 반도체 재료를 소결하여 만들어지며, 작은 온도 변화에도 큰 저항 변화를 제공합니다.

아두이노 튜토리얼: DHT11 & DHT22 센서로 온도와 습도 마스터하기

"NTC"는 "Negative Temperature Coefficient(음의 온도 계수)"를 의미하며, 온도가 상승하면 저항이 감소한다는 뜻입니다.

회로도

DHTxx 센서는 VCC, GND, 데이터 핀, 그리고 사용되지 않는 NC 핀 등 4개의 핀을 가지고 있습니다. 데이터 라인을 높게 유지하고 센서와 아두이노 간의 통신을 가능하게 하기 위해 5K~10K옴의 풀업 저항이 필요합니다. 일부 버전은 내장 풀업 저항이 있는 브레이크아웃 보드 형태로 제공되며 3핀만 있습니다.

아두이노 튜토리얼: DHT11 & DHT22 센서로 온도와 습도 마스터하기

DHTxx 센서는 데이터 전송을 위한 고유한 단일 와이어 프로토콜을 사용합니다. 이 프로토콜은 정밀한 타이밍을 요구하며, 데이터시트에서 타이밍 다이어그램을 확인할 수 있습니다. 하지만 DHT 라이브러리를 사용하면 이러한 타이밍 처리를 모두 자동으로 해주므로 걱정할 필요가 없습니다.

관련 튜토리얼: 아두이노 기반 무선 기상 관측소 만들기

소스 코드

먼저 아두이노 공식 웹사이트에서 찾을 수 있는 DHT 라이브러리를 포함하고, 센서가 연결된 핀 번호를 정의한 후 DHT 객체를 생성합니다. 설정 섹션에서는 결과를 시리얼 모니터에 출력하기 위해 시리얼 통신을 시작합니다. read22() 함수를 사용하여 센서에서 데이터를 읽고 온도와 습도 값을 t와 h 변수에 저장합니다. DHT11 센서를 사용하는 경우 read11() 함수를 사용해야 합니다. 마지막으로 시리얼 모니터에 온도와 습도 값을 출력합니다.

/* DHT11/ DHT22 센서 온도 및 습도 튜토리얼
 * 제작: Dejan Nedelkovski, www.HowToMechatronics.com
 */
/* 
 * DHT 라이브러리는 아두이노 공식 웹사이트에서 다운로드 가능
 * https://playground.arduino.cc/Main/DHTLib
 */
#include <dht.h>
#define dataPin 8  // 센서가 연결된 핀 번호 정의
dht DHT;  // DHT 객체 생성

void setup() {
  Serial.begin(9600);
}

void loop() {
  int readData = DHT.read22(dataPin);  // 센서에서 데이터 읽기
  float t = DHT.temperature;  // 온도 값 가져오기
  float h = DHT.humidity;     // 습도 값 가져오기
  
  // 시리얼 모니터에 결과 출력
  Serial.print("Temperature = ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(" Humidity = ");
  Serial.print(h);
  Serial.println(" % ");
  
  delay(2000);  // 2초 지연 (DHT22 샘플링 속도는 0.5Hz)
}

이 코드를 아두이노 보드에 업로드하면 시리얼 모니터에서 센서의 온도와 습도 결과를 확인할 수 있습니다.

또한 결과를 LCD에 표시하는 예제도 만들었습니다. 해당 소스 코드는 다음과 같습니다:

/* DHT11/ DHT22 센서 온도 및 습도 튜토리얼
 * 제작: Dejan Nedelkovski, www.HowToMechatronics.com
 */
#include <LiquidCrystal.h>  // LiquidCrystal 라이브러리 포함
#include <dht.h>
#define dataPin 8
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);  // LCD 객체 생성. 매개변수: (rs, enable, d4, d5, d6, d7)
dht DHT;

void setup() {
  lcd.begin(16,2);  // LCD 인터페이스 초기화, 디스플레이 크기 지정(너비와 높이)
}

void loop() {
  int readData = DHT.read22(dataPin);
  float t = DHT.temperature;
  float h = DHT.humidity;
  
  lcd.setCursor(0,0);  // 이후 텍스트가 표시될 위치 설정
  lcd.print("Temp.: ");  // "Temp." 문자열 출력
  lcd.print(t);  // 센서에서 온도 값 출력
  lcd.print(" C");
  
  lcd.setCursor(0,1);
  lcd.print("Humi.: ");
  lcd.print(h);
  lcd.print(" %");
  
  delay(2000);
}

아래 댓글 섹션에서 자유롭게 질문해 주세요.

제조공정

  1. 라즈베리 파이와 파이썬으로 원격 온도 센서 만들기 – 단계별 가이드
  2. 라즈베리 파이에서 EzTemp로 매끄러운 온도 및 습도 모니터링
  3. MCP3008 ADC로 라즈베리 파이에서 아날로그 센서 읽기
  4. 아두이노, 1Sheeld, IR 제어로 만능 안드로이드 리모컨 만들기
  5. 아두이노와 스마트폰으로 만드는 스마트 전압계 – 초간단 DIY 프로젝트
  6. 아두이노 DHT11 이더넷 실드 온습도 데이터 로거
  7. 아두이노 우노로 정밀 주파수 & 듀티 사이클 측정기 만들기
  8. BME280 온도·습도·기압을 넥시온 터치스크린에 표시하기
  9. 볼트 IoT와 아두이노 우노로 구현하는 무선 LED 밝기 제어 (PWM 6채널)
  10. DHT11 온습도 센서와 블링크(Blynk)로 원격 모니터링하기 - 아두이노 단계별 튜토리얼