Comments 114
Возможно несколько забегаю вперёд (а может это те вопросы, на которые вы ответите в последущих частях) но,
1. каковы габариты получившихся часов?
2. сколько электроэнергии они потребляют?
Не понятно из этой части зачем в данном случае используются датчики температуры, освещённости и модуль bluetooth. Можете рассказать?
зачем в данном случае используются датчики температуры, освещённости и модуль bluetooth
Повангую:
- показывать температуру и влажность (типа метеостанция)
- адаптировать яркость свечения светодиодов к окружающей обстановке
- для упрощения настройки, вместо кнопок
Мои габариты примерно 30×80 см (одна цифра — как лист А4).
При желании, размер можно менять (только с кодом (поколдовать) придётся.
Датчик температуры — чтобы часы показывали температуру, bluetooth — удобно управлять (время корректировать, отладочную информацию смотреть). Можно обойтись без них))
Про потребление энергии — не совсем понял вопрос… Питание от БП 5 Вольт/2 Ампера, если в кВт•Ч, то не замерял))
Я включал все диоды разом, в том числе на полную яркость (не белым цветом) — всё ок.
Ограничение потребления при желании сделать можно. Вопрос — зачем? Проект устроен таким образом, что это попросту не требуется. В конце концов, это часы, а не фонарь.
Понятно, что для часов не будет большой нагрузки, особенно если все диоды не включать на полную мощность, но ньюанс этот учесть надо и убедится что ничего не сгорит вдруг. Сегодня это часы, завтра попытаешься отобразить что-то ещё в результате чего включатся все сегменты на полную яркость(днём) и блок питания проработает не больше 15 минут испустив волшебный дым… т.к. окажется что там не 2А а 3А потребление, а блок питания на самом деле рассчитан на 1.5А макс. Встречал я такой треш, на блоке написано 5В 1.0А, а на выходе на выпрямлении без палева стоит диод 1N4148… подумаешь, цифрь на наклейке местами перепутали, должно быть написано 5А 0.1А
Интересно, а как с ШИМ бороться собираетесь? Для спальни они не пойдут. У меня елочная гирлянда на них 3x50шт + arduino. Так вот ШИМ лезет и сильно заметно, глаза быстро устают, особенно при изменении яркости и если в комнате темно.
К сожалению частота ограничена и связана с длинной ленты. А на коротких отрезках — да, можно чуть быстрее ШИМ выставить. Но все равно не исправляет проблему затемнения для спальни.
ШИМ в WS2812B не регулируется и не зависит от длинны ленты, скорости передачи данных или частоты обновления. И бороться с ним можно только одним способом — выставляя полную яркость, т.е. сводя duty cycle к 100%.
Спасибо не знал, просто ШИМ визуальнее заметен на более длинной ленте. А про яркость, там ещё она меняется — когда смешение цвета идёт (сами кристаллы с разной яркостью горят).
Я когда делал свою снежинку/гирлянду делал частоту обновления порядка 100Гц и все зажигания/потухания сделал плавными. Визуально очень хорошо смотрится.
А питаете вы эту ленту чем?
Да, у WS2815 повыше будет, но цена...
На этих светодиодах сильно заметно изменение яркости, даже на единицу, при малых её значениях, где-то меньше 100. На больших значениях изменение проходит незаметно. Столкнулся с этим делая себе ночник с автокорректировкой яркости по освещённости, решил не загонять светодиоды в маленькую яркость, а некоторые выключать, а остальные выводить на один канал, что бы снизить общий поток.
Странно, у меня тоже гирлянда из адресных светодиодов, и ещё на окно приклеено 10м ленты, и не замечал негативного влияния на глаза.
Какой ШИМ?!
Вы о чем вообще?
Это адресная лента, ШИМом в ней управляет чип в диоде и изменить его нельзя. При этом на глаз он абсолютно не заметен, так как частота его достаточно большая.
Мерцание поделок на готовых библиотеках связано с тем, что обновление массива диодов в библиотеке либо неправильно реализовано, либо выставлено на минимум по-умолчанию (для освобождения CPU), а мамкины инженеры в код даже не смотрели и комментарии там не читали.
Кроме того, если длина ленты большая — то нужно подключать питание в промежуточных точках, иначе будет падать яркость и цветовая температура.
И из-за этого может казаться что при плавных переходах лента мерцает.
Если смотреть на эти ws2812 строго прямо, то они действительно выглядят норм. Но стоит поводить глазами, и все смешанные цвета и преливы рассыпаются на 7-цветные пунктиры. Попадание таких штук в переферийное зрение ужасно бесит.
Именно потому нельзя делать на их базе движущиеся индикаторы (дисплей на маятнике, пиксельные вентиляторы и тд).
"я вижу «пунктирный след» из мышек, когда ей вожу"
Просто потому что частота обновления курсора в разы ниже частоты обновления монитора.
С ЖК монитором другая ситуация — там частота обновления, а не частота отображения. В старых ЭЛТ мониторах люминофор имел послесвечение которое и сглаживало мерцание. Но когда пошли мониторы 100 Гц, то послесвечение люминофора уменьшили, что бы картинка могла обновляться с частотой 100 Гц и на стандартных 60 Гц такие мониторы очень заметно мерцали если попадали в область периферического зрения(потому что она заточена на определение движения).
В ситуации с монитором и низкой частотой обновления, условные проблемы связаны с тем, что изображение успевает сместиться на достаточное расстояние, чтобы картинка получила ощутимый стробоскопический эффект.
Возьмите два светодиода с одинаковой яркостью: один светится постоянно, другой с 10% коэффициентом заполнения и частотой ШИМ 200 Гц. А потом в темноте включите и проведите взглядом — тогда поймёте о чём речь.
Шим незаметен (даже на камеру телефона), но в спальню не подошли по другой причине: даже при минимальной яркости в небольшом помещении работают как ночник.
Повесил на работе — там вписались очень органично.
У меня светомузыка Гайвера, последовательно 100 светодиодов. Ночью используется в качестве ночника на 5%. ШИМ не заметен совсем, ни глазом, ни камерой смартфона. В комментариях у Алекса с обсуждением библиотек я где-то видел по поводу частоты обновления, так как у комментатора были проблемы с плавностью.
Всегда удивляло-почему этот вариант отображения цифр для часов так круто выглядит? Причём как в светодиодном, так и в ЖК варианте для наручных часов. Ностальгия?
Имхо не лучший выбор. Если уж припёрло делать такое руками, то световод + рассеиватель и по одному обычному диоду каждого цвета на сегмент. Экономичнее, не требует ШИМ при минимальной обвязке. Цвет любой. Яркость на ограничителе тока по датчику освещенности (фоторезистор) и/или календарю. Для руления большим числом диодов требуется сдвиговый регистр для часов (тыщщи имс на алишке). Занимает три-четыре пина дуины при значительной экономии электричества и памяти.
Проект, конечно, интересный для разминки погромиста, но это из разряда "мама, сматли фто я сделаль!" — сто пятый способ помигать диодом.
Сходил попил водички, подумалось:
Можно ещё проще. По одному адресному в световом канале (один сегмент и один диод), программно яркость 255, на отдельный пин точно такой же ШИМ по яркости с нагрузкой на rc-цепочку. Цепочка по заполнению даёт падение напряжения строго определённого (расчёт простой), с него напряжение снимается на затвор полевика с малым трешолдом и усиливает по току до соответствующего значения. Далее подтягиваем напругу до опорных 5 вольт и получаем регулятор тока на шим-сигнале. Итог — сверхмалые потребление тока при аналогичном визуале. Ну и меньше матана, так как число диодов равно числу сегментов при любом масштабе.
Сверхмалые потребления тока — это не про гигантский светодиодный индикатор в любом случае.
А для диодов разве норм током яркостью рулить?
Я вроде читал, что у них очень нелинейная зависимость яркости от тока (+довольно узкий диапазон рабочих токов), и им такое не очень полезно.
И еще тут подумалось, что адресные вообще заведутся ли, там же контроллер на каждом диоде.
Нелинейность есть, но не так что бы — ужас-ужас.
А диапазон — нормальный, даже если не рассматривать разгон, примерно 40 — 120% — легко.
С адрусуемыми — теже сомнения.
Это легко решается табличной конвертацией перед выводом по предварительно просчитанным значениям. Там, кстати, ещё ньюанс связанный с ШИМ-мом и особенностями челочеческого зрения — яркость шимированного светодиода для глаза так же вносит свою нелинейность и в целом кажется ярче чем при аналогичном среднем токе, но на малых яркостях — провал.
На малых яркостях малину портит динамический диапазон, контраст становится меньше. на 16 единицах получить качественные полутона сложнее чем на 255. А это яркость ленты всего в 16 раз меньше от максимальной.
С нелинейностью восприятия яркости я уже сталкивался, правда на обычной белой ленте. Если памяти достаточно — то можно хранить заранее посчитанные таблички, если нет — то вычислять по необходимости.
Считать на лету всегда плохой вариант. Таблица занимает 256 байт. В какой-то из статей нашел методику рассчета коэфициентов чтобы экспонента прошла через две заданные точки.
вид функции Y(x) =Cexp(Bx)
точка начала — x1, y1 конец x2, y2. я задался точками 0,1 и 255,256.
B=log(y1/y2) /(x1-x2) =0.021745794
C=exp(log(y1)-B*x1)=1
осталось прогнать функцию Y(x) для x =0..255 и записать результат в таблицу учитывая смещение результата на 1(диапазон 1...256).
Таблица может быть и больше (больше точек, больше каналов управления с разными лентами).
Насчет расчета на лету — вариант не самый плохой. Мы же не постоянно считаем, а только при изменении значения. Еще, кстати, встречал где-то очень очень упрощенный и приближенный (и быстрый) вариант расчета экспоненты.
Да понятно что таблица быстрее. Но я уже писал, что не всегда их можно/оптимально использовать.
Светодиоды имеют одну природу, поэтому и компенсирующая кривая общая для всех, одна на все диоды
Восприятие яркости диодов разных цветов/температуры разное. Мне из-за этого пришлось делать две таблицы на холодную и теплую ленты в одной панели.
Для WS все давно посчитано, на лету ничего вычислять не требуется:
const unsigned char WSgamma[ 256 ] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5,
5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10,
10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255
Использовать как-то так: pgm_read_byte( &WSgamma[ color ] ) для любого из R, G, B.
На самом деле кривые компенсации разные для R, G, B, но отличаются не сильно и вполне можно обойтись одной табличкой.
На самом деле кривые компенсации разные для R, G, BОни еще и для разных производителей светодиодов разные.
pgm_read_byte() не то чтобы быстрая функцияЕсли у вас хватает другой памяти под таблицу — тогда стоит использовать ее, здесь же максимально экономичный код с точки зрения памяти, издержки на использования чтения из области памяти под код не сильно заметны по сравнению с другими.
Они еще и для разных производителей светодиодов разные.Да, но эта табличка — «среднее по больнице».
Если работать с конкретным производителем, то да, можно выжать еще 3-5% охвата, но это на глаз заметно практически не будет.
Да и в целом простая сборка из РГБ-ленты без адресации была бы дешевле даже в обвязке из сдвиговых регистров для ключевых транзисторов в каждом сегменте и трёх диммеров на каждый цвет. Эффект тот же, мороки в разы меньше, цена ниже. Думаю, что это таки более экономный путь.
Как я уже сказал, если цель сделать ЧАСЫ с фишечками, то это не лучший путь. Если цель применить ФИШЕЧКИ для часов — то да, для самообразования и удовлетворения самолюбия очень хорошо получилось. Сам на ёлку звезды со свистелками замудрил. Просто потому что =)
Адресные заведутся, если питать их контроллер отдельно
Я видел только один раз чтобы контроллер был отдельно от диодов на ленте. Обычно все в одном корпусе на одном питании.
Сабж на адресных диодах — ну таки почему бы и нет? Удобно. Прежде всего в плане сборки/управления. Я видел один проект, где 4 (!) индикаторных диода были как раз таки адресные, и до них шло ровно три провода. В плане экономии — ну тут копейки вообще. А если еще посчитать время на разработку/изготовление логики управления, то и вообще неизвестно в какую сторону перевес :)
Если напрягает ШИМ данных диодов, можно взять другие, с более высокой частотой.
А ещё можно в том же чипидипе взять сдвиговые регистры для часов на семисегментниках, тогда останется только из них слепить цепочку на нужное количество разрядов и подавать тики с генератора (кварц на 32 кГц и у вас получаются самые настоящие часы в классическом виде), но раз уж есть дуина, то можно и с него тикать и рулить цветами.
до 10 ампер линейного чистогана через коллектор без какой-либо пляски с шим за 10 рублей
И в комплекте с радиатором размером в ещё одни часы ;)
Единственный способ понизить потребление — индуктивность последовательно светодиоду, ШИМ и схема стабилизации тока. Но это такой геморрой, что это имеет смысл только на каких-то уж очень больших цифрах.
Я себе слабо представляю проектирование и изготовление на коленке оптической системы, дающей равномерную засветку полоски в десяток-другой сантиметров длиной от одного диода. А с адресной лентой — запросто и с минимальным геморроем и числом проводов. Да, overkill, ну так почти вся современная разработка overkill ещё больший.
Ну, я не претендую на сверхпрограммиста.
Для меня это был интересный проект, однако при повторени всплыли некоторые сложности.
Порог вхождения для обычного человека довольно низкий — в чём и плюс, то есть идея в том, чтобы любой желающий мог повторить.
К тому же, идея не моя — я лишь развил и доработал её)
Arduino? Зачем?
Для часов прямо просится ESP32 (ну, или ESP8266): подключение к сети через Wi-Fi даст возможность использовать NTP для синхронизации времени, и Web — для настроек (например, яркости, цвета, будильников, Wi-Fi, NTP, часового пояса и т д.).
Если использовать годный модуль RTC — в синхронизации времени через WiFi нет особой необходимости, да и не всегда она возможна. А так, для часов и attiny достаточно. И цена микроконтроллера значительно меньше цены индикатора в любом случае.
в синхронизации времени через WiFi нет особой необходимости
Вопрос ведь в количестве кода и возни. ESP8266 — это 1 модуль с WiFi и программными часами (ничего не надо паять), NTP-синхронизация есть готовая (ничего не надо писать).
В проекте автора надо припаивать два модуля (RTC и Bluetooth), писать много кода (поддержка RTC, поддержка BT, спаривание и приём команд по BT, обновление RTC по команде), и писать ещё внешнюю программу для отправки времени по Bluetooth. В финальном продукте остаётся батарейка, которая однажды откажет или потечёт.
… да и не всегда она возможна
Часы не будут работать, если их выключить-включить и нет интернета? YAGNI.
Если это так важно — включите локальный NTP-сервер на точке доступа. Туда же и RTC на батарейке, если хочется ещё максимальной надёжности
Можно. Только зачем?))
Проект изначально замышлялся как ("взял и собрал"), без сильных заморочек.
При нормальном питании (в цепь RTC впаивается конденсатор, а также желательно в цепи ленты и ардуины), всё ок. Без конденсаторов за пару лет часы начали "врать" секунд на 30. С модулем bluetooth время выставляется за несколько секунд с точностью до секунды — ну и всё))
Потребление тока для меня значения не имеет, так как часы питаются от БП (всегда включены в розетку), висят в офисе на работе.
Ну и в конце концов, это просто часы (не система умного дома/теплицы/чего-то ещё), так что усложнять смысла не вижу — зато повторить может каждый, собрав минимальное количество "железок" без особых танцев с бубном
Данный проект повторяли много раз, каждый раз по-разному, однако я не встречал понятного руководства по сборке данных часов
Вот неплохая реализация на таких же компонентах, с полной инструкцией, файлами для печати и исходниками прошивки:
Я тоже хотел сделать часы на адресуемых диодах, только в виде матрицы 32x8. Остановился примерно на том же этапе, на котором оборвалась статья :)
Планировал одной обойтись, но к концу этой понял, что слишком много информации хочется вложить.
Всё распишу, ок)
Я использовал BH1750 по двум причинам:
1. Он аналоговый, то есть позволяет передавать числовое значение освещённости (в отличие от цифровых, которые имеют только значение порога «светло/темно»).
Не совсем понял по этому пункту.
Подключается он по I2C, значения передает в люксах
для ценников в пятерочке больше подходит e-ink
Крутые часы на адресных диодах