Реле Tianbo - ресурс 10 млн переключений

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

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

Часть 1

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

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

Какими будут станции зарядки электромобилей в 2030 году: лучшие решения и мировой опыт для отечественных разработок

Контроллер управления подсветкой рабочей зоны на кухне
Рисунок 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

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