DHT11 (Arduino)

На данной странице будет рассмотрено подключение и вывод информации в монитор порта модуля цифрового датчика температуры и влажности 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++;
}

DHT.h

DallasTemperature.h

OneWire.h

Добавить комментарий

Войти с помощью: