На данной странице будет рассмотрено подключение и вывод информации в монитор порта модуля цифрового датчика температуры и влажности DHT11. Датчик DHT11 смонтирован на плате где установлен подтягивающий резистор и светодиод (индикатор питания). Напряжение питания датчика может быть в диапазоне от 3,5 до 5 В, измерение температуры проводится в интервале от 0 до 50 ºС, а влажности от 20 до 95 %. Погрешность при измерении температуры может достигать 2 ºС, а влажности до 5 %.
В датчике установлен термистор для измерения температуры и емкостной датчик влажности представляющий из себя конденсатор с переменной емкостью, который содержит токопроводящие обкладки из медной фольги на текстолите. Этот конденсатор заключен в герметичный чехол, поверх которого расположен влагопоглощающий слой. При попадании частиц воды на этот слой, меняется его диэлектрическая проницаемость, что приводит к изменению емкости конденсатора.
Подключение модуля с датчиком DHT11 достаточно простое, VCC +5 В, GND и вывод данных DATA подключаем к цифровому входу Arduino.
Так как точность датчика не очень высокая то выводить десятые, а тем более сотые доли градусов или процентов нет смысла, поэтому для вывода значений температуры и влажности задан тип данных byte.
Индекс жары — температура, ощущаемая человеком в зависимости от влажности окружающего воздуха.
#include <DHT.h> DHT dht(2, DHT11); // выход DAT подключен к цыфровому входу 2 void setup() { dht.begin(); Serial.begin(9600); } void loop() { // считываем температуру (t), влажность (h) и индекс жары byte h = dht.readHumidity();// влажность byte t = dht.readTemperature();// температура float hic = dht.computeHeatIndex(t, h, false);// индекс жары в гр.Цельсия // выводим данные на монитор порта Serial.print("Humidity: "); Serial.print(h); Serial.print(" % "); Serial.print("Temperature: "); Serial.print(t); Serial.print(" C "); Serial.print("Heat index: "); Serial.print(hic); Serial.println(" C "); delay(1000); }
Для вывода показаний температуры, влажности и индекса жары на LCD 1602 можно использовать следующий скетч:
#include <DHT.h> #include <LiquidCrystal.h> DHT dht(2, DHT11); // выход DAT подключен к цыфровому входу 2 LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7 void setup() { dht.begin(); lcd.begin(16,2);// LCD 16X2 Serial.begin(9600); } int x; void loop() { // считываем температуру (t), влажность (h) и индекс жары byte h = dht.readHumidity();// влажность byte t = dht.readTemperature();// температура float hic = dht.computeHeatIndex(t, h, false);// индекс жары в гр.Цельсия // выводим данные на LCD lcd.setCursor(0,0); lcd.print("Temp ");lcd.print(t);lcd.print(char(223));lcd.print("C "); lcd.setCursor(0,1); if(x>=3 && x<10){ // выводить индекс жары каждые 3 секунды из 10 lcd.print("Hum ");lcd.print(h);lcd.print(" % ");} else{lcd.print("Index ");lcd.print(hic,1);lcd.print(char(223));lcd.print("C ");} if(x==10){x=0;} delay(1000); x++; }
Если добавить в схему цифровой датчик температуры 18b20 то получится простая погодная станция, датчик 18b20 выносится на улицу, а датчик DHT11 остается в комнате, на индикаторе 1602 отображаются температуры на улице и дома. Выход датчика 18b20 подключается к аналоговому входу А0, а выход датчика DHT11 к цифровому входу 2.
#include <DHT.h> #include <LiquidCrystal.h> #include <OneWire.h> #include <DallasTemperature.h> DHT dht(2, DHT11); // выход DAT подключен к цыфровому входу 2 LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7 OneWire oneWire(A0);// вход для датчиков 18b20 DallasTemperature temp(&oneWire); void setup() { dht.begin(); lcd.begin(16,2);// LCD 16X2 temp.begin(); temp.setResolution(10); // 10 бит 18b20 } int x; void loop() { // считываем температуру (t и temp), влажность (h) и индекс жары byte h = dht.readHumidity();// влажность byte t = dht.readTemperature();// температура temp.requestTemperatures();// опрос датчика 18b20 float hic = dht.computeHeatIndex(t, h, false);// индекс жары в гр.Цельсия // выводим данные на LCD lcd.setCursor(0,0); lcd.print("Temp ");lcd.print(t);lcd.print(char(223));lcd.print("C ");// термометр DHT11 lcd.print(temp.getTempCByIndex(0),0);lcd.print(char(223));lcd.print("C ");// термометр 18b20 lcd.setCursor(0,1); if(x>=3 && x<10){ // выводить индекс жары каждые 3 секунды из 10 lcd.print("Hum ");lcd.print(h);lcd.print(" % ");} // влажность else{lcd.print("Index ");lcd.print(hic,1);lcd.print(char(223));lcd.print("C ");} // индекс жары if(x==10){x=0;} delay(1000); x++; }