Датчик DHT11 является недорогим цифровым датчиком для измерения температуры и относительной влажности воздуха.
Диапазон измерения температуры составляет от 0 до +50 °С, влажности — от 20 до 90%. Датчик характеризуется низким энергопотреблением — до 2,5 мA.
Учитывая большую погрешность при измерении подходит для любительских тестов. Существенным недостатком датчика является то, что он может регистрировать температуры выше 0 градусов.
Датчик DHT22 является более дорогим вариантом и имеет улучшенные характеристики по сравнению с DHT11.
Диапазон измерения температуры составляет от -40 до +125 °С, влажности — от 0 до 100%. Рабочее напряжение составляет от 3 до 5 вольт, максимальный ток 2.5 mA.
Сравнительная характеристика датчиков DHT11 и DHT22
Параметр | DHT11 | DHT22 |
---|---|---|
Диапазон температуры | 0 — 50 | -40 — +125 |
Диапазон влажности | 20-80% | 0-100% |
Частота выборки | 1,0 Hz | 0,5 Hz |
Вольтаж | 3-5V | 3-5V |
Ток | 2,5 mA | 2,5 mA |
Принцип работы датчика температуры/влажности
Датчик состоит из резистивного влагочувствительного компонента и температурочувствительного компонента (NTC-термистор).
Термистор является переменным резистором, который изменяет свое сопротивление при изменении температуры. Датчики изготовлены путем соединения полупроводниковых материалов, таких как керамика или полимеры.
Калибровка датчика осуществляется в высокоточной калибровочной камере. Коэффициенты калибровки сохраняются в OTP памяти и вызываются во время считывания сигнала с датчика.
Необходимые детали и материалы
Arduino Nano CH340
Дисплей для Arduino 1602LCD на микросхеме Hitachi HD44780
Плата последовательного интерфейса IIC/I2C/TWI/SPI для 1602LCD дисплея
Спецификация
- I2C адрес: 0x20~0x27 (оригинальный 0X20)
- Питание: 5V
- Регулируемая контрастность с помощью потенциометра
Датчик DHT11 или DHT22
Резистор 10 кОМ
Для подключения датчика к Arduino между 1 и 2 ножкой необходимо поставить резистор номиналом 10 кОм.
Соединительные кабели
Схема подключения
Пояснительная таблица
l2C плата | Arduino | Датчик DHT11 |
---|---|---|
GND | GND | 4 |
VCC | 5V | 1 |
SDA | A4 | — |
SCL | A5 | — |
— | A0 | 2 |
Скетч для загрузки в Arduino
Необходимые библиотеки
#include <FastIO.h> #include <I2CIO.h> #include <LCD.h> #include <LiquidCrystal.h> #include <LiquidCrystal_I2C.h> #include <LiquidCrystal_SR.h> #include <LiquidCrystal_SR2W.h> #include <LiquidCrystal_SR3W.h> #include <DHT.h> #define DHTPIN 2 // к какому пину будет подключен сигнальный выход датчика #define DHTTYPE DHT22 // DHT 22 (AM2302) //инициализация датчика DHT dht(DHTPIN, DHTTYPE); byte temp[8] = //код иконки термометра { 0b01110, 0b01010, 0b01010, 0b01010, 0b01110, 0b01110, 0b01110, 0b00000 }; byte hum[8] = //код иконки влажности { B00100, B00100, B01010, B01010, B10001, B10001, B10001, B01110, }; // Задаем адрес и размерность дисплея LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7); void setup() { // Активируем LCD модуль lcd.begin (16,2); // for 16 x 2 LCD module lcd.setBacklightPin(3,POSITIVE); lcd.setBacklight(HIGH); lcd.createChar(1,temp); lcd.createChar(2,hum); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); // Выводим показания влажности и температуры lcd.setCursor(0, 0); lcd.print("Temp "); lcd.write(1); lcd.setCursor(8, 0); lcd.print(t); lcd.print( (char)223); lcd.print("C"); lcd.setCursor(0, 1); lcd.print("Hum "); lcd.write(2); lcd.setCursor(8, 1); lcd.print(h); lcd.print(" %"); delay(2000); }
Генератор символов для LCD HD44780
Результат нашей работы:
Сканер интерфейса I2C
Для определения 7-битного адреса контроллера и корректного вывода информации на дисплей используем код:
#include <Wire.h> void setup() { // put your setup code here, to run once: Serial.begin(9600); while (!Serial) { } Serial.println (); Serial.println ("I2C scanner. Scanning ..."); byte count = 0; Wire.begin(); for (byte i = 8; i < 120; i++) { Wire.beginTransmission (i); if (Wire.endTransmission () == 0) { Serial.print ("Found address: "); Serial.print (i, DEC); Serial.print (" (0x"); Serial.print (i, HEX); Serial.println (")"); count++; delay (1); // maybe unneeded? } // end of good response } // end of for loop Serial.println ("Done."); Serial.print ("Found "); Serial.print (count, DEC); Serial.println (" device(s)."); } // end of setup void loop() {}
Для просмотра I2C адреса открываем "Инструменты" > "Монитор порта". Если все подключено правильно увидим результат:
I2C scanner. Scanning… Found address: 39 (0x27) Done. Found 1 device(s).
В строке LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7); меняем I2C адрес c 0x3F на 0x27 согласно данным сканера.