Проект 21: Датчик вологості і температури DHT11
В цьому експерименті ми розглянемо датчик для вимірювання відносної вологості повітря і температури DHT11 і створимо проект виведення показань датчика на екран РКІ WH1602.
Необхідні компоненти:
- контролер Arduino UNO R3;
- плата для прототипування;
- датчик DHT11;
- LCD-екран WH1602;
- резистор 50 Ом;
- потенціометр 1 кОм;
- дроти тато-тато.
- зовнішній блок живлення +5 В.
Датчик DHT11 (див. Рис. 21.1) не відрізняється високою швидкодією і точністю, проте може знайти своє застосування в електронних проектах через свою невисоку вартість. Датчик DHT11 складається з ємнісного датчика вологості і термістора. Крім того, датчик містить в собі простенький АЦП для перетворення аналогових значень вологості і температури.

Рис. 21.1. Датчик DHT11
Датчик має 4 виведення в одну лінію з кроком 2,54 мм:
- 1 - VCC (живлення 3-5 В);
- 2 - DATA (вивід даних);
- 3 - не використовується;
- 4 - GND (земля).
Протокол обміну - Однопровідна, за структурою дуже схожий на DS18B20, але з важливими застереженнями:
- DHT11 не вміє працювати в «паразитному» режимі (живлення по лінії даних);
- кожен DS18B20 має персональний ідентифікатор, що дає можливість підключення декількох таких датчиків до одного піну Arduino. Однак у DHT11 подібної можливості немає - один датчик буде використовувати строго один цифровий пін.
У нашому експерименті ми будемо зчитувати дані з датчика DHT11 і виводити на екран РКІ WH1602, який ми розглядали в експерименті 16. Рекомендована схема підключення до Arduino містить обов'язковий для однопровідні ліній резистор-підтяжку до VCC, як опція рекомендується конденсатор (фільтр по живленню між VCC і GND). У нас в наявності DHT11 у вигляді модуля, його можна підключати до Arduino безпосередньо - резистор і конденсатор там вже є. Схема підключення датчика DHT11 і WH1602 до плати Arduino показана на рис. 21.2. Для живлення РКІ потрібен окремий блок живлення +5 В.

Рис. 21.2. Схема підключення датчика DHT11 і WH1602 до Arduino
Приступимо до написання скетчу. Для роботи з датчиками DHT11 (DHT21, DHT22) в Arduino є бібліотека OneWire. Вміст скетчу для читання даних з датчика і виведення на екран індикатора WH1602 показано в лістингу 21.1.
#include "DHT.h"
#define DHTPIN 2 // пін підключення контакту DATA
#define DHTTYPE DHT11 // DHT 11
#include <LiquidCrystal.h>
// ініціалізація із зазначенням контактів підключення
LiquidCrystal lcd (12, 11, 7, 6, 5, 4);
DHT dht (DHTPIN, DHTTYPE);
void setup ()
{
lcd.begin (16,2); // режим роботи
dht.begin ();
}
void loop ()
{
// отримання з датчика даних вологості і температури
float h = dht.readHumidity ();
float t = dht.readTemperature ();
if (isnan (t) || isnan (h)) // помилка отримання даних
{
lcd.clear (); lcd.setCursor (0,0);
lcd.print ( "Failed to read");
}
else // вивести дані на РКІ
{
lcd.clear ();
lcd.setCursor (0,0);
lcd.print ( "Humidity:"); lcd.print (h); lcd.println ( "%");
lcd.setCursor (0,1);
lcd.print ( "Temp:"); lcd.print (t); lcd.println ( "* C");
}
delay (2000); // пауза перед наступним виміром
}
Порядок підключення:
- Підключаємо датчик DHT11 і WH1602 за схемою на рис. 21.2.
- Завантажуємо в плату Arduino скетч з лістингу 21.1.
- Дивимося на екрані дисплея показання відносної вологості і температури.