#9 Эксперимент “Домашняя метеостанция”
Сегодня, мы научимся работать с цифровым датчиком температуры и влажности DHT11. Этот датчик очень популярен с среде разработчиков, так как он хоть и не отличается высокой точностью измерений, зато очень дешёв, надёжен и прост в подключении. Сегодня нам предстоит создать свою электронную версию термометра-гигрометра, с возможностью вывода данных, как в монитор порта, так и на экран LCD-дисплея.
Перед выполнением эксперимента прочтите:
Существуют две версии сенсоров DHT: DHT11 и DHT22. Выглядят они почти одинаково (отличаются цветом и размером). Распиновка у датчиков тоже одинаковая. Основные отличия – в технических характеристиках:
DHT11 | |
|
|
DHT22 | |
|
Мы будем использовать датчик DHT11, т.к. именно он присутствует в нашем наборе и его функционала более чем достаточно для измерения значений температуры и влажности в жилых помещениях.
СБОРКА УСТРОЙСТВА НА МАКЕТНОЙ ПЛАТЕ
Нам понадобятся следующие компоненты:
- Arduino Uno;
- USB-кабель для подключения к компьютеру;
- Датчик температуры и влажности DHT11;
- 3 соединительных провода типа папа-мама различных цветов.
Соберите устройство по следующей схеме:
Схема устройства на макетной плате |
Принципиальная схема устройства |
Обратите внимание:
- Подключать датчик можно в любой цифровой пин Arduino;
- Очень важно не перепутать полярность при подключении. Запомните – “минус” датчика находится справа, слева – сигнальный пин, а в центре – пин питания, который подключается в 5 или 3,3 В.
После успешного подключения датчика, необходимо установить библиотеки, необходимые для работы с ним. Конечно, с датчиком можно работать и напрямую, но с библиотеками это намного проще и быстрее.
УСТАНОВКА БИБЛИОТЕК
Для работы с датчиком температуры и влажности, нам необходимо подключить 2 библиотеки:
- DHT sensor library by Adafruit;
- Adafruit_sensor.
Подключим библиотеку DHT sensor library:
- Запустите Arduino IDE;
- Выберите [Скетч] → [Подключить библиотеку] → [Управлять библиотеками];
- В строке поиска введите “DHT” и нажмите [Enter];
- Из списка библиотек выберите “DHT sensor library by Adafruit”:
- Нажмите [Установка].
Подключим библиотеку Adafruit_sensor:
- Скачайте библиотеку по ссылке;
- В Arduino IDE выберите [Скетч] → [Подключить библиотеку] → [Добавить .ZIP библиотеку];
- В открывшемся окне найдите скачанный файл с названием “Adafruit_Sensor-master” и выберите его.
Теперь, когда библиотеки установлены, можно приступать к программированию!
ПРОГРАММИРОВАНИЕ
Мы будем снимать показания с датчиков температуры и влажности, и посылать их в монитор порта. Делать это нужно не чаще, чем 1 раз в секунду. Для этого напишем достаточно простой и понятный код:
#include <DHT.h> // подключаем библиотеки, необходимые #include <DHT_U.h> // для работы датчика температуры и влажности #define DHTPIN 2 // указываем номер пина, к которому подсоединен датчик DHT dht(DHTPIN, DHT11); // указываем тип датчика (если у вас старшая версия, укажите DHT22) void setup() { Serial.begin(9600); // инициализируем последовательный порт dht.begin(); // инициализируем датчик температуры и влажности } void loop() { float h = dht.readHumidity(); // считываем влажность в переменную h float t = dht.readTemperature(); // считываем температуру в переменную t if (isnan(h) || isnan(t)) // проверяем, не произошло ли ошибки при получении данных { Serial.println("Не удается считать показания"); // посылаем в порт сообщение, если произошла ошибка return; } Serial.print("Температура: "); // посылаем в порт значение температуры Serial.print(t); Serial.print("(C°) "); Serial.print("Влажность: "); // посылаем в порт значение влажности Serial.print(h); Serial.println("(%) "); delay(1000); // делаем паузу перед следующим считыванием данных с датчика }
Загрузите скетч в Arduino. После загрузки запустите монитор порта и убедитесь в правильности показаний. Пример получения данных с датчиков:
Зачастую, использовать монитор порта для получения данных не очень удобно. В первую очередь потому, что его нельзя “заставить” автоматически очищать область вывода и остаётся только наблюдать как данные накапливаются, располагаясь друг под другом. Для более удобной работы с монитором порта можно использовать плагин для браузера Google Chrome, который называется “Serial Projector”. Его можно скачать и установить в магазине дополнений браузера, после чего на рабочем столе появиться ярлык программы. Давайте установим этот плагин:
- Зайдите в браузер Google Chrome;
- Перейдите на страницу “Serial Projector” в магазине Chrome по ссылке;
- Установите “Serial Projector”, нажав кнопку [Установить];
- После установки, запустите плагин с помощью иконки на рабочем столе.
Подключение к последовательному порту:
- Закройте монитор порта в Arduino IDE;
- переключитесь на окно “Serial Projector” и нажмите “С”;
- Во всплывающем окне нажмите кнопку [stop] и выберите порт, к которому подключено Arduino, а “Bit Rate” установите в значение [9600];
- После выбора порта нажмите “Connect”.
Если вы всё сделали правильно, то в окне “Serial Projector” отобразятся значения температуры и влажности с нашего датчика:
Отлично, теперь вы умеете работать с датчиком температуры и влажности DHT11!
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
Задание 1:
Добавьте в схему устройства кнопку и измените код программы таким образом, чтобы при нажатии кнопки, в мониторе порта отображалось лишь значение температуры, а при повторном нажатии – лишь значение влажности.
Задание 2:
Добавьте в схему устройства LCD-дисплей и измените код программы таким образом, чтобы данные о температуре и влажности выводились на него. Кнопка, добавленная в предыдущем задании должна работать!
Задание 3*:
Добавьте в схему устройства сервопривод и 2 светодиода разных цветов. Заставьте сервопривод служить индикатором температуры и влажности:
- При влажности в 20%, вал сервопривода должен быть повёрнут на 90° влево, а при влажности в 80% – на 90° вправо;
- Аналогично для температуры: при температуре в 0 С° – вал сервопривода должен быть в крайнем левом положении, а при температуре в 50 С° – в крайнем правом положении.
При этом, кнопка по прежнему должна переключать вывод значений температуры и влажности, а светодиоды должны служить индикатором, например: если сейчас выводятся значения температуры, то горит зелёный светодиод, а если влажности – красный.