Недавно я изготовил на заказ очередную партию вот таких часов:
Несколько экземпляров отправил заказчику, один остался у меня. И пользуясь случаем я решил попробовать найти ответ на вопрос, который задают многие из покупателей этой модели: как долго они работают от одного заряда.
В описании к оригинальному проекту автор сделал следующий вывод: с аккумулятором размерами 5*12*40 мм и заявленной ёмкостью 250 мАч, с прошивкой без анимации перед показом часов и минут в непрерывном тесте аккумулятор разрядится до 3,5 за 7800 секунд. На показ времени требуется 2 секунды, из чего автор прогнозирует 3900 включений.
В своих же часах я использую другую прошивку, в которой перед показом часов и минут в обеих лампах быстро перебираются все цифры, поэтому я предполагаю, что на один показ времени они расходуют чуть больше энергии. Также я использую токоограничительные анодные резисторы меньшего номинала, чтобы цифры светились лучше, а вместо светодиодов для индикации часов и минут использую точки в лампах.
Исходные данные: аккумулятор размерами 5*12*40 мм с заявленной ёмкостью 200 мАч, полностью заряжен. Я сделал следующее: к ножкам кнопки в часах подпаял плату Ардуино, которая имитировала нажатие на кнопку раз в 3 секунды, вела счёт нажатий и выводила счётчик на экран ноутбука. Дополнительная секунда здесь - чтобы после окончания показа времени часы вернулись в режим покоя, а высоковольтный конденсатор - разрядился. Этот интервал правильнее было бы ещё увеличить, но тогда тест занял бы ещё больше времени. Также к ноутбуку я подключил USB-эндоскоп, который снимал часы и выводил изображение на экран. А специальное приложение занималось съёмкой экрана. Таким образом я хотел получить видео, которое было бы неоспоримым подтверждением количества включений часов. Выглядело это всё вот так:
А дальше всё пошло не по плану. Автономность часов оказалась на очень высоком уровне, весь процесс занял у меня два часа. И занял бы больше, если бы не следующее: я недостаточно зарядил ноутбук, а порт для зарядки оказался занят эндоскопом, так что тест пришлось прервать на красивом числе - 2222.
После этого выяснилось, что я неправильно настроил программу для записи экрана: два часа видео объёмом более 1 гигабайта она записала, вот только это получилась скорее склейка из скриншотов экрана с интервалом в полсекунды - смотреть невозможно.
Я хотел оставить примерно по минуте в начале и в конце, а всё остальное сильно ускорить, чтобы получить короткий ролик, но не смог этого сделать, так что от этой затеи отказался.
И вот почему: тем, кто поверит в достоверность данных, видео не нужно, а тех, кто не поверит, видео не убедит. К тому же, в таком виде его очень просто можно назвать подделкой.
Итак, вернёмся к результатам теста. После 2222 включений часы показали уровень заряда 26%. Напряжение на аккумуляторе я при этом измерить забыл. В данной схеме стабильность работы повышающего преобразователя (в том числе "качество" свечения цифр) во многом зависит от применяемых электронных компонентов, поэтому вполне возможно, что лампы перестали бы нормально светиться при уровне заряда 25/10/5 процентов. А в другом экземпляре на этих же компонентах, но с другими лампами - при 2%. Это всё можно определять только более корректными тестами каждого экземпляра, чего никто скорее всего делать не будет. Это я всё к следующему: в режиме ожидания часы потребляют очень малый ток, но ведь есть ещё и саморазряд аккумулятора, благодаря чему я могу с уверенность сказать, что при включении часов раз в час они не смогут показать результат в 2000 включений от одного заряда.
Вместо вывода: данный тест, даже неоконченный, - и бессмысленный и полезный одновременно. Не стоит рассчитывать на полученный здесь результат (за исключением случая, где владелец будет зачем-то два часа подряд нажимать на кнопку), но и беспокоиться о том, что часы нужно будет заряжать каждый день - тоже. Вне зависимости от частоты использования одного заряда будет хватать надолго.
Как известно, к Новому году всегда надо готовиться заранее. Вот и мне подумалось, что надо расчехлять паяльник и начинать делать праздничную иллюминацию в квартире. На данный момент готовы два устройства из трёх, для последней гирлянды едут адресные светодиоды. Но идея обкатана и показала себя вполне рабочей.
Этап первый. Теоретический.
Любое мало-мальски инженерное устройство должно начинаться с 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 так же есть полноценные библиотеки. В общем, проект получился достаточно простым, но интересным с точки зрения возможности масштабирования.
На этом всё, спасибо, что дочитали. Ссылок на телегу не будет, это всё от лукавого :)
Прошло уже более полугода с момента начала работы над часами на ИВ-9 или ИВ-16 (Часы на ИВ-9 - видео работы), и вот наконец они закончены.
Получилось как-то так:
Есть и режим, при котором цифры меняются не плавно, а резко:
К сожалению, моя камера плохо передаёт реальный цвет нитей, поэтому пришлось приглушить свет, чтобы на картинке цифры выглядели более похожими на реальные.
В скором времени постараюсь написать пост об их сборке, в котором будет чуть больше подробностей. Для вопросов, на которые я не могу ответить здесь, почта - matvey6191@gmail.com
Набор для сборки и программирования робота на Arduino SG90, с помощью кнопок и джойстика можно моргать и шевелить глазами. Стоит такой набор около 6000 руб. без учета доставки. ссылочка на источник.
2) Игровая приставка
Набор Arduino для самостоятельной сборки игровой приставки с игрой «Змейка», идет с простой в программировании платой Nano ATmega328P. Стоит такой набор около 1 900 руб. без учета стоимости доставки. Ссылка на источник
3) Робот-художник
Комплект для сборки и программирования на Ардуино робота, который хорошо рисует. Вам потребуется найти лист фанеры или доски, чтобы собрать робота, где бы он мог рисовать. Стоит такой где-то 3900 руб. ссылка
4) Робот-сортировщик
Набор "сделай сам" для сборки робота, умеющего сортировать шайбочки по цветам. Стоит такой около 2900 руб. ссылка
5) Робот-рука
Робот с клешней, умеющий брать и перемещать предметы. Стоит такой примерно 2900 руб. ссылка на источник
6) Умное мусорное ведро
Набор для создания автоматического робота-мусорного ведра, который сам откроется и закроется, если вам нужно что-то выбросить =). Стоит такой около 3300 руб. ссылка
7) Пирометр
Набор для самостоятельной сборки на Arduino бесконтактного устройства для измерения температуры. Температура измерения среды -40... + 125 ° C и -70... + 380 ° C для измерения температуры объекта. Стоит такой около 4000 руб.ссылка
8) Электронные весы
Электронные весы с открытым исходным кодом для Arduino Nodemcu ESP8266 HX711 AD. Стоят такие около 3300 руб.ссылка
9) Машинка
Робот-автомобиль 4WD для Arduino UNO R3 Smart Project STEM с ультразвуковым трекером для обхода препятствий. Стоит такой около 4000 руб. ссылка
10) Кошка
набор для сборки роботизированной кошки, которая умеет ходить, приседать и тд. Стоит такая 7000 руб. ссылка на источник
11) Рисовальщик
Набор для сборки механизированного робота, который нарисует что угодно, только дайте ему ручку. Стоит такой около 4500 руб.ссылка
12) Джойстик
Набор для сборки манипулятора (джойстика) для управления и игр. Стоит такой около 1000 руб.ссылка
13) Игровой автомат
Плата с дисплеем для сборки игровой приставки с игрой, где вам нужно нажимать кнопку, чтобы подниматься или опускаться и не врезаться в столбы. Стоит такой набор 990 руб. ссылка
14) Метеостанция
Набор для Arduino для создания измерителя температуры и влажности, вместо стрелок и индикаторов - деревянная шестеренка с цифрами, автоматически вращающиеся. Стоит такая станция около 3500 руб. ссылка
15) Программируемый Mecanum
Стартовый комплект умного робота-автомобиля с дистанционным управлением и необычными, уникальными колесами. Стоит такой 5500 руб.ссылка на источник
16) Роботизированная рука-повторитель
Роботизированная рука, которая умеет повторять за вами. Стоит такая рука около 6500 руб.ссылка
17) Сортировщик мячиков
Робот-сортировщик, умеет сортировать мячики нескольких цветов. Стоит такой около 4500 руб. ссылка
18) Погрузчик
Гусеничный погрузчик для сборки с дистанционным управлением по WI-FI для Arduino Diy Kit ESP8266 проект Nodemcu STEM. Стоит такой 3600 руб. ссылка
19) Паучок
Комплект для сборки робота-паука на Arduino с управлением через wi-fi. стоит такой около 3900 руб.ссылка
20) Робот-кубик
Набор для сборки и программирования забавного робота с голосовым управлением для Arduino. Стоит такой примерно 4500 рублей. Ссылка на источник