Altinkaya: турецкие корпуса для РЭА

Контроллер управления подсветкой рабочей зоны на кухне. Часть 2. Вариант на NodeMCU

Журнал РАДИОЛОЦМАН, март 2017

Часть 1

Общие сведения

Второй вариант контроллера выполнен на распространенном («народном») Wi-Fi модуле типа NodeMCU, в основе которого достаточно мощная система-на-кристалле (СнК) Espressif ESP8266. Такое решение позволит реализовать в нашем контроллере подсветки дополнительные функции, присущие устройствам Интернета вещей (Рисунок 10). На сегодняшний день существует множество разновидностей этих Wi-Fi модулей, отличающихся форм-фактором, количеством линий ввода/вывода общего назначения, наличием интерфейса для отладки и программирования. Подобное разнообразие обусловлено высокой популярностью Wi-Fi модулей среди радиолюбителей и конструкторов, а также полной поддержкой ядра ESP8266 в интегрированной среде разработки Arduino IDE. Другими словами, это миниатюрная Arduino-плата с Wi-Fi интерфейсом, с помощью которой можно создавать устройства Интернета вещей (IoT) с достаточно богатым функционалом.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 10. Контроллер управления подсветкой рабочей зоны на кухне
(версия на NodeMCU) поддерживает IoT функции.

Идея внедрить IoT функции в контроллер подсветки родилась после того, как я оценил возможности облачного сервиса и мобильного приложения myDevices Сayenne для разработки IoT устройств на Raspberry Pi и Arduino [1, 2]. Рекомендую ознакомиться с опубликованными на нашем портале обзорами, чтобы понять принцип построения и работы системы.

Контроллер управления подсветкой рабочей зоны на кухне
Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 11. Приборная панель Cayenne для контроллера управления
подсветкой на кухне: а) в браузере; б) в приложении.

Теперь, учитывая, что контроллер автоматического управления подсветкой поддерживает Интернет подключение (в частности, к серверу Cayenne), мы можем реализовать дополнительные полезные функции удаленного контроля и управления. На данный момент на приборной панели Cayenne я могу наблюдать за уровнем освещенности и его изменением, режимом работы ШИМ контроллера, температурой в помещении, а также могу из приложения на смартфоне перевести контроллер в ручной режим работы и включить подсветку на максимальную яркость (Рисунок 11). Все данные, поступающие на сервер Cayenne, сохраняются, и в дальнейшем я могу посмотреть (и скачать) статистику изменения данных по различным периодам времени, а также настроить условия оповещения на мобильный телефон или электронную почту (Рисунок 12). Таким образом, данный контроллер, помимо управления подсветкой рабочей зоны на кухне, может выполнять дополнительные функции автоматизации и является в некотором смысле удаленным датчиком (сенсорным узлом).

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 12. Один из вариантов графического отображения в Cayenne
статистики по датчику температуры на кухне.

Дальше мы подробно рассмотрим устройство и принцип работы этого варианта контроллера.

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

Вариант для сайта --- Принципиальная схема в формате pdf доступна для скачивания в секции загрузок, оригинал проекта доступен в онлайн среде проектирования электроники EasyEDA.

Как я заметил в первой части статьи, схемотехника устройства на NodeMCU несколько отличается от подобного устройства на Arduino (Рисунок 13). Во-первых, это обусловлено тем, что номинальное напряжение питания СнК ESP8266 равно 3.3 В. Во-вторых, техническая документация на СнК, практические руководства и тематические форумы не дают однозначного ответа на вопрос о совместимости Wi-Fi модулей на ESP8266 с 5-вольтовыми устройствами.

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 13. Принципиальная схема контроллера подсветки (версия на NodeMCU).

Кроме того, в модулях типа NodeMCU для питания СнК установлена микросхема линейного регулятора напряжения 3.3 В (обычно из серии AMS1117-3.3), для которой максимальное входное напряжение составляет 15 В (в некоторых модификациях до 18 В). В этом случае модуль NodeMCU можно было запитать непосредственно от блока питания 12 В. Однако, по ряду очевидных причин я решил установить дополнительный регулятор напряжения 5 В с соответствующим фильтрующими конденсаторами. Напряжение питания 5 В с выхода регулятора подается на вход Vin Wi-Fi модуля.

Cхема ШИМ управления светодиодной лентой не изменилась. Затвор силового MOSFET подключен к порту D5 NodeMCU.

Диапазон входных напряжений интегрированного в СнК ESP8266 аналого-цифрового преобразователя составляет 0 – 1 В, поэтому немного изменена схема подключения датчика освещенности (фоторезистора). В зависимости от типа используемого фоторезистора, возможно, потребуется включить в измерительную цепь дополнительный резистивный делитель. В моем случае (фоторезистор VT93N1 номиналом 12 кОм) в делителе напряжения нет необходимости – даже в условиях высокой яркости напряжение на входе АЦП не достигало 0.9 В, поэтому резистор R7 не устанавливается, а вместо R6 ставится перемычка (SMD резистор 0 Ом).

Датчик температуры DS18B20 подключается к разъему P3. Напряжение питания 3.3 В для датчика температуры поступает с модуля NodeMCU, сигнальный вывод датчика с подтягивающим резистором R5 подключается к порту D3.

Разъем P4 и контакт 3 разъема P3 предусмотрены для возможности дальнейшего расширения функционала.

Для подключения датчика движения используется аналогичный сдвоенный разъем TB1-TB2. Выходная линия датчика движения подключается к порту D2 через схему согласования логических уровней (5 В/3.3 В), выполненную на резисторе R3 и диоде Шоттки D1. При текущем способе подключения датчика движения (как и в случае с контроллером на Arduino) схема согласования логических уровней не нужна, и ее можно исключить. Однако, в зависимости от типа используемого датчика движения и способа его подключения, указанная цепь может оказаться обязательной, так как СнК ESP8266 может выйти из строя при работе с 5-вольтовыми сигналами.

Замечу, что примененная схема согласования логических уровней является односторонней. Желательно в схеме использовать диоды Шоттки – они имеют низкое прямое падение напряжения.

Печатная плата

Проект двухсторонней печатной платы разработан в EasyEDA; Gerber-файлы доступны для загрузки (Рисунок 14). Компоненты и разъемы старался расположить так же как на плате для Arduino версии контроллера, однако размеры платы получились чуть больше. Просмотреть проектные Gerber-файлы также можно оналйн при помощи GerberViewer.

На верхнем и нижнем слое выполнена заливка Copper Area (GND, земля) и шелкография. Как и в случае с платами для Arduino-версии контроллера, минимальный заказ (5 шт.) на изготовление печатных плат был выполнен в кратчайшие сроки, но в итоге я получил 6 плат.

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 14. Проект печатной платы контроллера на NodeMCU в среде EasyEDA.

Все компоненты устанавливаются свободно, при этом я даже не проверял размеры и диаметры отверстий в используемых библиотечных компонентах. Полученный комплект печатных плат показан на Рисунке 15. Плата с установленными компонентами изображена на Рисунке 16.

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 15. Комплект печатных плат, изготовленных в EasyEDA.
 
Контроллер управления подсветкой рабочей зоны на кухне
Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 16. Вид платы контроллера на NodeMCU с установленными компонентами.

Скетч Arduino

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

Основные функции в программе и режимы работы контроллера на NodeMCU остались такими же, как в версии на Arduino.

Обратите внимание на определение портов ввода/вывода, подключенные дополнительные библиотеки для работы с датчиком температуры и сервером Cayenne, константы для подключения модуля по Wi-Fi к домашней сети. Кроме того, замечу, что на ESP8266 в Arduino IDE с помощью функции analogWrite() реализуется программная ШИМ с диапазоном 0-1023 (по умолчанию). Следовательно, несколько изменились задержки в циклах плавного изменения яркости при переходе из одного режима работы в другой. В циклах управления ШИМ используется функция delay(), а в конце основного цикла программы применена функция yield() – это необходимо для того, чтобы процессор ESP8266, помимо пользовательского приложения, мог выполнять фоновые задачи по подержанию Wi-Fi соединения. Для подключения контроллера к серверу Сayenne необходимо указать в исходном коде уникальный ключ авторизации для устройства, который вы получите на начальном этапе добавления нового устройства на приборную панель Cayenne. Чтобы узнать, как это сделать, рекомендую ознакомиться с опубликованными на сайте Радиолоцман материалами, посвященными онлайн сервису myDevices Cayenne.

В текущей версии прошивки контроллер в автоматическом режиме управляет яркостью дополнительной подсветки рабочей зоны на кухне и отправляет данные о текущем уровне освещенности, температуре и значении ШИМ на сервер Cayenne, а также получает данные с сервера Cayenne о текущем состоянии одной кнопки на приборной панели, предназначенной для ручного принудительного включения подсветки на максимальную яркость. Нажатие кнопки ручного управления (на приборной панели или в мобильном приложении, называется «Вкл.-100%») отключает автоматический режим работы контроллера на 2 часа и включает подсветку на максимальную яркость. По истечении этого периода контроллер снова переходит в автоматический режим работы и переводит в неактивное состояние кнопку на приборной панели Cayenne. Кстати, о возможности менять состояние кнопки на приборной панели с удаленного устройства я узнал в ходе экспериментов; в разделе помощи Cayenne информации по этой функции я не нашел.

Для обмена данными с сервером Cayenne используются виртуальные порты (Листинг 3).

Листинг 3. Определение виртуальных портов для обмена данными с сервером Cayenne.

#define VIRTUAL_PIN_0 V0   // Виртуальный порт 0: датчик освещенности
#define VIRTUAL_PIN_1 V1   // Виртуальный порт 1: текущее значение ШИМ
#define VIRTUAL_PIN_2 V2   // Виртуальный порт 2: состояние кнопки на приборной панели "Вкл-100%"
#define VIRTUAL_PIN_3 V3   // Виртуальный порт 3: датчик темпеатуры

Виртуальный порт V2 используется именно для управления состоянием кнопки на приборной панели. По этому каналу контроллер отправляет значение 0 для изменения состояния кнопки (Листинг 4). Получая по виртуальному каналу V2 значение, равное 0, сервер деактивирует кнопку на приборной панели Cayenne и меняет на ней иконку.

Листинг 4. Изменение состояние кнопки на приборной панели Cayenne с удаленного устройства.

if ((Cayenne_Button == 1) && (millis() - timeout_3 > interval_4))
{
//ручной режим работы активен, сработал 2 часовой таймер
   Cayenne_Button = 0;
   Cayenne.virtualWrite(V2, Cayenne_Button);  // деактивируем кнопку на приборной панели (запись 0)
   timeout_3 = millis();                      // сброс таймера
   mode=3;                                    // переходим в автоматический режим работы
}

Обработка события нажатия кнопки на приборной панели выполняется функцией CAYENNE_IN(V2) (Листинг 5).

Листинг 5. Обработчик нажатия кнопки на приборной панели

CAYENNE_IN(V2)
{
  Cayenne_Button = getValue.asInt();
  if (Cayenne_Button == 1) {
  mode=2;
   Mode_Set();
 }
   else {
   mode=3;
   Mode_Set();
  }
}

Отправка данных о температуре, освещенности и текущем значении ШИМ (режим работы контроллера) выполняется отдельными функциями вида CAYENNE_OUT(). Это очень простые функции, конструкция которых подробно рассматривалась в [3]. Отправка и обновление данных происходят в автоматическом режиме по запросу с сервера Cayenne, но возможно реализовать собственный алгоритм и изменить периодичность обновления данных.

В процессе разработки контроллера я также проверил возможность его работы с сервером Cayenne по распространенному протоколу MQTT (так называемая Cayenne API). Для этого в скетче потребуется подключить соответствующую библиотеку, устанавливаемую непосредственно из менеджера библиотек в Arduino IDE, добавить функции обмена данными в скетч, пройти простую процедуру добавления нового устройства и, после удачного добавления, настроить виджеты, которые добавляются автоматически после подключения устройства к серверу. На мой взгляд, при использовании протокола MQTT получается очень гибкая система, где обмен данными контролируется пользователем. Единственный недостаток Cayenne API на сегодняшний день – удаленное устройство, работающее по MQTT протоколу, не поддерживается в мобильном приложении.

Заключение

Представленные два варианта устройства для автоматического управления дополнительным светодиодным освещением на кухне достаточно просты, но, на мой взгляд, функциональны и практичны. На данный момент у меня на кухне установлен контроллер на NodeMCU. В дальнейшем я планирую подключить в систему дополнительные датчики и схему управления вытяжкой на кухне.

Конечно же, оба устройства не идеальны и, возможно, потребуют оптимизации или доработки. Например, в работе контроллера на NodeMCU с Cayenne есть несколько нюансов, связанных с особенностями программных библиотек Cayenne для Arduino. При подаче питания на контроллер выполнение основного цикла пользовательской программы не начнется, пока не будет установлено беспроводное соединение с точкой доступа. Если же в процессе работы контроллера отключится беспроводная сеть или произойдет сбой подключения к Cayenne, то контроллер продолжит выполнять свою основную функцию (управление подсветкой), но будут наблюдаться задержки при обработке событий от датчика движения при переходе из одного режима работы в другой. Все это можно решить программно, но за все время работы данного варианта контроллера таких ситуаций еще не случалось…

Хочу заметить, что в контроллер на Arduino тоже можно интегрировать функции Интернета вещей и подключить его к серверу Cayenne, используя проводное подключение (RS-232, RS-485) или же модули беспроводных приемопередатчиков на микросхеме NRF24L01. В последнем случае придется позаботиться о выборе оптимальной топологии сети удаленных устройств и разработке мастер-устройства, которое будет выполнять сбор и обработку данных от ведомых устройств в сети.

Дополнительные материалы

Материалы по теме

Загрузки

  1. Принципиальная схема (версия на NodeMCU, pdf) – скачать
  2. Печатная плата (Gerber) – скачать
  3. Исходный код (скетч Arduino) – скачать

На английском языке: Controller for automatic lighting of the working area in the kitchen. Part 2 - NodeMCU Version. Schematic, PCB, Sketch

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя