Микроконтроллеры ATtiny13 широко используются во всяких фонариках и простых DIY поделках благодаря своей распространенности и дешевизне, но мало кто пытается использовать их для более продвинутых вещей. Большинство уверено, что 1024 байта памяти достаточно только для простейших таймеров или мигания 1-2 светодиодами. Я решил доказать обратное и впихнул практически невпихуемое: на 920 байтах прошивки у меня уместился полнофункциональный RGBW модуль с ИК управлением и кучей режимов работы
Дисклеймер
IRL я ни разу не С/C++ программист, и прошивка мною разрабатывалась не красоты ради, а функциональности для. Борьба в ней шла за каждый байт путем проб и ошибок с использованием странных, неочевидных и вовсе запрещенных приемов, поэтому код может выглядеть безумно, но это все было сделано с одной целью: вместить как можно больше фич в как можно меньше памяти.
Исходники
Все исходники размещены
у меня на GitHub, в разделе
firmware вы найдете исходники прошивки, в разделе
hardware — пример платы, нарисованной в EAGLE, и список требуемых компонентов. Исходники распространяются под лицензией
CC BY-NC-SA. Те, кто будет собирать прошивку самостоятельно, не забудьте включить флаг оптимизации по размеру
-Os в компиляторе, иначе она не влезет в МК.
Описание возможностей
- 4-канальный программный ШИМ (частота > 2кГц, видимого на глаз мерцания нет)
- Поддержка 24-кнопочного ИК пульта (NEC протокол)
- 16 статичных цветов + 4 эффекта мигалок
- Регулировка яркости (у статичных цветов) и скорости (у мигалок)
- Включение/выключение с пульта
- Дальность действия пульта 5-10 метров и более (зависит от ИК приемника и условий его размещения)
- Потребление в выключенном состоянии ≈ 1мА (зависит от ИК приемников и их количества, сам МК в спящем режиме потребляет микроамперы)
- Питание от 3В до 6В
- Стабилизация яркости белых светодиодов (в моей реализации платы)
- Размер прошивки: 920 байт (есть версия на 860 байт, у которой менее точное представление цветов)
- Размер платы: 39.4x39.4
При подаче питания модуль включается в режиме белого при 100% яркости, энергонезависимой памяти последнего режима нет, возможно в будущем добавлю. Поведение при подаче питания можно поменять на нужное в файле
lib/common.h. При включении/отключении с пульта последний режим запоминается (если опять же за время сна питание не обрывалось).
Схема и плата
Готовые gerber файлы платы лежат в архиве
project_2020-10-19.zip.
Схема:
Изготовление плат я заказал в JLCPCB, 5 штук обошлись мне $8 с доставкой и приехали за 2 недели с момента заказа
Компоненты паял сам, итоговая цена с учетом компонентов вышла примерно в $15 за 5 плат. Итоговый вид:
Прошивку я заливаю прямо на месте с помощью прошитого под программатор Arduino Nano 3.0 с клипсой:
Белые светодиоды включены через линейный стабилизатор AMC7135 на 350мА, поэтому при питании от аккумулятора или 3х батареек их яркость стабильна на протяжении почти всего времени работы и примерно равна 150 люменам (зависит от светодиодов). Светодиоды я использовал самые дешевые:
теплые 5730 и
5050 RGB с общим анодом. Последние перед пайкой необходимо тщательно проверять, потому что в них очень много брака.
Потребляемые модулем токи при питании от 5В и работе в режиме максимальной яркости:
- 360мА — белый
- 70мА — красный
- 63мА — зеленый
- 62мА — синий
Ни в одном режиме работы светодиоды не греются. В режиме минимальной яркости модуль потребляет от 20мА (белый) до 3-4 (RGB). В выключенном потребление около 1мА, и львиная доля этого расхода лежит на ИК приемнике, сам МК спит и толком ничего не потребляет. Это стоит учитывать при питании модуля от аккумуляторов или батарей.
Пульт и режимы
Управляется модуль с помощью 24-кнопочного пульта
Magic Lighting
Я понятия не имею, имеют ли все эти пульты одинаковые коды команд, но в купленных мною нескольких экземплярах они идентичны.
Но всегда остается вероятность, что в новой партии пультов или у другого продавца коды будут другими. При таком сценарии можно с помощью той же ардуины и ИК приемника получить коды неизвестного пульта и заменить их в файле
lib/common.h.
Кнопки пульта условно разделены на несколько зон:
С помощью 16 кнопок можно выбрать и включить какой-либо определенный статичный цвет, в данном режиме кнопки регулировки в левом углу пульта позволяют менять яркость свечения (5 уровней).
В правой части пульта расположены 4 кнопки спецэффектов:
- FLASH — последовательно ступенчато переключаются 15 цветов (все, кроме белого)
- STROBE — стробоскоп выбранным ранее статичным цветом
- FADE — плавное мигание выбранным статичным цветом
- SMOOTH — плавное перетекание по всему RGB спектру
В режиме спецэффекта кнопки регулировки отвечают за скорость воспроизведения эффекта.
Модификация кемпингового фонаря Quechua BL40
Фонарик этот
продается в Декатлоне, вероятно у очень многих есть такой же. Сейчас цены на него не очень гуманные, но я их покупал давным-давно рублей по 300
Своим я уже ранее делал небольшой апгрейд, вкорячив скрытый выключатель для долговременного хранения (потому что кнопка самого фонаря реализована на полевике и расходует батарейки даже в выключенном режиме):
Так же я добавил еще 2 светодиода и уменьшил токоограничительный резистор, увеличив тем самым яркость примерно в 2 раза:
Но тем не менее, это не решало проблему просадки яркости по мере разряда батареек. Мой RGBW модуль не только решает эту проблему, но еще и добавляет свистоперделок в лице спецэффектов, разных цветов свечения и управления с пульта. Чтобы установить модуль, в первую очередь сдуваем родной светодиод и ограничительный резистор:
Вместо ограничительного резистора впаиваем диод Шоттки на (в моем случае SS54), к нему и к общему "-" подпаиваем наш модуль:
Сам модуль я сначала зафиксировал с помощью термоклея, затем приклеил обычным клеем:
На фотографии видно перемычку — не обращайте на нее внимание, это исправление косяка по питанию МК, который я допустил в первой версии платы. На гитхабе лежит уже исправленный вариант. Так же тут вы могли заметить два ИК приемника VS1838B, подключенных параллельно и повернутых под углом относительно друг друга. После первой сборки я столкнулся с проблемой ослепления приемника при работе белых светодиодов: при расположении приемника на плате дальность действия пульта резко падала при включении белого цвета до 1-2х метров. Изначально я пытался исправить это с помощью дополнительного приемника, в результате удалось увеличить дальность уверенного приема до 3-4 метров. В конце концов я купил более продвинутый приемник TSOP4838 и вынес его в пустую полость под кнопкой, вырезав окошко в пластике:
При таком размещении приемник вообще не контактирует с излучением светодиодов, дальность работы пульта увеличилась минимум до 8 метров, причем светить пультом именно в приемник вовсе не обязательно: ему хватает даже отраженного от стен сигнала, так что в условиях помещения/палатки область обзора датчика увеличилась до всех 360 градусов.
Модифицированный фонарик светит очень ярко, с изначальным заводским вариантом просто не сравнить. Одного фонаря, подвешенного к потолку в центре комнаты, достаточно для комфортного пребывания в ней. Яркость белого света стабильна во времени, начинает падать при разряде батарей примерно до 3.4В. По понятным причинам испытать в походе пока не удалось, но фича управления с пульта уже кажется мне очень удобной, причем при наличии в телефоне ИК-порта коды кнопок можно заранее скопировать и не таскать сам пульт с собой. Так как модуль при подаче питания сразу включается в режиме белого на максимальной яркости, поведение фонаря без пульта вообще не изменилось: с помощью родной физической кнопки его можно, как и ранее, включать и выключать. При отключении с помощью пульта главное помнить, что фонарь по факту не выключен, а находится в режиме сна, и ИК датчик потребляет ток. Пару ночей в таком режиме сна не потратят хоть сколько-нибудь заметного количества заряда батареек, но если забыть отключить фонарь физической кнопкой и убрать на длительное хранение — батарейки со временем будут высосаны в ноль (примерно через 3-4 месяца) и могут протечь. Благо из-за отсутствия у модуля энергонезависимой памяти последнего режима, для полного отключения фонаря достаточно просто включить и выключить его физической кнопкой, и после этого можно смело кидать на полку, не боясь за батарейки.
Напоследок, примеры спецэффектов
Flash:
Smooth:
Strobe
Fade:
Тут кажется нечего добавить.
p.s. Но сама работа заслуживает аплодисментов!
ПЫСЫ работа автора заслуживает аплодисментов, но смысл тоже не понят
На схеме не совсем понятно, как подключены белые светодиоды. Для них используется линейный стабилизатор?
получить коды неизвестного пульта
может не в тему, можно ли прописать команды пульта от телевизора IR ?
UPD если речь про тот модуль, что на фотке, то скорее всего нельзя, я про свой имел ввиду)
если нужно рулить небольшой нагрузкой, то можно использовать схемы WS2811 (китайцы даже как-то на них мощные диоды лепят, типа так ) но там уже управление током.
а чтобы на выходе был ШИМ — использовать ws2801 / P9813
Но вот действительно, зачем?
Надо «кнопку» копать.
Гм. А зачем надо отключать всю схему?
— А как с ОТГ?
Ну это работает для atmel, esp питание 3.3, действительно лучше купить USB-TTL UART, подойдет как для ардуино про так и для esp
3 цветная индикация заряда(красный, зелёный, синий), зарядка usb power Delivery, просто зарядка от свинцового аккума, версия с lto чтоб не замёрзла, магнит чтоб на капот удобно крепился, цвет 3500к.
Не хватает еще уровня заряда батареи или хотя бы отключения ярких режимов при низком заряде. К сожалению, 13-я тинька не мерит напряжение VCC. Ну и аппаратную кнопку включения добавить. Может быть с запоминанием последнего режима.
По поводу пиксельных диодов — есть RGBW диоды 5050 типа SK6812, совместимые по протоколу WS2812. Есть библиотека для тинек, но та как адресные диоды требуют от контроллера буфер памяти, тинька 13 потянет только штук 10.
все сильно зависит от самой структуры кода, но обычно размер уменьшается. допустим из былых 900 байт до 700.
точно уже не могу вспомнить какие, но нашлись вот эти -mtiny-stack -mcall-prologues
к сожалению в репозитории вместо makefile-а какая-то xml портянка, поэтому сложно сходу понять какие там опции еще были использованы кроме -Os
Есть у меня старая искуственная елка, ветки которой через «оптику» светятся.
Светятся они нехитрым методом: в основанни моторчик крутит пластину с цветами, а через нее просвечивает обычная галогенная лампа.
Была у меня идея сделать все на 12В и с синим зубом. Но готовых решений не нашел, а проектировать настолько не умею. Так и отложена уже год как эта идея на доосмысливание.
А решение вот оно, простое и элегантное. Для моих задач требует доработки, но пинок шикарный.
Спасибо, автор, ты как раз вовремя. Аплодирую стоя!
Код написан на С… *Ассемблер понурил голову и обижено уходит… ну да ну да, пошел я на...*))
Не в обиду автору, просто шутка)
или опять же семейство TLC5490/TLC5497
А я имею ввиду контроллер обычных светодиодов/лент.
в FastLED перечислены типы микросхем, которые уже управляют светодиодами, по их названиям проще искать
TM1829
TM1812
TM1809
TM1804
TM1803
UCS1903
UCS1903B
UCS1904
UCS2903
WS2812
WS2852
WS2812B
GS1903
SK6812
SK6822
APA106
PL9823
SK6822
WS2811
WS2813
APA104
GE8822
GW6205
LPD1886
LPD6803
LPD8806
WS2801
WS2803
SM16716
P9813
APA102
SK9822
Умеет все то же самое что светило из обзора.Малость помощнее будет.
Купить и не выделываться.
ЗАЧЕМ КОЗЕ БАЯН?
ссылка(скидки пару раз в месяц)
Пы сы. Кстати пульт от него подходит к приставке t2 Strong.есть кнопки переключающие каналы,
громкость и вкл-выкл(а что еще надо?)Если целиться в приставку управляем ТV, если в лампу,
то освещением.У кого такая приставка и похожий пульт — попробуйте, очень удобно.