В этом эксперименте мы рассмотрим датчик для измерения относительной влажности воздуха и температуры DHT11 и создадим проект вывода показаний датчика на экран ЖКИ WH1602.
Необходимые компоненты:
• контроллер Arduino UNO R3;
• плата для прототипирования;
• датчик DHT11;
• LCD-экран WH1602;
• резистор 50 Ом;
• потенциометр 1 кОм;
• провода папа-папа.
• внешний блок питания +5 В.
Датчик DHT11 (см. рис. 21.1) не отличается высоким быстродействием и точностью, однако может найти свое применение в радиолюбительских проектах из-за своей невысокой стоимости. Датчик DHT11 состоит из емкостного датчика влажности и термистора. Кроме того, датчик содержит в себе простенький АЦП для преобразования аналоговых значений влажности и температуры.
Необходимые компоненты:
• контроллер 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 В.
• 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); // пауза перед следующим измерением
}
Порядок подключения:
1. Подключаем датчик DHT11 и WH1602 по схеме на рис. 21.2.
2. Загружаем в плату Arduino скетч из листинга 21.1.
3. Смотрим на экране дисплея показания относительной влажности и температуры.
Листинги программ скачать