Дисклеймер: Специально для тех 3х людей, что подписались, пишу серию постов про работу с микроконтроллерами. В частности мы будем рассматривать микроконтроллер ESP8266 на примере платы ESP12F. Прошу сразу заметить, я не супер специалист в программировании микроконтроллеров, но за последние пару лет немного в этом поднаторел и считаю что знаю достаточно, чтобы помочь въехать в тему и дальше в ней самостоятельно развиваться. Все ссылки в посте приведены как пример, чтобы понимать цену и как выглядит товар, вы можете найти все это самостоятельно если есть желание на любой другой площадке или другого продавца.
Итак.
Платка вставлена в макетку и поджата прищепкой. Далее подключаем к компьютеру через USB и выбираем COM порт. Самый простой способ определить правильный COM порт - это посмотреть какие порты доступны без подключения макетки к компу и после.
4ая строка с низу не активна, значит у меня нет активных COM портов. Подключаем макетку
Появился порт COM3 - это и есть нужный нам порт для заливки прошивки. Проверяем что все работает и пишем простенький код, для проверки работоспособности.
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Не забываем включить макетку, путем нажатия на белый переключатель и далее нажимаем на компе на стрелку вправо, что в верхнем левом углу.
Ждем завершения загрузки и смотрим на ESP12F, на ней должен начать мигать встроенный светодиод синего цвета раз в 1 секунду.
Если в результате у вас все получилось, мы можем переходить к следующей части с разбором кода и созданием умного реле. Спасибо за внимание.
Дисклеймер: Специально для тех 3х людей, что подписались, пишу серию постов про работу с микроконтроллерами. В частности мы будем рассматривать микроконтроллер ESP8266 на примере платы ESP12F. Прошу сразу заметить, я не супер специалист в программировании микроконтроллеров, но за последние пару лет немного в этом поднаторел и считаю что знаю достаточно, чтобы помочь въехать в тему и дальше в ней самостоятельно развиваться. Все ссылки в посте приведены как пример, чтобы понимать цену и как выглядит товар, вы можете найти все это самостоятельно если есть желание на любой другой площадке или другого продавца.
Начнем с вопроса - Сколько стоит, где купить и что необходимо чтобы начать вливаться.
1) Сама по себе платка ESP12F, я знаю что есть Wemos и он основан на этой же платке, только с ногами, но я специально буду рассматривать платку в отрыве от внешней обвязки. Хотя бы потому что так она занимает меньше места. Для меня это плюс. Ссылка на саму платку.
2) Макетная платка для программирования ESP12F. Без макетки тут "никак", на самом деле можно без нее, но тогда нужен будет UART конвертер и будут сложности чисто по части удобства. Ссылка на макетку. По ссылке есть так же макетки для платок на основе ESP32, но мы их рассматривать не будем.
3) Кабель microUSB-USB для подключения макетки к компьютеру, тут я думаю проблем не возникнет.
4) Модуль реле для Ардуины, нам он будет нужен только для примера работы (спойлер: сделаем свое умное реле с управлением через телеграм бот). Ссылка.
5) Блок питания на 5V DC(вольт постоянного тока), вольтаж такой же как в любом заряднике. Можете взять например старую USB зарядку от ненужного телефона, либо взять что то вроде того что по ссылке ниже. Питание самого микроконтроллера у нас 3.3V DC, но мы возьмем 5V DC, потому что нам нужно запитать модуль реле, а он 5 вольт. Ссылка.
6) AMS1117. Эта замечательная микрушка позволяет нам сделать из 5 вольт 3.3 вольта. Ссылка.
Так же мы можем добавить сюда батарею и модуль зарядки, но это уже как нибудь потом разберем.
Так же на компьютере нам нужно установить Arduino IDE. Да, я в курсе что есть PlatformIO, но для новичка Arduino IDE выглядит менее нагруженым и более понятным. Сама по себе программа бесплатна и качается с официального сайта. Ссылка
С установкой Arduino IDE проблем возникнуть не должно, она проста как 2 копейки. Перейдем сразу к настройкам. Первое что нам необходимо, это сделать доступными профили плат ESP. Переходим в настройки
В поле поиска "ESP8266", устанавливаем. В моем случае уже все готово, потому кнопки Install нет.
Закрываем это окно и теперь у нас доступны платы на базе ESP8266. В нашем случае нужно выбрать Generic ESP8266 Module
Из настроек нас интересует 2, Flash Size и Erase Flash. Выставляем как на скриншоте.
Далее перейдем к подключению. Сама по себе ESP12F вставляется в макетку с щелчком от подпружиненых ножек и должна в ней держаться, но у меня бывали случаи самовольного выщелкивания, потому стоит использовать "крабик". Лимит поста:(
Водонепроницаемый датчик температуры (терморезистор), использующийся во многих электроприборах для отображения температуры в диапазоне от -40°C до + 85°C, имеет провод длиной 50 см. Стоит такой 27 руб. с бесплатной доставкой. ссылка на источник
2) Oled-дисплей
Модуль с дисплеем 0,91 дюйма, OLED Разрешение: 128x32 пикселей , напряжение DC 3,3 ~ 5 В. стоит такой 104 рубля. ссылка
3) Разъем 9V
Разъем для батарейки типа Крона 9v со штекером. стоит такой около 25 руб. ссылка
4) Разъем Micro usb
Гнездовой разъем MICRO USB 5pin на плате. Стоит такой 22 руб.ссылка
5) Светодиод
Светодиод мощностью 10 Вт, 600mA 12V. Стоит где-то 23 рубля. ссылка
6) Адаптер для модулей Esp8266
Плата-адаптер для подключения модулей Esp8266 к таким шилдам, как Xbee Shield или ESP Base Shield. Стоит такая около 25 рублей. ссылка на источник
7) Понижающий модуль питания
Модуль для понижения напряжения с DC 5В до 3,3В. Стоит такой 27 руб.ссылка
8) Регулируемый силовой модуль
Плата для преобразования напряжения из 5 вольт в 24 вольта. Стоит 31 рубль с бесплатной доставкой. ссылка
Плата с корпусом для сборки. Аккумулятор 18650,5V 1A USB зарядка. Стоит такой набор около 100 руб. ссылка
15) Термостат
Модуль для контроля температуры. Стоит около 100 руб.ссылка на источник
16) Цифровой усилитель мощности
Плата усилителя TPA3110 XH-A232, 30 Вт + 30 Вт, 2,0 канала, постоянный ток 8-26v, 3 А. Стоит 100 руб. ссылка
17) Ультразвуковой модуль
Модуль HY-SRF05 с дальностью обнаружения: 3-4 м, угол в 30 градусов. Стоит 95 руб.ссылка
18) Модуль обнаружения металла
Текстолитовая плата с электронными компонентами модуля детектора металла. Стоит 82 рубля. ссылка
19) Модуль часов
Механизм с модулем кварцевых часов. Стоит набор 85 руб.ссылка
20) Индикатор заряда аккумулятора
Водонепроницаемый тестер для измерения заряда литий-ионного аккумулятора. Стоит 74 рубля. ссылка на источник
21) Модуль снижения оборотов кулера
2-USB регулятор напряжения понижающий 4-12 в 2.5-8 V для различных устройств. Стоит такой 71 рубль.ссылка
22) Звезда
Набор «сделай сам» для самостоятельной сборки и пайки на плату светящейся красной звезды. Питание 3-5 вольт. стоит такой набор 65 рублей с бесплатной доставкой. ссылка
23) ИК пульт
Инфракрасный беспроводной модуль дистанционного управления с приемником. стоит такой набор 79 рублей. ссылка
24) Инфракрасный датчик
Инфракрасный датчик для автоматического обнаружения объектов в диапазоне зондирования. Стоит такой модуль 53 рубля. ссылка
25) Модуль усилителя микрофона
Модуль основан на микросхеме-предусилителе MAX4466 и совмещает в себе операционный усилитель и минимальную обвязку для него, в электретном микрофоне. Стоит такой 66 рублей с бесплатной доставкой. Ссылка на источник.
Мне давно приглянулись накальные индикаторы ИВ-9 и ИВ-16 (то же, только чуть короче за счёт отсутствия десятичной точки), но в интернете крайне мало проектов на них, поэтому когда появилась возможность, я решил сделать свой. Вот что получилось:
Прежде чем заняться разработкой собственного проекта, я наткнулся на этот, показавшийся мне интересным: https://cxem.net/mc/mc490.php. Заказал 5 плат (немного изменив их под себя - проект частично открытый), собрал одну с индикаторами ИВ-16:
Получилось неплохо, но некоторые моменты мне не понравились. Во-первых, несмотря на наличие нескольких режимов (анимаций, эффектов) смены цифр, среди них не было моего любимого - плавной смены цифр с наложением их друг на друга. Во-вторых, мне не очень понравилось управление двумя кнопками, я предпочитаю делать три: "ок" для входа в меню и подтверждения, "+" и "-" для установки показаний. В-третьих, часы работают от 5В, а 3В для питания индикаторов микроконтроллер формирует методом ШИМ - это позволяет сэкономить на отдельном преобразователе, но есть мнение, что в случае какого-то сбоя, на лампы может пойти 5В, что выведет их из строя. Часто такое пишут в комментариях к часам nixie clock, где микроконтроллер формирует примерно +180В для них. Кроме того (и это уже не предположение, а факт, обнаруженный после сборки) , при подключении к сети на долю секунды на лампы идут эти самые 5 Вольт (видимо, пока микроконтроллер не дошёл до выполнения функции формирования ШИМ сигнала).
С учётом всего этого я решил разрабатывать собственную схему. За основу была взята схема из представленного выше проекта: Atmega328 в корпусе TQFP32 (в дальнейшем возможно применение микроконтроллеров с меньшим объёмом памяти, без загрузчика для отладки), DS3231M, 74HC595 и ULN2003. Я даже не стал рисовать собственную схему, а изменил имеющуюся в графическом редакторе:
Для питания индикаторов нужно 3 Вольта, для всего остального - пять. Я решил использовать блок питания на 5В, а напряжение для индикаторов получать с помощью отдельного импульсного понижающего преобразователя:
Схемы рисовал уже после сборки часов, так что в них могут быть какие-то мелкие ошибки. Преобразователь настроен на напряжение питания индикаторов, плюс падение напряжения на сдвиговых регистрах и транзисторных сборках. В случае, если в микроконтроллере произойдёт программный сбой, на лампы никак не попадут 5 Вольт. Да, возможен и выход из строя NCP1529, но его я считаю крайне маловероятным.
Платы получились вот такие:
На них предусмотрен разъём для подключения USB-Serial TTL конвертера для прошивки и возможности отладки, который позже можно убрать. Также предусмотрена возможность установки RTC в двух разных корпусах.
После пайки всех деталей и ламп получилось следующее:
Микроконтроллер и кварц я выпаял с платы Ардуино, так что загрузчик там уже был - не пришлось прошивать его отдельно через ISP. Подключил адаптер с СН340 и начал писать прошивку как для обычной платы Arduino nano. У меня на неё ушло несколько дней, результат очень порадовал:
В этом экземпляре лампы были установлены какие попало: первая - с другим углом наклона спиралей, четвёртая - тусклая. Позже был собран второй, дальше на фото и видео будет он.
Для корпуса была заказана вот такая заготовка из древесины бубинго:
Её хватило на 3 корпуса:
Получились они вот такими:
Оставалось только сделать отверстия для кнопок и шнура питания, а также для крепления платы и нижней крышки. Позже он был покрыт тунговым маслом:
И всё готово:
То ли из-за особенностей индикаторов, то ли из-за плохой камеры, я не смог сделать хорошие фотографии и видео. В реальности спирали светятся красивее.
При другом освещении:
И ещё. А также сравнение с часами на ИН-16:
И пара видео. Обычная смены цифр:
И плавная:
Календарь, будильник, термометр и прочее я посчитал лишним. Есть лишь два режима смены цифр (в первом - три уровня яркости).
Как известно, к Новому году всегда надо готовиться заранее. Вот и мне подумалось, что надо расчехлять паяльник и начинать делать праздничную иллюминацию в квартире. На данный момент готовы два устройства из трёх, для последней гирлянды едут адресные светодиоды. Но идея обкатана и показала себя вполне рабочей.
Этап первый. Теоретический.
Любое мало-мальски инженерное устройство должно начинаться с 1) Составления ТЗ 2) Подбора железа 3) Подбора ПО Второй третий пункт взаимосвязаны, что логично.
Итак, техническое задание.
У меня работали две гирлянды, собранные на WS2812b под управлением маленькой платки Arduino Nano (родом из Китая) с микроконтроллером ATmega328p. Как это водится в Китае - маркировка чипа была почти нечитаемой, прошивка заливалась раза с третьего-четвёртого. Но система работала, и даже не тормозила.
Гирлянд было две: одна висела на ёлке и состояла из 126 последовательно соединённых светодиода, оконная гирлянда состояла из 74 светодиодов и представляла собой 9 линий светодиодов переменной длины, соединённых последовательно.
В старой гирлянде было крайне неудобно включать/выключать подсветку и переключать режимы. Это же необходимо встать с дивана, подойти к устройству, нажать кнопку. Соответственно, в новой системе необходимо реализовать управление через мобильный телефон. Так же, стоит учесть, что в моём доме ёлка стоит около окна, и будет видно сразу две гирлянды. Соответственно, стоит предусмотреть возможность обмена данными между этими гирляндами для возможности синхронизации режимов. Причём, синхронизация должна быть не "приколоченной намертво", а вполне себе опциональной.
Подбор железа
Исходя из ТЗ становится очевидно, что достаточно просто поменять контроллер с старой-доброй атмеги на что-то из семейства ESP. Эта система на кристалле (да, именно так её называет производитель, SoC) из коробки имеет на борту достаточно шустрое ядро, WiFi и приличный объём памяти. Но, имеет место быть небольшой конфликт: рабочее напряжение пинов ESP 3.3В. А напряжение питания WS2812b составляет от 3.5 до 5.3В, исходя из даташита. Причём, "протокол" передачи данных для светодиодов подразумевает формирование прямоугольных испульсов, кодирующих 24 бита цвета для каждого светодиода. Уровень "0" в этой последовательности должен быть <0.3VDD (напряжение питания), уровень "1" >0.7VDD.
Я покопался в своих закромах и обнаружил две платы Wemos D1 mini (на базе ESP8266) и одну плату LOLIN S2 mini (на базе ESP32-S2). Обе платы имеют всю необходимую обвязку для подключения внешнего питания 5В и подтягивающие резисторы для запуска МК. Там же, в закромах родины нашёл весьма удобные макетные платы под форм-фактор этих устройств.
Макетная плата для Wemos D1. К LOLIN S2 mini тоже подходит, но маркировака пинов не совпадёт
Это снимает проблему согласования напряжения питания ESP и WS2812b. Но возникает опасение, что уровень логической "1" от контроллера будет недостаточным для формирования управляющего сигнала. Ведь, согласно даташиту, уровень "1" >0.7VDD. А питание светодиодов у нас 5В, соответственно, требуемый уровень логической единицы равен 0,7 * 5 = 3,5В. Тут я пошёл по пути экспериментов, быстренько набросал схемку на бредборде и проверил, а как оно, заведётся, или нет. Ведь, исходя из моего опыта общения с контроллерами семейства STM32, уровня 3.3В должно быть вполне достаточно. И оно завелось!
Подбор ПО
Очевидно, что прошивка будет самописная. Надеяться, что вот сейчас я зайду в гугл, забью "прошивка ESP8266 с моими требованиями" и все найдётся и заработает достаточно наивно. Да и неспортивно это. В случае с ESP есть два основных фреймворка для написания прошивки. Профессиональный ESP-IDF с его ориентированностью на чистый С и Arduino IDE с ядром ESP. Причём второе - это, по сути своей, обёртка вокруг ESP-IDF. Так как у меня была хоть и ущёрбная, но рабочая прошивка для Arduino Nano, написанная в Arduino IDE, я остановился на втором варианте.
Этап второй. Практическая реализация в железе.
Схема в общем виде выглядит так:
Ничего сложного и интересного. Единственное, для одной из систем одна из кнопок была заменена на устройство bme280, работающее по протоколу I2C. Интересно отслеживать влажность в помещении и уровень давления. Показания температуры врут безбожно: датчик находится слишком близко к ESP, которая имеет привычку сильно нагреваться. Спаять устройство по этой схеме не представляет ничего сложного. Но ведь хочется сделать всё красиво. А значит нужен корпус для устройства и система крепления гирлянды. С корпусом всё довольно просто. Минут 30 в Компас3D, час работы 3D принтера и в руках корпус, подогнанный под конкретное спаянное устройство. Магия термоклея, и на выходе получается вполне себе симпатичный прибор:
Безусловным плюсом будет возможность заменить плату в случае необходимости
С системой крепления всё чуточку интереснее. Если на ёлку крепить гирлянду не требуется (просто берём и обматываем гирлянду вокруг дерева), то на окно требуется крепёж. Тут возможно реализовать два варианта: установить гирлянду непосредственно перед окном, но за шторой. Тогда праздничное настроение будет создано людям, гуляющим на улице и смотрящим на мой седьмой этаж. Либо размещать гирлянду перед шторой. Тогда праздничное настроение будет у всех, находящихся в комнате. Я пошёл по второму пути. Штора крепится на гардину с Т-образными пазами. И вновь на помощь приходит компас и 3D-принтер. В каждой точке, из которой спускается светодиодная гирлянда была изготовлена вот такая сборка из двух деталей:
Бонусом, такая конструкция хорошо фиксирует сборки проводов, и конструкция получается довольно добротной. Следующей "железной" проблемой стало то, что провод со светодиодами достаточно лёгкий, и гирлянда отказывалась висеть вертикально. И вновь 3D принтер спасает положение. Я напечатал несколько тематических грузиков, и привязал их на тоненькие верёвочки. Получилось весьма достойно:
Этап третий. Программное обеспечение aka прошивка
А вот прошивку не скину в чистом виде. Только если кто-то хочет повторить - могу ему слить данное поделие. Ибо в коде есть ряд проблем, которые пока не решены.
Принцип работы системы прост до ужаса. Намертво зашиты константы с SSID/PASS моей локальной WiFi сети и IP адреса всех гирлянд, участвующих во взаимодействии. Arduino IDE хорош, в первую очередь, невероятным количеством библиотек. Итак, что есть сейчас, и для чего используется.
Разумеется, WiFi, для подключения к локальной сети. SSID и пароль забиты в дефайны, что есть хардкод, и вообще моветон
FastLED для управления WS2812b. Реализован простейший алгоритм отслеживания потребляемого гирляндой тока и ограничение оного к возможностям источника питания. Работает, на мой взгляд, лучше встроенного в библиотеку.
WebServer для поднятия странички управления гирляндой, если сильно лень подходить и нажимать кнопку. Я не сильно дизайнер, но страничка получилась довольно простой и информативной.
UDP для общения между гирляндами. Да, я знаю, что есть ненулевой шанс потери данных, поэтому пришлось реализовать достаточно простой алгоритм проверки корректности пришедших данных. Битые пакеты отбрасываются. Вроде бы это не очень хорошо, но я тут не космический корабль запускаю, и не ядерным реактором управляю. Если синхронизация произойдёт на 100мс позже, то ничего страшного. Хардкод в данном случае - IP-адреса гирлянд, участвующих в обмене информацией, жестко прописанные в роутере.
ArduinoOTA. Лень каждый раз подключать ESP напрямую к компу, когда хочется что-то поменять в прошивке. А так всё выходит просто: обновились по воздуху, и радуемся.
Web-страничка для управления гирляндой
В качестве гирлянды-мастера выбрана ёлочная. На её страничке можно поставить галочку с требованиями синхронизации остальных гирлянд, и её режим будет транслироваться всем остальным.
Примеры гирлянды, которую мне лень снимать сейчас :)
Примеры гирлянды, которую мне лень снимать сейчас :)
Примеры гирлянды, которую мне лень снимать сейчас :)
В сухом остатке получилось несколько устройств, на которые не стыдно посмотреть, которые не стыдно показать и которые работают и радуют глаз. Возможно, когда разберусь с текущими проектами - вернусь к доработке гирлянд. Избавиться от хардкода, что не очень сложно и чуть улучшить синхронизацию (заставить гирлянду-мастера передавать не только свой текущий режим, но и конкретный тик из millis() для более эффектного внешнего вида) и всё, пожалуй. Сделать полноценное Android-приложение, управляющее гирляндами. Возможно, имеет смысл сделать отдельный сервер на полновесной ESP32, который собирал бы данные с гирлянд, и синхронизировал их при необходимости. Но это уже вопрос полноценного самописного умного дома, т.к. к такому серверу можно подключить любое устройство на базе ESP. Для работы с MQTT так же есть полноценные библиотеки. В общем, проект получился достаточно простым, но интересным с точки зрения возможности масштабирования.
На этом всё, спасибо, что дочитали. Ссылок на телегу не будет, это всё от лукавого :)
День добрый, появилась идея создать какой-то "народный" вариант стримдека, так, чтобы его можно было использовать не только на стримах, но и в играх, разных прогах, в повседневной жизни в общем (каждую клавишу и крутилку можно будет биндить)
концепт
форм-фактор:
на самой клавиатуре (хоть и очень маленькой) будет 5 механических клавиш, я думаю взять красные свитчи и сами кейкапы печатать на принтере или взять из какой-нибудь не дорогой клавы-донора. помимо клавиш будет 2 крутилки, для регулировки звука/отдельных источников звука (в идеале)
я почти ничего не знаю про ардуино (смотрел раньше алекса гавера X) ), но готов разбираться и узнавать новое.
я бы хотел узнать у вас несколько вещей:
Ваше мнение на счет концепта? Нужно ли такое хоть кому-то, если это будет стоить кратно меньше вышеупомянутого streamdeck'a?
Нужно ли менять форм-фактор? Мне не очень нравится то, как концепт выглядит сейчас, я думаю, можно сделать 2 ряда клавиш вместо 1, и тогда вместо 1/5 будет 2/2 (4 клавиши) или 2/3 клавиш (6 клавиш), в общем, интересно ваше мнение.
Как реализовать главную фишку этой клавиатуры - бинды? Нужно писать отдельную прогу? Или ограничиться инструкцией и опенсурс программами для биндов в этой инструкции?
Можно ли ограничиться проводной распайкой? тут всего 7 элементов управления, а возиться с текстолитом будет дорого или муторно, поэтому, я прикинул, что чуть увеличив корпус можно будет все уложить.
Какой контроллер взять? Задумка клавиатуры - максимальный профит и достойное качество за приемлемые деньги, а значит и контроллер хочется взять максимально подходящий по требованиям.
Прошу отнестись не сильно строго к моей идее, я открыт к здравой критике и любым предложениям, заранее спасибо :)