Описанный в [1] несложный велоспидометр на основе платы Arduino Pro Mini неплохо справляется со своими обязанностями, однако большую часть времени пылится вместе с велосипедом в гараже. Между тем это хорошее устройство для вывода на двухразрядный светодиодный индикатор любой информации небольшого объёма. Подключив к нему какой-либо датчик, можно получить функционально совершенно другой прибор. В предлагаемой статье рассказано, как превратить его в простой измеритель температуры и относительной влажности воздуха.
В последнее время в продаже появились датчики температуры и влажности воздуха DHT11 [2] — недорогие малогабаритные устройства, в корпусе которых имеются резистивный измеритель влажности, терморезистор и электронный узел, опрашивающий датчики и передающий их показания потребителю по цифровому интерфейсу, напоминающему 1-Wire. Датчики калиброваны и не требуют какой-либо регулировки при эксплуатации. Параметры DHT11 не слишком хороши, но вполне удовлетворительны для бытового применения. Он измеряет температуру от 0 до 50 °С с погрешностью ±2 °С и относительную влажность воздуха от 20 до 90 % с погрешностью ±5 %.
В дежурном режиме (free status) на информационной линии датчика должен быть установлен высокий логический уровень, что обеспечивается её соединением с плюсом источника питания внешним резистором сопротивлением 4,7 кОм. Когда микроконтроллеру или другому устройству, к которому подключён датчик, требуются сведения о температуре и влажности, он устанавливает на информационной линии низкий логический уровень, затем снимает его и «слушает» линию. В ответ DHT11 передаёт 5 байтов (40 двоичных разрядов) информации: два байта — измеренное значение влажности, два байта — измеренное значение температуры и один байт контрольной суммы. Подробнее протокол описан в [2].
В нашем случае микроконтроллер должен периодически опрашивать датчик, а затем поочерёдно выводить на индикатор полученные значения температуры и влажности. Двух разрядов цифрового индикатора как раз достаточно для их отображения.
Схема метеостанции показана на рис. 1. Она мало отличается от приведённой в [1]. Подключение светодиодного индикатора HG1 к плате Arduino Pro mini [3] осталось прежним. Вместо геркона SF1 (датчика вращения колеса) с ней соединён датчик DHT11 (В1), однако информационную линию датчика (вывод 2) оказалось удобным присоединить не к контакту 02 (как геркон), а к контакту DO (RXI) платы Arduino Pro mini. Этот контакт расположен на её узкой стороне рядом с контактами VCC и GND, на которые подают напряжение питания.
Питать устройство можно было бы и от трёх гальванических элементов типоразмера ААА, как это сделано в [1]. Однако при постоянно включённом индикаторе метеостанция потребляет ток около 50 мА. Поэтому её удобнее питать от внешнего источника напряжения 5 В, например, от зарядного устройства для сотового телефона. Его подключают к разъёму Х2 (microUSB).
Специальная печатная плата для метеостанции оказалась не нужна. Использована та же плата Arduino Pro mini с установленным прямо на неё светодиодным индикатором, что и в велоспидометре. Для соединения с Arduino Pro mini датчика и источника питания собрана навесным монтажом небольшая коммутационная плата. На ней размещены разъёмы Х1 и Х2 (гнездовая часть), резистор R1 и гнездовая колодка для соединения с контактами Arduino, в отверстия которых впаяны штыри. Внешний вид конструкции показан на рис. 2.
Необходимо отметить, что в устройстве можно использовать готовый модуль датчика влажности и температуры DHT11, в котором датчик находится на небольшой печатной плате с разъёмом. Как правило, эквивалентный R3 (на рис. 1) резистор на ней уже имеется.
В качестве корпуса конструкции вполне подходит такой же футляр от аудиокассеты, что использован в велоспидометре. В нём лишь необходимо сделать отверстия для проводов питания и для доступа воздуха к датчику. Неиспользуемое пространство можно заполнить поролоном, а лицевую сторону кассеты украсить цветной открыткой, вырезав в ней отверстие для наблюдения за индикатором, например, как на рис. 3.
Программа (скетч) микроконтроллера метеостанции dht_2razr_segm_1 .ino разработана в IDE Arduino [4]. Для взаимодействия с датчиком DHT11 она использует библиотеку dht, которую, прежде чем транслировать программу, следует скачать из Интернета по ссылке [5) и подключить к среде разработки Arduino IDE.
Программа работает следующим образом. Её блок начальной настройки Setup() после подачи питания гасит индикатор и устанавливает режим его работы — индикацию номера версии программы. Затем он инициализирует однопроводный последовательный интерфейс для связи с датчиком.
В основном цикле программы Loop(), в зависимости от режима работы, индикатор выводит информацию, вид которой задан значением переменной var J:
1 — в течение 1 с отображает измеренное значение окружающей температуры в градусах Цельсия. Признак этого режима — включённая десятичная точка в младшем (правом) разряде индикатора;
2 и 4 — индикатор погашен на 0,6 с. В это время происходит обмен информацией между датчиком и микроконтроллером, а полученные результаты присваиваются переменным;
3 — в течение 1 с отображает измеренное значение относительной влажности воздуха. Точки на индикаторе в этом режиме погашены;
5 — в течение 1 с отображает номер версии программы.
Как уже было сказано, в процедуре Setup() переменной varj присвоено значение 5, поэтому работа процедуры Loop() начинается с вывода номера версии. Затем циклически перебираются значения var i от 1 до 4.
В той же процедуре происходит развёртка изображений цифр на индикаторе: программа поочерёдно устанавливает низкий уровень на соединённых катодах одноимённых элементов двух разрядов индикатора, а на анодах разрядов, где этот элемент должен светиться, она устанавливает высокий уровень. Переход от предыдущей пары элементов к последующей происходит каждые 3 мс.
После подачи питания на плате Arduino Pro mini включается сигнализирующий об этом светодиод LED1 и кратковременно вспыхивает светодиод D3. По завершении работы программы-загрузчика светодиод D3 светит непрерывно. На секунду на индикаторе появляется номер версии программы («0.1»), затем она переходит в рабочий режим. На индикаторе попеременно с паузами 0,6 с на 1 с появляются измеренные значения температуры в градусах Цельсия и относительной влажности воздуха в процентах.
Вместо датчика DHT11 в конструкции можно использовать более точный датчик температуры DS18B20 [6], подключив его к разъёму Х1, как показано в верхнем левом углу на рис. 1. Влажность после этого, конечно, измеряться не будет. Датчик DS18B20 распространён и недорог. Он имеет цифровой интерфейс 1 -Wire, легко реализуемый с помощью любого микроконтроллера, калиброван изготовителем и не требует какой-либо подстройки в процессе эксплуатации. Датчик способен работать в интервале температуры -55…+125 °С с погрешностью не хуже ±2 °С. В интервале температуры -10…+85 °С гарантирована погрешность не хуже ±0,5 °С. Для обмена информацией с датчиком DS18B20 используется интерфейс 1- Wire, протокол обмена по которому существенно сложнее, чем используемый для связи с DHT11. Он подробно описан в [7].
Для работы с датчиком DS18B20 в модуль Arduino Pro mini нужно загрузить программу ds_2razr_segm4.ino. Она отличается от описанной выше использованием для организации обмена по интерфейсу 1-Wire библиотеки OneWire [8] и тем, что и в режиме 1, и в режиме 3 на индикатор выводится одинаковая информация — полученное от датчика значение температуры. Если она ниже нуля, то отображаются только целые градусы со знаком минус, а при температуре
ниже -9 °С индикатор гаснет. Температура от 0 до 9,9 °С отображается с одним десятичным знаком после запятой, выше — только целая часть её значения.
ЛИТЕРАТУРА
- Пахомов А. Велоспидометр на Arduino. — Радио, 2015, № 11, с. 44
- DHT11 Humidity & Temperature Sensor. — URL: http://www.robotshop.com/PDF/dht11.pdf (10.08.15).
- Arduino Pro Mini. — URL: http://arduino.ru/Hardware/ArduinoBoardProMini
- Download the Arduino Software. — URL: https://www.arduino.cc/en/Main/Software
- Библиотека DHT к — URL: http://iarduino.ru/lib/DHT.rar (10.08.15).
- DS18B20 Programmable Resolution 1-Wire Digital Thermometer. — URL: http://datasheets. maximintegrated.com/en/ds/DS18B20.pdf
- Dallas Semiconductor’s 1 -Wire Protocol. — URL: http://playground.arduino.cc/Learning/OneWire (14.08.15).
- Library for Dallas/Maxim 1 -Wire Chips. — https://github.com/PaulStoffregen/OneWire
Автор: А. ПАХОМОВ, г. Владимир
Источник: журнал Радио №12, 2015