Датчик температуры и влажности DHT11
Устройство и принцип работы
Внутри корпуса на стороне датчиков находятся датчик влажности и датчик температуры NTC (термистор). С другой стороны имеется небольшая печатная плата с 8-разрядной микросхемой в корпусе SOIC-14. Эта микросхема измеряет и обрабатывает аналоговый сигнал с сохраненными калибровочными коэффициентами, выполняет аналого-цифровое преобразование и выдает цифровой сигнал с данными о температуре и влажности.
Рисунок 1. Датчик температуры и влажности DHT11
Чувствительный к влажности компонент, который используется, разумеется, для измерения влажности, имеет два электрода с влагоудерживающей подложкой (обычно соль или проводящий пластиковый полимер), зажатой между ними. По мере поглощения водяного пара подложка высвобождает ионы, что, в свою очередь, увеличивает проводимость между электродами. Изменение сопротивления между двумя электродами пропорционально относительной влажности. Более высокая относительная влажность уменьшает сопротивление между электродами, в то время как более низкая относительная влажность увеличивает это сопротивление.
Рисунок 2. Устройство датчика относительной влажности воздуха
Кроме того, в этих датчиках для измерения температуры имеется датчик температуры NTC (термистор). Термистор – это терморезистор – резистор, который меняет свое сопротивление в зависимости от температуры. Технически все резисторы являются термисторами – их сопротивление слегка изменяется в зависимости от температуры, но обычно это изменение очень мало и его трудно измерить.
Термисторы сделаны так, чтобы их сопротивление резко изменялось при изменении температуры, и изменение на один градус может составлять 100 Ом или более! Термин «NTC» означает «Negative Temperature Coefficient» (отрицательный температурный коэффициент), что означает, что с ростом температуры сопротивление уменьшается.

Рисунок 3. Термистор
Устройство и принцип работы
Подключение датчика DHT11

Рисунок 4. Подключение датчика DHT11
Работа с библиотекой dht11-master
Напишем программу для считывания показаний температуры и влажности с датчика. Объявляем датчик, указываем куда подключен out. Считываем информацию с датчика и выводим в монитор порта. Добавим конечно же дополнительную информацию - слова - что же мы выводим в монитор порта и укажем единицы измерения температуры и влажности.
#include <dht11.h> //подключаем библиотеку
#define dht11pin 2 //создаем переменную для пина датчика
dht11 DHT; //объявляем датчик температуры и влажности
void setup(){
pinMode(dht11pin, INPUT); //настраиваем пин датчика как вход
Serial.begin(9600); //настраиваем работу с монитором порта
}
void loop(){
DHT.read(dht11pin); //считываем показания датчика
//выводим в монитор порта показания температуры
Serial.print("Temperature = ");
Serial.print(DHT.temperature);
Serial.print(" C");
//выводим в монитор порта показания влажности
Serial.print(", Humidity = ");
Serial.print(DHT.humidity);
Serial.println(" %");
delay(1000); //ждем 1 секунду
}
Работа с библиотекой SimpleDHT
#include <SimpleDHT.h> //подключаем библиотеку
SimpleDHT11 dht11(2); //объявляем датчик температуры и влажности
void setup() {
Serial.begin(9600); //настраиваем работу с монитором порта
}
void loop() {
byte temperature = 0; //создаем переменные типа byte для хранения показаний датчика
byte humidity = 0;
dht11.read(&temperature, &humidity, NULL); //считываем показания датчика
Serial.print("Temperature = "); //выводим в монитор порта показания температуры
Serial.print(temperature);
Serial.print(" C, ");
Serial.print("Humidity = "); //выводим в монитор порта показания влажности
Serial.print(humidity);
Serial.println(" %");
delay(1000); //ждем 1 секунду
}
Работа с библиотекой DHT sensor library
#include "DHT.h" //подключаем библиотеку
#define DHTpin 2 //переменная для пина датчика
#define DHTtype DHT11 //переменная для типа датчика
DHT dht(DHTpin, DHTtype); //инициализируем датчик
void setup() {
Serial.begin(9600); //настраиваем работу с монитором порта
dht.begin(); //запускаем работу датчика
}
void loop() {
float hum = dht.readHumidity(); //считываем показания влажности
float temp = dht.readTemperature(); //считываем показания температуры в градусах Цельсия
float tempF = dht.readTemperature(true); //считываем показания температуры в градусах Фаренгейта
Serial.print("Temperature: "); //выводим в монитор порта все три вида показаний датчика
Serial.print(temp);
Serial.print(" C, ");
Serial.print(tempF);
Serial.print(" F; ");
Serial.print("Humidity: ");
Serial.print(hum);
Serial.println(" %;");
delay(1000); //ждем 1 секунду
}
Работа с библиотекой DHT sensor library
#include "DHT.h" //подключаем библиотеку
#define DHTpin 2 //переменная для пина датчика
#define DHTtype DHT11 //переменная для типа датчика
DHT dht(DHTpin, DHTtype); //инициализируем датчик
//создаем переменные для каждого из пинов RGB светодиода
int redLed = 11;
int greenLed = 10;
int blueLed = 9;
//создаем переменные для значения яркости каждого из цветов RGB светодиода
int red;
int green;
int blue;
void setup() {
Serial.begin(9600); //настраиваем работу с монитором порта
dht.begin(); //запускаем работу датчика
pinMode(redLed, OUTPUT); //настраиваем пины RGB светодиода как выходы
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
}
void loop() {
//считываем показания влажности
float hum = dht.readHumidity();
//считываем показания температуры в градусах Цельсия
float temp = dht.readTemperature();
//считываем показания температуры в градусах Фаренгейта
float tempF = dht.readTemperature(true);
//выводим в монитор порта все три вида показаний датчика
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print(" C, ");
Serial.print(tempF);
Serial.print(" F; ");
Serial.print("Humidity: ");
Serial.print(hum);
Serial.println(" %;");
delay(1000);
//если температура меньше 25 градусов
//цвет RGB светодиода - зеленый
if(temp<25){
setRGB(0, 255, 0);
}
//если температура от 25 до 30 градусов
//цвет RGB светодиода - желтый
else if(temp>=25 && temp<30){
setRGB(255, 255, 0);
}
//иначе цвет RGB светодиода красный
else{
setRGB(255, 0, 0);
}
}
//Подпрограмма, которая устанавливает цвет свечения RGB светодиода
//Данная функция имеет 3 параметра
//r - яркость свечения красного цвета
//g - яркость свечения зеленого цвета
//b - яркость свечения синего цвета
void setRGB(int r,int g,int b){
analogWrite(redLed,r);
analogWrite(greenLed,g);
analogWrite(blueLed,b);
}
Задания
Соберите схему с датчиком DHT11 и сервомотором. Создайте программу, которая будет поворачивать вал сервомотора на 90 градусов (открывать окно в теплицу) при превышении температуры значения в 35 градусов, и возвращать вал сервомотора в исходное положение при изменении температуры ниже 33 градусов.
Соберите схему с датчиком DHT11 и сервомотором. Создайте программу, которая будет включать реле управляющее «подогревом» при изменении температуры ниже 10 градусов, и отключении при изменении выше 12 градусов. При повышении температуры выше 28 градусов должно срабатывать реле, включающее «кондиционер», и отключатся, когда температура ниже 26 градусов.