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

Arduino를 사용한 DHT11 및 DHT22 센서 온도 및 습도 자습서

<메인 클래스="사이트 메인" id="메인">

이 Arduino 튜토리얼에서는 Arduino 보드로 온도와 습도를 측정하기 위해 DHT11 또는 DHT22 센서를 사용하는 방법을 배웁니다. 자세한 내용은 다음 동영상을 보거나 아래에 작성된 튜토리얼을 참조하세요.

개요

이 센서는 매우 저렴하지만 여전히 우수한 성능을 제공하기 때문에 전자 애호가들에게 매우 인기가 있습니다. 다음은 이 두 센서의 주요 사양과 차이점입니다.

DHT22는 분명히 더 나은 사양을 가진 더 비싼 버전입니다. 온도 측정 범위는 섭씨 -40 ~ +125도(섭씨 +-0.5도)이고 DHT11 온도 범위는 섭씨 0 ~ 50도(섭씨 +-2도)입니다. 또한 DHT22 센서는 2-5% 정확도로 0 ~ 100%의 더 나은 습도 측정 범위를 가지며 DHT11 습도 범위는 5% 정확도로 20 ~ 80%입니다.

<그림 클래스="aligncenter">

DHT11이 DHT22보다 나은 두 가지 사양이 있습니다. DHT11의 경우 1Hz 또는 1초에 한 번 읽기인 반면 DHT22 샘플링 속도는 0.5Hz 또는 2초에 한 번 읽기이고 DHT11은 본체 크기가 더 작습니다. 두 센서의 작동 전압은 3~5V이며 측정 시 사용되는 최대 전류는 2.5mA입니다.

다음 사이트에서 이러한 구성요소를 얻을 수 있습니다.

DHT11 / DHT22 작동 원리

이제 이 센서가 실제로 어떻게 작동하는지 봅시다. 습도 감지 부품, NTC 온도 센서(또는 서미스터) 및 센서 후면의 IC로 구성됩니다.

<그림 클래스="aligncenter">

습도 측정을 위해 두 전극 사이에 수분 유지 기판이 있는 습도 감지 구성요소를 사용합니다. 따라서 습도가 변하면 기판의 전도도가 변하거나 이러한 전극 사이의 저항이 변합니다. 이 저항 변화는 IC에 의해 측정되고 처리되어 마이크로컨트롤러에서 읽을 준비가 됩니다.

<그림 클래스="aligncenter">

반면에 온도를 측정하기 위해 이러한 센서는 NTC 온도 센서 또는 서미스터를 사용합니다.

서미스터는 실제로 온도 변화에 따라 저항이 변하는 가변 저항기입니다. 이 센서는 온도의 작은 변화로 더 큰 저항 변화를 제공하기 위해 세라믹이나 폴리머와 같은 반도체 재료를 소결하여 만듭니다.

<그림 클래스="aligncenter">

"NTC"라는 용어는 "음의 온도 계수"를 의미하며, 이는 온도가 증가함에 따라 저항이 감소함을 의미합니다.

회로도

DHTxx 센서에는 VCC, GND, 데이터 핀 및 사용하지 않는 연결되지 않은 핀의 4개 핀이 있습니다. 데이터 라인을 높게 유지하고 센서와 Arduino 보드 간의 통신을 활성화하려면 5K ~ 10K Ohms의 풀업 저항이 필요합니다. 풀업 저항이 내장된 브레이크아웃 보드와 함께 제공되는 이러한 센서 버전이 있으며 핀이 3개뿐입니다.

<그림 클래스="aligncenter">

DHTXX 센서에는 데이터 전송에 사용되는 자체 단일 와이어 프로토콜이 있습니다. 이 프로토콜은 정확한 타이밍이 필요하며 센서에서 데이터를 가져오기 위한 타이밍 다이어그램은 센서의 데이터시트에서 찾을 수 있습니다. 그러나 모든 것을 처리하는 DHT 라이브러리를 사용할 것이기 때문에 이러한 타이밍 다이어그램에 대해 크게 걱정할 필요가 없습니다.

관련 튜토리얼:Arduino 기반 무선 기상 관측소 구축 방법 알아보기

소스 코드

먼저 Arduino 공식 웹사이트에서 찾을 수 있는 DHT 라이브러리를 포함하고 센서가 연결된 핀 번호를 정의하고 DHT 객체를 생성해야 합니다. 설정 섹션에서 직렬 모니터를 사용하여 결과를 인쇄할 것이기 때문에 직렬 통신을 시작해야 합니다. read22() 함수를 사용하여 센서에서 데이터를 읽고 온도와 습도 값을 t 및 h 변수에 넣습니다. DHT11 센서를 사용하는 경우 read11() 함수가 필요합니다. 마지막으로 직렬 모니터에 온도와 습도 값을 인쇄합니다.

/*  DHT11/ DHT22 Sensor Temperature and Humidity Tutorial
 *  Program made by Dejan Nedelkovski,
 *  www.HowToMechatronics.com 
 */
/*
 * You can find the DHT Library from Arduino official website
 * https://playground.arduino.cc/Main/DHTLib
 */
 
#include <dht.h>

#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creats a DHT object

void setup() {
  Serial.begin(9600);
}
void loop() {
  int readData = DHT.read22(dataPin); // Reads the data from the sensor
  float t = DHT.temperature; // Gets the values of the temperature
  float h = DHT.humidity; // Gets the values of the humidity
  
  // Printing the results on the serial monitor
  Serial.print("Temperature = ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("    Humidity = ");
  Serial.print(h);
  Serial.println(" % ");
  
  delay(2000); // Delays 2 secods, as the DHT22 sampling rate is 0.5Hz
}Code language: Arduino (arduino)

이 코드를 Arduino 보드에 업로드한 후 센서의 온도 및 습도 결과를 직렬 모니터에서 볼 수 있습니다.

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

/*  DHT11/ DHT22 Sensor Temperature and Humidity Tutorial
 *  Program made by Dejan Nedelkovski,
 *  www.HowToMechatronics.com 
 */
/*
 * You can find the DHT Library from Arduino official website
 * https://playground.arduino.cc/Main/DHTLib
 */

#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <dht.h>


#define dataPin 8
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
dht DHT;

void setup() {
  lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
}

void loop() {
  int readData = DHT.read22(dataPin);
  float t = DHT.temperature;
  float h = DHT.humidity;
  lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed
  lcd.print("Temp.: "); // Prints string "Temp." on the LCD
  lcd.print(t); // Prints the temperature value from the sensor
  lcd.print(" C");
  lcd.setCursor(0,1);
  lcd.print("Humi.: ");
  lcd.print(h);
  lcd.print(" %");
  delay(2000);
}Code language: Arduino (arduino)

아래 댓글 섹션에서 언제든지 질문하세요.


제조공정

  1. Python 및 Raspberry Pi 온도 센서
  2. Raspberry Pi의 간편한 온도 및 습도
  3. MCP3008을 사용하는 Raspberry Pi의 아날로그 센서
  4. Arduino, 1Sheeld 및 Android를 사용한 범용 원격 제어
  5. Arduino와 스마트폰을 사용한 DIY 전압계
  6. 온도 및 습도 데이터 로거
  7. Arduino를 사용한 주파수 및 듀티 사이클 측정
  8. Nextion 디스플레이의 BME280 온도, 습도 및 압력
  9. 볼트와 Arduino를 사용하여 LED 밝기 제어
  10. DHT11로 Blynk에서 온도와 습도를 읽는 방법