Датчик DHT11 не відрізняється високою швидкодією і точністю, проте може знайти своє застосування в електронних проектах через свою невисоку вартість. Датчик DHT11 складається з ємнісного датчика вологості і термістора. Крім того, датчик містить в собі простенький АЦП для перетворення аналогових значень вологості і температури.
Датчик має 4 піни в одну лінію з кроком 2,54 мм:
1 - VCC (живлення 3-5 В);
2 - DATA (передача даних);
3 - не використовується;
4 - GND (земля).
Протокол обміну - однопровідний, за структурою дуже схожий на DS18B20, але з важливими застереженнями:
DHT11 не вміє працювати в «паразитному» режимі (живлення по лінії даних);
кожен DS18B20 має персональний ідентифікатор, що дає можливість підключення декількох таких датчиків до одного піну Arduino. Однак у DHT11 подібної можливості немає - один датчик буде використовувати строго один цифровий пін.
Завдання.
Зібрати схему за попереднім уроком. DHT11 під'єднати наступним чином:
VCC ⇒ 3.3В або 5В на arduino
GND ⇒ GND на arduino
DATA ⇒ 2 цифровий порт на arduino
скетч:
#include "DHT.h"
#define DHTPIN 2 // пін під'єднання контакта DATA
#define DHTTYPE DHT11 // DHT 11
#include <LiquidCrystal.h>
// ініціалізація із зазначенням контактів підключення
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
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); // пауза перед наступним виміром
}