Комнатная «метеостанция» на Arduino Pro Mini

В статье описано несложное устройство для измерения и индикации температуры и влажности в помещении. «Метеостанция» выполнена на основе датчика температуры и влажности DHT11 и платы Arduino Pro mini (ATmega168), в качестве индикатора использован двухразрядный семисегментный индикатор. Питание устройства осуществляется от внешнего источника питания 4…5 В (зарядного устройства для телефона). Также приводится описание прибора с термометром DS18B20.

Эта моя статья опубликована в журнале «Радио» (№12, 2015 год). Здесь приводится первоначальный (без правки редактора) вариант статьи.

В статье про велоспидометр описано несложное устройство на основе модуля Arduino Pro Mini. Велоспидометр неплохо справляется со своими обязанностями, однако большую часть времени устройство «пылится» вместе с велосипедом в гараже. Между тем – это хорошая платформа для вывода на двухразрядном семисегментном индикаторе любой информации небольшого объема. Нетрудно оснастить прибор каким-либо датчиком и получить функционально совершенно новое устройство. Ниже описана простая комнатная «метеостанция» на основе датчика DHT11 и описанной ранее платформы.

Немного теории

Датчик температуры и влажности DHT11 представляет собой недорогое малогабаритное устройство, в пластиковом корпусе которого установлены: резистивный измеритель влажности, термистор и 8-битный микроконтроллер. Все датчики калибруются на производстве и не требуют какой-либо настройки/подстройки при эксплуатации. Параметры датчика не являются «сверхъестественными», но для домашней «метеолаборатории» вполне достойны: диапазон измеряемой температуры 0…50 градусов Цельсия с точностью измерения 2 градуса; влажности – 20…90% при точности 5%RH.

Цифровой обмен данными с внешней системой осуществляется по однопроводному последовательному интерфейсу, напоминающему 1-Wire. Протокол работы интерфейса довольно прост. В «дежурном» режиме (free status) уровень сигнала на линии данных высокий, что обеспечивается «подтягиванием» его к уровню питающего напряжения внешним резистором (рекомендован номинал 5 Ком). Когда внешнему устройству, например микроконтроллеру, требуются данные об измерении, оно устанавливает в линии уровень нуля, затем снимает его и «слушает» линию данных – DHT11 должен в ответ передать 40 бит данных: два байта данных – значение измеренной влажности, два байта – значение измеренной температуры и байт контрольной суммы.

Таким образом, микроконтроллер нашей «метеостанции» должен периодически опрашивать датчик, а затем выводить на индикатор поочередно полученное значение измеренной температуры или влажности. Двух разрядов цифрового индикатора как раз достаточно для отображения результата.

Принципиальная схема

meteo

«Сердцем» устройства является модуль Ardino Pro Mini (или один из его многочисленных клонов) с микроконтроллером ATmega168 (можно использовать ATmega328 и, даже, ATmega88 или ATmega8A) – микросхема DD1. Основные детали модуля, установленные на плате выделены контуром. Тактовую частоту процессора задает кварцевый резонатор Q1. Светодиоды в проекте не несут каких-либо функций (кроме индикации наличия питания). Встроенный в плату стабилизатор напряжения также не используется и на схеме не показан. Контактные площадки платы показаны условно и подписаны в принятой в проектах Arduino нумерации. Штыревой разъем Х1 установлен на торце модуля и предназначен для подключения модуля к компьютеру для «заливки» результатов компиляции скетча в Arduino IDE.

В качестве индикатора выбран двухразрядный светодиодный индикатор, его контакты удобно расположены и позволяют распаять индикатор непосредственно на плате модуля микроконтроллера. С целью минимизации дополнительных элементов выбрана динамическая развертка изображения не «поразрядная», а «посегментная» — это позволило обойтись только двумя токоограничивающими резисторами R4, R5. Кроме того, такое решение позволило обойтись без ключевых транзисторов, т.к. максимальный ток, протекающий через выходы микроконтроллера, не превышает допустимого (40 мА) значения даже при двух горящих сегментах.

Чтобы не вносить изменений в конструкцию модуля, относительно схемы велоспидометра, все новые элементы подключаются через контакты разъема программирования Arduino X1. Линия D0(RXD) используется для организации однопроводной последовательной шины обмена данными с датчиком DHT11. Роль подтягивающего резистора шины играет резистор R6.

Питание устройства можно было бы осуществлять от трех элементов ААА (как это сделано в велоспидометре), однако потребляемый «метеостанцией» ток, при постоянно включенной индикации, довольно высок (около 50 мА), поэтому выбрано питание от внешнего источника. Блок питания (обычное зарядное устройство от сотового телефона) подключается через разъем microUSB (X3).

Монтаж

Для «метеостанции» специальная печатная плата оказалась не нужна: монтаж светодиодного индикатора осуществляется прямо на плате модуля микроконтроллера.DSCF4096

Однако, чтобы избавиться от лишних проводов для подключения датчика и источника питания, пришлось собрать небольшую платку с гнездами разъемов Х1 (подключение Pro Mini), X2 (подключение DHT11) и Х3 (гнездо microUSB) для подключения зарядного устройства от телефона, выполняющего роль сетевого блока питания. На этой же плате установлен подтягивающий резистор R6.DSCF4121 Необходимо отметить, что в устройстве можно использовать готовый модуль датчика влажности и температуры DHT11, где датчик распаян на небольшой плате. Как правило, в таком модуле подтягивающий резистор на плате уже имеется, поэтому установка R6 не требуется.

В качестве индикатора можно использовать и другие приборы. В случае использования семисегментного индикатора с другой цоколевкой, возможно, потребуется переназначить подключение сегментов в программе.

В качестве корпуса конструкции вполне подходит тот же корпус от аудиокассеты с прозрачной крышкой, который использован в велоспидометре. В крышке корпуса необходимо проделать отверстие для провода зарядного устройства и дырки для доступа воздуха к датчику температуры/влажности. Неиспользуемое пространство можно заполнить пенополиэтиленом, а лицевую часть (за исключением индикатора) украсить цветной открыткой:DSCF4181

Программа

Программа (скетч) «домашней метеостанции» dht_2razr_segm_1 разработана в IDE Arduino. При работе с датчиком DHT11 используется готовая библиотека. Общедоступные наработки «поклонников Arduino», позволяют в разы сократить время разработки приложений, т.к. освобождают нас от «рутины разборок в протоколах работы различных внешних устройств».

Программа работает следующим образом.

В модуле начальной настройки Setup():

После подачи питания индикатор гасится, режим его работы переключается в состояние индикации номера версии программы. Инициализируется однопроводный последовательный интерфейс для связи с датчиком.

В модуле цикла Loop():

В зависимости от режима работы индикатора, определяется выводимое на индикатор цифровое значение. Режим работы определяется переменной var_i :

1 – индикация измеренного датчиком DHT11 значения окружающей температуры в градусах Цельсия. Признаком этого состояния является свечение точки на индикаторе во втором (правом) разряде. Длительность индикации – 1 сек.

2 и 4 – индикатор погашен – пауза. В этих режимах запускается обмен данными с датчиком, полученные значения измерений сохраняются во временных переменных. Длительность режима – по 0,6 сек.

3 – индикация измеренного датчиком значения относительной влажности воздуха в процентах. Длительность индикации – 1 сек.

5 – индикация номера версии программы («0.1»). Длительность индикации – 1 сек.

Далее осуществляется цикл развертки изображения полученного цифрового значения на индикаторе: последовательно подается логический ноль на катод каждого сегмента индикатора, а на аноды, где этот сегмент должен светится, подается логическая единица. Длительность «обработки» сегмента 3 мс.

Как работать с устройством

После подачи питания на устройство на модуле Arduino зажигается индикатор питания (светодиод VD2) и коротко вспыхивает VD1. После завершения работы bootloader-а микроконтроллера постоянно зажигается светодиод VD1 и на секунду на индикаторе высвечивается номер версии скетча («0.1»).

Программа переходит в рабочий режим. На индикаторе попеременно (по одной секунде) высвечивается значение измеренной температуры в градусах Цельсия (при этом светится точка в правом разряде индикатора) и относительной влажности воздуха в процентах (точка в правом разряде, при этом, не светится).

Подключение датчика температуры DS18B20

Вместо DHT11 без изменения схемы, но уже без определения влажности, в конструкции можно использовать более точный датчик температуры DS18B20. Это компактный, достаточно распространенный и недорогой цифровой термометр. Микросхема имеет цифровой интерфейс 1-Wire, программно и аппаратно легко реализуемый на любом микроконтроллере. Датчик калиброван изготовителем и не требует какой-либо температурной подстройки в реальном устройстве. Схема подключения прибора такая же (датчик показан в правом нижнем углу:meteo– элемент DD3 устанавливается в разъем Х2 вместо DHT11. Для обмена данными с датчиком используется шина 1-Wire, протокол обмена по которой существенно сложнее, чем с DHT11.Скетч для работы с DS18B20 – ds_2razr_segm_4.

Работа программы отличается от описанной выше использованием соответствующей этому датчику библиотеки OneWire и упрощенным выводом измеренного значения температуры – в режимах 1 и 3 индицируется полученное с датчика значение температуры. Индикация отрицательных значений производится с точностью до целых значений, при температуре ниже -10 индикатор гасится. Положительная температура до 10 градусов отображается с десятыми долями, выше – только целое значение. DSCF4177

Фото устройства с подключенным датчиком DS18B20.

Заключение. Выводы

Комнатная «метеостанция» получилась чрезвычайно простой и недорогой. Конструкция удачно дополняет описанный ранее велоспидометр (никакой перепайки не требуется – нужна лишь «перезаливка» скетча). Устройство «испытано» в комнате, в ванной, при варке обеда, на живом дыхании и проч. Оказалось любопытно проследить … связь плохого сна и сухости в помещении…

Устройство – хороший прототип для энтузиастов: есть место в «коробочке», где можно разместить модуль часов, Bluetooth модуль или что-то иное для экспериментов. Ресурсов микроконтроллера вполне достаточно для дальнейших улучшений конструкции, например, определение прогноза погоды 🙂 !

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

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".