Нет ничего необычного в управлении светодиодами с помощью микроконтроллера. Даже такого странного, как ESP8266. Однако мне хотелось сделать законченный продукт. Что-то, что не было бы похоже на паука из проводов и радиодеталей.
Отмечу, что я — начинающий радиолюбитель, так что наверняка что-то сделал не слишком хорошо. Буду рад, если кто-то подскажет, что не так и почему надо делать иначе.
Существует целый ряд особенностей, связанных с контроллером ESP8622, с транзисторами, с мощными RGB-светодиодами, с 3D-печатью вообще и моделированием в частности и программированием всего этого счастья. Это обзорная статья, где я коротко покажу, что и как получилось, а если вы захотите, то раскрою подробнее запрошенные темы отдельными статьями.
Модуль ESP очень прожорлив. При запуске он забирает до 300 мА, что делает невозможным его питание, к примеру, от Arduino. Ему нужен свой источник питания. Причем, источник питания на 3.3В. Это проблема. В мире полно копеечных источников питания на 5В, но трехвольтовые громоздки и дороги. К счастью, существует такая вещь, как регулятор напряжения AMS1117-3.3.
Питание
Взял цоколь от лампочки, китайскую пятиваттную USB-зарядку, регулятор напряжения со сглаживающим конденсатором, диод Шоттки (на всякий случай) и получил:
На 3.3 не очень похоже, но это потому, что стоит пара конденсаторов. Однако, под нагрузкой все нормально.
Контроллер
Мой фаворит — ESP-07, с возможностью подключения внешней антенны и металлическим экраном-теплоотводом.
Прошивка: nodemcu, в первую очередь потому, что там есть поддержка ШИМ (PWM) и возможность менять код на лету.
Собранная схема
Затем, закрепил сверху трехваттный RGB-светодиод, подключил к нему транзисторы BC547 (схема с общим эмиттером), блок питания и плату заклеил изолентой и скрепил вместе двусторонним скотчем. С другой стороны платы прикрепил поставил микроконтроллер, подвел питание, добавил сопротивление к каждому каналу светодиода и подключил к 5 вольтам.
Корпус
Итоговый выбор — цилиндрический корпус с отверстием снизу под цоколь, канавками для платы и выемкой сверху для крепления украшения. Немного tinkercad-а, два часа печати и результат:
Финальный продукт
Проверка
Немного JS, немного LUA, немного Perl и…
Как это работает
При включении лампочка коннектится к домашней сети и запрашивает у домашнего сервера файлик с lua-скриптом. Если получилось — сохраняет и запускает. Если не получилось — запускает предыдущий сохраненный. Обычно включение занимает около 2-3 секунд.
Подводные камни
Куда же без них?
Во-первых, нельзя использовать транзисторную схему включения с общим коллектором. ESP — удивительно живучая штука, хоть и очень капризная. Он начинает зверски греться от пяти вольт, но после того как остынет — приходит в норму.
Во-вторых, нельзя использовать GPIO0, потому что он на старте получается замкнут на землю и ESP входит в режим прошивки. И нельзя использовать GPIO2, потому что если он на старте «на земле», то Wi-Fi модуль не стартует. GPIO15 тоже лучше не трогать. Мой выбор: 4,5,12.
В-третьих, нужно выставлять максимальную скорость для обмена данными, иначе при получении данных программный ШИМ начинает заметно мерцать.
В-четвертых, ABS-пластик горюч, это надо учитывать, помня о китайском блоке питания.
В пятых, в следующей версии нужно цилиндр делать более узким у основания, подрезав плату. Потому как не все патроны позволяют вкрутить лампу с таким широким основанием. Кроме того — можно было сантиметр высоты сэкономить.
Неисправимые улучшения
Планирую добавить midi-пищалку для всяких праздников, приложение под Андроид, чтобы выбирать цвет не в браузере, автоматический режим в котором бы лампа получала прогноз погоды и выбирала свой цвет в зависимости от результата и, наверное, следующий вариант стоит собирать, протравив плату. Интересные предложения всячески приветствуются.
Комментарии (13)
past
12.05.2015 22:01Поделитесь кодом?
У меня вполне с транзисторным ключем работает.Hellsy22 Автор
12.05.2015 22:39+1Кодом для nodemcu?
1. Коннектится по WiFi к сети, запрашивает страницу с адресом esp[nodeIP].lua с 192.168.1.1
init.lua
2. Закачанный скрипт, собственно.
192.168.1.33.lua
Дальше чип обрабатывает запросы вида http://192.168.1.33?led=1000,1000,1000
Писал быстро, поэтому комментарии минимальны или отсутствуют. Собственно, кода там тоже немного.past
18.05.2015 13:32Я сделал так: nodemcu-ssdp.
Это заливается поверх nodemcu-httpserver.
Скрипт upnp.lua пытается анонсировать устройство по сети по протоколу SSDP.
Страницу управления можно открыть по http://айпи адрес устройства/.
raid
12.05.2015 22:36-2В мире полно копеечных источников питания на 5В, но трехвольтовые громоздки и дороги.
Боже, что вы несёте! Я недавно купил в ближайшем радиомагазине линейный стабилизатор на 3,3В с конденсаторами. Всё удовольствие 24 рубля.Hellsy22 Автор
12.05.2015 22:44+1Раскройте тему чуть подробнее, пожалуйста. Он понижает с 220В? Какую выходную мощность обеспечивает?
raid
12.05.2015 22:52Он понижает с 4,7-15 Вольт постоянного тока. А их уже можно взять с любого бп.
Выходной ток до 800mA, чего ESP8266 хватит за глаза.Hellsy22 Автор
12.05.2015 23:07+1У меня этим же занимается AMS1117-3.3 с танталовым конденсатором на 22мкФ, но я сетовал на то, что нет вменяемых готовых миниатюрных решений. Приходится расковыривать блоки питания на 5В (например). А мне бы очень пригодился уже готовый дешевый и компактный блок питания на 3.3В, способный выдавать хотя бы 10 ватт. Вам такие не попадались?
EighthMayer
12.05.2015 23:13А-а, не факт что хватит. 800мА это при минимальной разнице между входным и выходным напряжениями. Любой линейный преобразователь — это, упрощённо говоря, резисторный делитель. И греется он соответствующе. Но с 5и вольт вполне потянет, тут Вы правы. Однако именно линейный преобразователь автор и использовал, так что теряется смысл Вашего замечания.
2Hellsy22: работа замечательная, так держать! От себя добавлю что если делать прямо совсем по феншую — лучше заменить линейник 3.3 вольта на импульсный преобразователь (да, обвеса побольше, но всё не так страшно как кажется по началу) и в качестве управляющего МК (раз уж вы хотите дополнительные датчики вешать и частота ШИМ нужна повыше) использовать, например, stm8. Ну и китайский бп лучше заменить на что-нибудь более повторимое и приличное. =)
Nizametdinov
13.05.2015 00:01+1В мире полно копеечных источников питания на 5В, но трехвольтовые громоздки и дороги.
Глянь такой.
ru.aliexpress.com/item/ac-dc-power-supplies-110V-220V-265V-to-3-3V-0-6a-ac-dc-supply-power/32315023686.html
И такой ru.aliexpress.com/item/ac-dc-3-3v-supply-power-module-110v-220v-264v-to-3-3v-0-9a-small/1976378645.html
Хинт — в поиске Ali 3,3 не равно 3.3 — ищи с точкой.
10Вт и 3.3В — это миниатюрных не найдешь, размер определяется больше током, а не напряжением. Тут 3А получается, это уже много.
philfreeeu
14.05.2015 14:52В-третьих, нужно выставлять максимальную скорость для обмена данными, иначе при получении данных программный ШИМ начинает заметно мерцать.
Какая скорость имеется в виду и где она выставляется?Hellsy22 Автор
15.05.2015 00:39Скорость serial. Похоже, что микроконтроллер обменивается с Wi-Fi модулем по тому же порту. И пока идет передача данных — все остальное висит.
Выставляется в nodemcu она так: uart.setup(0,921600,8,0,1,0)
sinty
ШИМ в ночнике не вредно? Может лучшее решение несколько слабых светодиодов и регулировать яркость их включением/отключением?
Hellsy22 Автор
Не уверен насчет вреда, но низкочастотный ШИМ меня раздражает тем, что при взгляде мельком объект оставляет, как бы, шлейф из своих копий. У ESP что-то среднее — частота ШИМ примерно килогерц, так что выше 30% duty мерцание незаметно. А вот если поставить, скажем, 1% яркости, то шлейф становится сильно заметен.
В принципе, это можно решить добавлением конденсаторов. Что-то порядка 1000мкФ @10В на каждый канал сгладят все где-то до 5% яркости. А можно сразу добавить Arduino Pro Mini у которой частота ШИМ около 63 килогерц. Этот вариант мне нравится еще тем, что серьезно все упрощает — выводов для ШИМ куча и нормальный I2C для датчиков.
Что же до схемы с включением-отключением, то у ESP катастрофически мало пинов. А добавлять в схему минимум три микросхемы для сдвига регистра, имхо, обойдется дороже по деньгам и месту, чем один китайский Arduino.