Крутые часы на адресных диодах

Часть 1. Используемые компоненты

Ещё несколько лет назад на просторах сети я увидел интересный проект, в котором автор сделал огромные цифровые часы (с 7-мисегментными цифрами), в основе которых лежит так называемая адресная светодиодная лента.

Фото готового проекта
К сожалению, камера искажает цвет. На самом деле цвета равномерные и контрастные (цвет может быть любой)
К сожалению, камера искажает цвет. На самом деле цвета равномерные и контрастные (цвет может быть любой)

Я использовал размер цифры примерно 280х205 мм (почти лист А4), общий размер часов - 300х800 мм.

Данный проект повторяли много раз, каждый раз по-разному, однако я не встречал понятного руководства по сборке данных часов, а кроме того, я постараюсь максимально подробно описать те особенности и трудности, с которыми пришлось столкнуться мне. Кроме того, данные часы работают у меня уже порядка 3 лет, и совсем недавно я обновил как программную, так и аппаратную части, оглядываясь на опыт их использования, в связи с чем расскажу о некоторых технических доработках, которые я применил в данном проекте.

Что такое адресная светодиодная лента

Обычная RGB-светодиодная лента имеет 4 контакта: общий "+" и 3 "-", соответственно для каждого из основных цветов - красного, зелёного и синего.

Многочисленные контроллеры позволяют данной ленте отображать оттенки цветов путём смешивания основных цветов, однако у данной ленты есть существенные ограничения: отрезок ленты светится только целиком и с одинаковой яркостью по всей длине.

Лента на адресных диодах устроена иначе: на ней имеются контроллеры, которые позволяют управлять группой диодов (либо каждым диодом) по отдельности, позволяя независимо включать или выключать их, заставляя светиться любым цветом с любой яркостью. Лента имеет 3 контакта: "+", "-" и контакт управления, который подключается к микроконтроллеру.

На момент создания часов было 2 типа ленты, сейчас их стало несколько больше:

  • WS2811. Самая дешёвая из всех лент (считалась надёжнее "старшей" WS2812b). Позволяет управлять группами по 3 диода.

  • WS2812b. Использовалась мной (считается ненадёжной, хотя за время использования часов проблем выявлено не было). Позволяет управлять каждый диодом в отдельности. Из минусов - при выходе из строя 1 диода - дальнейшие работать не будут.

  • WS2813, WS2815, WS2815 - обновление WS2812, имеют "резервный" контакт передачи данных, увеличенная частота обновления. При выходе из строя одного диода остальной отрезок ленты сохраняет работоспособность. Минусы - цена.

    Подробнее о лентах и особенностях их подключения можно почитать здесь.

Итак, нам понадобится:

  1. Микроконтроллер;

  2. Модуль часов реального времени;

  3. Адресная диодная лента;

  4. Датчик температуры;

  5. Датчик освещённости;

  6. Модуль bluetooth.

  7. Блок питания;

  8. Шилд для arduino;

  9. Коннекторы, провода;

  10. Материалы для корпуса и рассеивателя.

Теперь подробнее об использованном оборудовании:

Микроконтроллер

Arduino nano с распаянными "ногами"
Arduino nano с распаянными "ногами"

Я использовал Arduino Nano (на базе ATmega328) - самая доступная плата как по цене, так и по простоте освоения новичку. Продаётся как с распаянными "ногами", так и без них. Лучше брать сразу с "ногами", так как я рекомендую использовать шилд, который очень сильно упрощает сборку, повышая качество и модульность.

Модуль часов реального времени

Модуль часов реального времени DS3231
Модуль часов реального времени DS3231

Настоятельно рекомендуется брать модель DS3231, так как у неё имеется встроенный датчик температуры, который нивелирует влияние перепадов температуры окружающей среды на показания часов.
Модули DS1302 и DS1307 к приобретению не рекомендуются, тем более что разница в цене незначительна.
Модуль выпускается в двух вариантах: полноразмерном (внизу) и компактном (вверху). Я брал полноразмерную версию, так как с ней удобнее работать.

Светодиодная лента

Адресная светодиодная лента
Адресная светодиодная лента

Светодиодная лента. Именно она отвечает за индикацию.
Я в своём проекте использовал WS2812b 60 диодов на метр.
Можно сэкономить и взять WS2811 (но тогда придётся немного поправить скетч, и при подключении схемы учесть, что ей нужно 12V питания, в то время как WS2812b питается от 5V).
Во многих проектах использовалась лента с частотой 30 диодов на метр, но на мой взгляд, так делать не стоит.

Датчик температуры

Датчик температуры DHT22 на плате
Датчик температуры DHT22 на плате

Использование датчика температуры опционально (в случае его отсутствия - необходимо удалить/закомментировать соответствующие строки в коде).
Я использовал модель DHT22 (кстати, измеряет также и влажность) - он дороже, чем его "младший брат" DHT11, однако, как пишут пользователи, младшая версия выдаёт значения, основанные на только ей известном алгоритме.
Рекомендуется брать сразу распаянный на плате (как на картинке слева).

Датчик освещённости

Датчик освещённости BH1750
Датчик освещённости BH1750

Я использовал BH1750 по двум причинам:
1. Он позволяет передавать числовое значение освещённости (в отличие от более простых фоторезисторов, которые имеют только регулируемое значение порога "светло/темно").
2. Согласно тестам (статьи в сети), он адекватно реагирует на лампы дневного света, так как имеет "на борту" несколько разных сенсоров (некоторые датчики не улавливают свет от люминесцентных ламп).

Уточнение по датчику

Как подсказал ivanii, "BH1750 - это цифровой 16-тибитный датчик с интерфейсом I2C, со спектрокомпенсацией и фильтром пульсаций", за что ему отдельная благодарность.

Фоторезистрор, распаянный на плате. Имеет три ноги: две питания и цифровой выход, и не позволяет плавно менять яркость ленты (выдаёт только 2 значения: "1" или "0").
Винт регулировки позволяет настроить порог чувствительности.
P.S. Существуют такие фоторезисторы на плате с 4 ногами (помимо цифрового добавлен аналоговый выход), однако используемый датчик (BH1750) предпочтительнее.

Модуль bluetooth

Модуль bluetooth
Модуль bluetooth

Оригинальный проект для корректировки времени использовал кнопки, однако, на мой взгляд, bluetooth даёт гораздо больше возможностей (например, просмотр отладочной информации).
Кроме того, у меня часы висят на высоте примерно 3,5 метров, так что корректировать их кнопками - то ещё удовольствие.
Модель - HC-05 или HC-06, сразу на плате с "ногами".

Блок питания

Я использую БП на 10 ватт (5V/2A), чего вполне хватает для моих часов (172 диода), особенно с учётом того, что они редко светят даже на половину своей яркости.

Какой ток потребляет лента?

Один цвет одного диода при максимальной яркости потребляет примерно 12 мА. В одном светодиоде три цвета, то есть если метр нашей ленты с плотностью 60 диод/метр будет светить белым светом максимальной яркости, получаем (12*3*60) примерно 2.1A.

Однако нужно учитывать, что в данном проекте нет смысла запускать свечение ленты белым цветом; яркости у ленты так же с запасом.

Кстати: WS2811 питается от 12V, WS2812b - от 5V.

Плата расширения (шилд) для Arduino Nano
Плата расширения (шилд) для Arduino Nano

Использование шилда так же опционально, однако он очень сильно упрощает сборку, а также повышает её модульность.
Первая версия часов была собрана без него, и как показала практика, использование шилда крайне рекомендуется.
Шилд позволяет извлечь микроконтроллер для обновления прошивки или заменить любой из модулей независимо от остального оборудования, а также дублирует пины питания и другие важные пины.

Провода и коннекторы

Провода "мама-папа"
Провода "мама-папа"

Для соединения компонентов удобно использовать такие провода-джамеры (есть с более качественными концевиками). Могут быть различные варианты ("мама-мама", "папа-папа", "папа-мама").
Под блок разъём блока питания подбирается соответствующий разъём.

Материалы корпуса и рассеивателя

Для изготовления корпуса я использовал кусок экструзионного пенополистирола ("техноплекс") - в отличие от всем известного "пеноплекса", он серый, то есть не влияет итоговый оттенок цифр и кабель-канал для рамки корпуса.

Для рассеивателя многие используют бумагу, что не очень практично и сильно ухудшает качество "изображения" цифр. Я использовал специальный светотехнический поликарбонат молочного цвета (opal). Он используется при изготовлении рекламных световых конструкций - можно поискать объявления в интернете или узнать у фирм, которые занимаются изготовлением рекламных конструкций. У меня лист толщиной примерно 4 мм, однако если бы у меня был выбор, то я бы рекомендовал взять более тонкий (толстый сильно "мылит" края цифр).

Поликарбонат бывает разный

Как я понял, поликарбонат бывает обычный, тоже белого (молочного цвета).

Предпочтительнее использовать именно "opal", так как он специально сделан для рассеивания света и имеет две разные стороны: одна направлена к источнику света, другая - наружу, к зрителю.

Так как материала получается много, к концу написания этой части я подумал, что будет правильным разделить статью на части.

В следующей части я расскажу про сборку компонентов, а разбор программной части, скорее всего оставлю на третью часть.

UPD:
Часть 2 (сборка): https://habr.com/ru/post/536842/
Часть 3 (прошивка и алгоритмы): https://habr.com/ru/post/537622/

Комментарии 113

    0
    Прочитал с интересом и буду ждать следущих частей.

    Возможно несколько забегаю вперёд (а может это те вопросы, на которые вы ответите в последущих частях) но,
    1. каковы габариты получившихся часов?
    2. сколько электроэнергии они потребляют?

    Не понятно из этой части зачем в данном случае используются датчики температуры, освещённости и модуль bluetooth. Можете рассказать?

      +1
      Влезу с комментарием насчет потребления. У меня самодельная подсветка проёма окна на esp32 и адресных rgb светодиодах. Стоит 50% яркости. 112 диодов. Ваттметр показывает 3-4 ватта на динамическом режиме (переливы и переходы). 7-8 ватт на разных вариациях теплоты белого света.
        0
        Спасибо, как раз очень полезная информация :)
        С Новым Годом :)
        0
        Нашел габариты под первой картинкой, вопрос 1 снимается :)
          +1
          зачем в данном случае используются датчики температуры, освещённости и модуль bluetooth

          Повангую:


          • показывать температуру и влажность (типа метеостанция)
          • адаптировать яркость свечения светодиодов к окружающей обстановке
          • для упрощения настройки, вместо кнопок
            0

            Абсолютно верно)))

            0

            Мои габариты примерно 30×80 см (одна цифра — как лист А4).
            При желании, размер можно менять (только с кодом (поколдовать) придётся.
            Датчик температуры — чтобы часы показывали температуру, bluetooth — удобно управлять (время корректировать, отладочную информацию смотреть). Можно обойтись без них))
            Про потребление энергии — не совсем понял вопрос… Питание от БП 5 Вольт/2 Ампера, если в кВт•Ч, то не замерял))

              +1
              С этого как бы надо начинать — определить требования к источнику питания. Иными словами: какой ток потребления будет у схемы если включить все светодиоды сразу. И потом уже подбирать блок питания или выдвигать дополнительные требования к алгоритму работы, гарантирующие ограничение потребления.
                0
                Пункт 7 — всё написано))
                Я включал все диоды разом, в том числе на полную яркость (не белым цветом) — всё ок.
                Ограничение потребления при желании сделать можно. Вопрос — зачем? Проект устроен таким образом, что это попросту не требуется. В конце концов, это часы, а не фонарь.
                  0
                  Всё Ок, это «ничего не сгорело», или ток не больше 2А, или всё же больше и блок питания просел под нагрузкой?
                  Понятно, что для часов не будет большой нагрузки, особенно если все диоды не включать на полную мощность, но ньюанс этот учесть надо и убедится что ничего не сгорит вдруг. Сегодня это часы, завтра попытаешься отобразить что-то ещё в результате чего включатся все сегменты на полную яркость(днём) и блок питания проработает не больше 15 минут испустив волшебный дым… т.к. окажется что там не 2А а 3А потребление, а блок питания на самом деле рассчитан на 1.5А макс. Встречал я такой треш, на блоке написано 5В 1.0А, а на выходе на выпрямлении без палева стоит диод 1N4148… подумаешь, цифрь на наклейке местами перепутали, должно быть написано 5А 0.1А
                    0
                    Ну, проект «open source» — я сейчас пытаюсь внятно дописать окончательно процесс сборки, соответственно выложу и прошивку. Я не претендую на «чистоту кода» и т.п. — любой желающий может его дополнить и дописать))
                    Однако: часы работают уже пару лет — всё ок. С БП тоже)
            0

            Интересно, а как с ШИМ бороться собираетесь? Для спальни они не пойдут. У меня елочная гирлянда на них 3x50шт + arduino. Так вот ШИМ лезет и сильно заметно, глаза быстро устают, особенно при изменении яркости и если в комнате темно.

              +2
              Это говорит лишь о том, что режим ШИМ вами подобран неверно. При более высокочастотном ШИМ таких проблем наблюдаться не должно.
                +1

                К сожалению частота ограничена и связана с длинной ленты. А на коротких отрезках — да, можно чуть быстрее ШИМ выставить. Но все равно не исправляет проблему затемнения для спальни.

                  +5
                  Какой "режим ШИМ"? Какая "частота ограничена и связана с длинной ленты"? Ребята, вы что?
                  ШИМ в WS2812B не регулируется и не зависит от длинны ленты, скорости передачи данных или частоты обновления. И бороться с ним можно только одним способом — выставляя полную яркость, т.е. сводя duty cycle к 100%.
                    +1

                    Спасибо не знал, просто ШИМ визуальнее заметен на более длинной ленте. А про яркость, там ещё она меняется — когда смешение цвета идёт (сами кристаллы с разной яркостью горят).

                      +2
                      Это не ШИМ заметен, это частота обновления. В большинстве библиотек делают частоту обновления порядка 10 герц и «ступенчатость» изменения яркости очень заметна.
                      Я когда делал свою снежинку/гирлянду делал частоту обновления порядка 100Гц и все зажигания/потухания сделал плавными. Визуально очень хорошо смотрится.
                        +1

                        А питаете вы эту ленту чем?

                    0
                    У WS2812 ШИМ — функция управляющего чипа, частота — 400 Герц, не меняется. Хочется более высокой — нужно использовать более высокочастотные ленты или управляемые светодиоды.
                      0

                      Да, у WS2815 повыше будет, но цена...

                        0

                        На этих светодиодах сильно заметно изменение яркости, даже на единицу, при малых её значениях, где-то меньше 100. На больших значениях изменение проходит незаметно. Столкнулся с этим делая себе ночник с автокорректировкой яркости по освещённости, решил не загонять светодиоды в маленькую яркость, а некоторые выключать, а остальные выводить на один канал, что бы снизить общий поток.

                          0
                          Да, яркость не линейна, если бы стояла задача сделать из них подобие экрана, пришлось бы строить характеристическую кривую и генерировать LUT.
                      0

                      Странно, у меня тоже гирлянда из адресных светодиодов, и ещё на окно приклеено 10м ленты, и не замечал негативного влияния на глаза.

                        +7

                        Какой ШИМ?!


                        Вы о чем вообще?
                        Это адресная лента, ШИМом в ней управляет чип в диоде и изменить его нельзя. При этом на глаз он абсолютно не заметен, так как частота его достаточно большая.


                        Мерцание поделок на готовых библиотеках связано с тем, что обновление массива диодов в библиотеке либо неправильно реализовано, либо выставлено на минимум по-умолчанию (для освобождения CPU), а мамкины инженеры в код даже не смотрели и комментарии там не читали.


                        Кроме того, если длина ленты большая — то нужно подключать питание в промежуточных точках, иначе будет падать яркость и цветовая температура.
                        И из-за этого может казаться что при плавных переходах лента мерцает.

                          –7
                          У ws2812 ШИМ очень заметен на неполной яркости — 400 герц это очень мало. А вот от частоты обновления как раз ничего не зависит, тк диоды не гаснут в промежутках — при подаче сигнала reset он сохраняет ранее заданный цвет до получения нового.
                            +6
                            «400 герц это очень мало» завидую и сочувствую вам. Завидую тому что вы имеете возможность рассмотреть быстрые процессы без применения чего либо, сочувствую потому что вы и сейчас сидите за монитором с частотой обновления врядли превышающей 120 герц, движение мышкой уже дискомфорт, а уж окошко перетащить должна быть реальная боль.
                              –2
                              Ну да, я вижу «пунктирный след» из мышек, когда ей вожу. Уверен, вы тоже, если примотритесь.

                              Если смотреть на эти ws2812 строго прямо, то они действительно выглядят норм. Но стоит поводить глазами, и все смешанные цвета и преливы рассыпаются на 7-цветные пунктиры. Попадание таких штук в переферийное зрение ужасно бесит.

                              Именно потому нельзя делать на их базе движущиеся индикаторы (дисплей на маятнике, пиксельные вентиляторы и тд).
                              типа таких
                              image
                              Ну то есть можно, но получится световая каша с рваными краями у картиок… Но есть управляемые светодиоды с действительно высокой частотой ШИМ. В основном это apa102-256 и их клоны.
                                +1

                                "я вижу «пунктирный след» из мышек, когда ей вожу"
                                Просто потому что частота обновления курсора в разы ниже частоты обновления монитора.

                                  –1
                                  Да даже если бы и таким же был. Скорость мыши на большом экране это метры в секунду. Пробег курсора за такт обновления меньше размеров курсора. ЧТД. А то, о чем вы говорите выливается в то, что при быстрых движениях я вообще часто вижу только начальное и конечное положение.
                                0
                                Не надо ничего смотреть. Достаточно провести взглядом. Мозг рассчитывает, что след на сетчатке будет в виде непрерывной линии. А в случае не очень высокого ШИМ след на сетчатке получается в виде линии из отдельных точек. И это действительно очень бесит, особенно в темноте когда у впереди идущей машины LED габариты имеют невысокую частоту ШИМ.

                                С ЖК монитором другая ситуация — там частота обновления, а не частота отображения. В старых ЭЛТ мониторах люминофор имел послесвечение которое и сглаживало мерцание. Но когда пошли мониторы 100 Гц, то послесвечение люминофора уменьшили, что бы картинка могла обновляться с частотой 100 Гц и на стандартных 60 Гц такие мониторы очень заметно мерцали если попадали в область периферического зрения(потому что она заточена на определение движения).
                                  +1
                                  Простите, но я вполне определённо написал про мышку и перетаскивание окон, на которых можно заметить влияние частоты обновления. Предполагать что на статичной картинке можно заметить обновление, довольно глупо. Что касается послесвечения люминофора, то тут вы тоже не правы. Поищите фотографии или видео, снятое с экрана, ширина чёрной полосы составит от четверти до трети экрана. «не очень высокий ШИМ» это высоко научный метод измерения. В темноте бесит ровно по той причине, что картинка не статическая, свет (строго говоря удельное количество фотонов на колбочку/палочку) не попадает на одни и те же участки сетчатки. Из за того, что темно, изображение высоконстрастное, а мозгу все равно — перед ним что то дёргается, причём картинка целиком, не её часть или это место закрепления глаз дёргается. Я уж не говорю, мозг стремится сделать так, что движущаяся часть изображения попадала бы на центр сетчатки, там «сенсоров» больше, что добавляет отдельный дискомфорт. В целом 200 герц ШИМ подходит всем, 400 практически абсолютно всем, выше нет особого смысла делать.
                                  В ситуации с монитором и низкой частотой обновления, условные проблемы связаны с тем, что изображение успевает сместиться на достаточное расстояние, чтобы картинка получила ощутимый стробоскопический эффект.
                                    0
                                    Объясните тогда почему на совсем старых CRT мониторах можно спокойно работать в 60 Гц и не заметно мерцание, а на просто старых, поддерживающих 100 Гц при частоте в 60 Гц заметно мерцание и сильно устают глаза?

                                    Возьмите два светодиода с одинаковой яркостью: один светится постоянно, другой с 10% коэффициентом заполнения и частотой ШИМ 200 Гц. А потом в темноте включите и проведите взглядом — тогда поймёте о чём речь.
                                      0

                                      Вероятно дело в составе люминофора — разное время послесвечения. На 100 герцовом быстрый состав

                                        0
                                        Вы читаете только то сообщение на которое отвечаете? Прочитайте начиная отсюда.
                                      –1
                                      Так и в ситуации с диодной лентой картинка успевает сместиться. При достаточно большом расстоянии до источника даже небольшого поворота глаза достаточно.
                                    0

                                    Шим и частота обновления монитора имеют слегка разную природу. 400 гц может быть заметно из за стробоскопического эффекта

                                0

                                Шим незаметен (даже на камеру телефона), но в спальню не подошли по другой причине: даже при минимальной яркости в небольшом помещении работают как ночник.
                                Повесил на работе — там вписались очень органично.

                                  0

                                  У меня светомузыка Гайвера, последовательно 100 светодиодов. Ночью используется в качестве ночника на 5%. ШИМ не заметен совсем, ни глазом, ни камерой смартфона. В комментариях у Алекса с обсуждением библиотек я где-то видел по поводу частоты обновления, так как у комментатора были проблемы с плавностью.

                                  0

                                  Всегда удивляло-почему этот вариант отображения цифр для часов так круто выглядит? Причём как в светодиодном, так и в ЖК варианте для наручных часов. Ностальгия?

                                    +1

                                    Удобно для чтения, легко расшифровывается мозгом даже при беглом взгляде. Аналогично рубленому моноширинному шрифту в терминале.

                                    0
                                    Только недавно прочитал про адресные диоды, тоже планирую что-нибудь сделать на них — статья очень в тему.
                                      +5

                                      Имхо не лучший выбор. Если уж припёрло делать такое руками, то световод + рассеиватель и по одному обычному диоду каждого цвета на сегмент. Экономичнее, не требует ШИМ при минимальной обвязке. Цвет любой. Яркость на ограничителе тока по датчику освещенности (фоторезистор) и/или календарю. Для руления большим числом диодов требуется сдвиговый регистр для часов (тыщщи имс на алишке). Занимает три-четыре пина дуины при значительной экономии электричества и памяти.
                                      Проект, конечно, интересный для разминки погромиста, но это из разряда "мама, сматли фто я сделаль!" — сто пятый способ помигать диодом.

                                        0

                                        Сходил попил водички, подумалось:
                                        Можно ещё проще. По одному адресному в световом канале (один сегмент и один диод), программно яркость 255, на отдельный пин точно такой же ШИМ по яркости с нагрузкой на rc-цепочку. Цепочка по заполнению даёт падение напряжения строго определённого (расчёт простой), с него напряжение снимается на затвор полевика с малым трешолдом и усиливает по току до соответствующего значения. Далее подтягиваем напругу до опорных 5 вольт и получаем регулятор тока на шим-сигнале. Итог — сверхмалые потребление тока при аналогичном визуале. Ну и меньше матана, так как число диодов равно числу сегментов при любом масштабе.

                                          0

                                          Сверхмалые потребления тока — это не про гигантский светодиодный индикатор в любом случае.

                                            0

                                            А для диодов разве норм током яркостью рулить?
                                            Я вроде читал, что у них очень нелинейная зависимость яркости от тока (+довольно узкий диапазон рабочих токов), и им такое не очень полезно.
                                            И еще тут подумалось, что адресные вообще заведутся ли, там же контроллер на каждом диоде.

                                              0
                                              У обычных — током сам создатель велел.
                                              Нелинейность есть, но не так что бы — ужас-ужас.
                                              А диапазон — нормальный, даже если не рассматривать разгон, примерно 40 — 120% — легко.
                                              С адрусуемыми — теже сомнения.
                                                –1
                                                Кубическая зависимость, или даже где-то ближе к степени 2.4
                                                Это легко решается табличной конвертацией перед выводом по предварительно просчитанным значениям. Там, кстати, ещё ньюанс связанный с ШИМ-мом и особенностями челочеческого зрения — яркость шимированного светодиода для глаза так же вносит свою нелинейность и в целом кажется ярче чем при аналогичном среднем токе, но на малых яркостях — провал.
                                                На малых яркостях малину портит динамический диапазон, контраст становится меньше. на 16 единицах получить качественные полутона сложнее чем на 255. А это яркость ленты всего в 16 раз меньше от максимальной.
                                                  0

                                                  С нелинейностью восприятия яркости я уже сталкивался, правда на обычной белой ленте. Если памяти достаточно — то можно хранить заранее посчитанные таблички, если нет — то вычислять по необходимости.

                                                    0

                                                    Считать на лету всегда плохой вариант. Таблица занимает 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).

                                                      0

                                                      Таблица может быть и больше (больше точек, больше каналов управления с разными лентами).
                                                      Насчет расчета на лету — вариант не самый плохой. Мы же не постоянно считаем, а только при изменении значения. Еще, кстати, встречал где-то очень очень упрощенный и приближенный (и быстрый) вариант расчета экспоненты.

                                                        0
                                                        Даже умножение выполняется не за один такт. Выбор значения с таблицы всегда быстрее. Светодиоды имеют одну природу, поэтому и компенсирующая кривая общая для всех, одна на все диоды. Когда считать надо немного, может показаться что этого достаточно. Но при попытке масштабировать, вместо 10 светодиодов использовать 100 или с 10Гц 100Гц… внезапно может оказаться что времени не хватает на рассчеты. Даже быстрый способ вычисления логарифма — это тысячи тактов для МК без арифметического сопроцессора. А ещё интересней становится когда МК не умеет аппаратно перемножать даже 8-битные значения.
                                                          0

                                                          Да понятно что таблица быстрее. Но я уже писал, что не всегда их можно/оптимально использовать.


                                                          Светодиоды имеют одну природу, поэтому и компенсирующая кривая общая для всех, одна на все диоды

                                                          Восприятие яркости диодов разных цветов/температуры разное. Мне из-за этого пришлось делать две таблицы на холодную и теплую ленты в одной панели.

                                                            –1
                                                            Да, яркость нелинейна.
                                                            Для WS все давно посчитано, на лету ничего вычислять не требуется:

                                                            const unsigned char WSgamma[ 256 ] PROGMEM = {
                                                            показать данные
                                                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                            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, но отличаются не сильно и вполне можно обойтись одной табличкой.
                                                              0
                                                              pgm_read_byte() не то чтобы быстрая функция.
                                                              На самом деле кривые компенсации разные для R, G, B
                                                              Они еще и для разных производителей светодиодов разные.
                                                                0
                                                                pgm_read_byte() не то чтобы быстрая функция
                                                                Если у вас хватает другой памяти под таблицу — тогда стоит использовать ее, здесь же максимально экономичный код с точки зрения памяти, издержки на использования чтения из области памяти под код не сильно заметны по сравнению с другими.
                                                                Они еще и для разных производителей светодиодов разные.
                                                                Да, но эта табличка — «среднее по больнице».
                                                                Если работать с конкретным производителем, то да, можно выжать еще 3-5% охвата, но это на глаз заметно практически не будет.
                                                                  0
                                                                  Ну если оператива на вес золота, то да. А флэш будет ужасно расходоваться… а если еще и заинлайнить, то совсем ужас.

                                                                  Согласен, сам забиваю на это все. Все равно нет приборов чтобы построить правильную характеристику.
                                                  0
                                                  Адресные заведутся, если питать их контроллер отдельно… Да, нелинейно, но что мешает использовать логарифмическую шкалу? Более того, линейная шкала в радиоэлектронике как бы вообще редко используется, линейных полупроводников вроде и нет так-то =) Просто нужно подобрать точку зажигания (вангую около 10% номинального тока) и несколько промежуточных точек с требуемой яркостью. Ну и не превышать номинал, лучше до 90%. Для большинства диодов максимум тока лежит в диапазоне 15-20 мА, собсна, в каком-то даташите мне попадалось аккурат 60 мА на одну сборку. Копеечный полевик спокойно без нагрева тянет пару ампер и может питать несколько метров ленты (в не-адресных лентах каждый цвет как раз и рулится своим полевиком, одним на всю линейку цвета).
                                                  Да и в целом простая сборка из РГБ-ленты без адресации была бы дешевле даже в обвязке из сдвиговых регистров для ключевых транзисторов в каждом сегменте и трёх диммеров на каждый цвет. Эффект тот же, мороки в разы меньше, цена ниже. Думаю, что это таки более экономный путь.
                                                  Как я уже сказал, если цель сделать ЧАСЫ с фишечками, то это не лучший путь. Если цель применить ФИШЕЧКИ для часов — то да, для самообразования и удовлетворения самолюбия очень хорошо получилось. Сам на ёлку звезды со свистелками замудрил. Просто потому что =)
                                                    0
                                                    Адресные заведутся, если питать их контроллер отдельно

                                                    Я видел только один раз чтобы контроллер был отдельно от диодов на ленте. Обычно все в одном корпусе на одном питании.
                                                    Сабж на адресных диодах — ну таки почему бы и нет? Удобно. Прежде всего в плане сборки/управления. Я видел один проект, где 4 (!) индикаторных диода были как раз таки адресные, и до них шло ровно три провода. В плане экономии — ну тут копейки вообще. А если еще посчитать время на разработку/изготовление логики управления, то и вообще неизвестно в какую сторону перевес :)
                                                    Если напрягает ШИМ данных диодов, можно взять другие, с более высокой частотой.

                                                      0
                                                      Самое главное, что надо знать об адресных диодах, это что логические уровни одинаковые для 5v и 3.3v. А самим светодиодам достаточно ~3.7 — почти все, что выше, идет в нагрев.
                                                      0
                                                      Полевики… беру даташит на 14А 30-вольтовый полевик… смотрю ОБР… на 30 вольтах максимальный ток для импульса длительностью 1сек — 200мА!!! 1мс — порядка 2А… Ну, такие они, идеальные полевики.
                                                        0
                                                        Какой-нибудь IRLML6244 спокойно держит несколько метров адресной ленты.
                                                          –1
                                                          Как я и предполагал, у вас он работает только чудом. Согласно даташиту, там большинство характеристик приводится для условий когда длительность импульса меньше 60мкс. Открываем в даташите на него ОБР, при длительности импульса 10мс и рабочем напряжении 5 вольт он держит не более 200мА, а импульс 100мкс и короче держит положенные 10-12А. Он не предназначен для работы на постоянном токе! Поэтому у вас он работает чудом. Потом удивляются почему у них 10А полевики горят… Да и 100А полевик так можно легко спалить.
                                                            +2
                                                            С каких пор «continuous drain current» стало импульсным режимом?
                                                              0
                                                              Здесь:

                                                              Максимально допустимый постоянный ток стока (Id): 6.3 A
                                                            0
                                                            Не те полевики смотрите. Зачем импульсы? Подойдёт великолепно без перегрева на 5 метров ленты даже обычный биполярник типа КТ819А — до 10 ампер линейного чистогана через коллектор без какой-либо пляски с шим за 10 рублей в самом дорогом чипидипе. А линейную регулировку легко получить потенциометром с логарифмической шкалой (какие и есть почти во всей технике) в базовую обвязку а ля регулятор громкости в УМЗЧ. Цена вопроса 20 рублей в сумме и значительное облегчение кода.
                                                            А ещё можно в том же чипидипе взять сдвиговые регистры для часов на семисегментниках, тогда останется только из них слепить цепочку на нужное количество разрядов и подавать тики с генератора (кварц на 32 кГц и у вас получаются самые настоящие часы в классическом виде), но раз уж есть дуина, то можно и с него тикать и рулить цветами.
                                                              +1
                                                              до 10 ампер линейного чистогана через коллектор без какой-либо пляски с шим за 10 рублей


                                                              И в комплекте с радиатором размером в ещё одни часы ;)
                                                                0
                                                                Это если жарить все 10 ампер. По факту более 2 эти часы не съедят. К тому же есть корпус — почему бы не засадить транзистор прямо на него? Обычно это задняя стенка из алюминия, да и хватило бы просто пятачка 50 на 50, не те токи и не те режимы же. У меня понижайка с 12 до 5 почти не греется и выдаёт 2 ампера, остальное же падает внутри транзистора. И ничего.
                                                                  0
                                                                  Линейный режим это зло. Мы же типа за экономию.
                                                        0
                                                        А с чего вдруг получится сверхмалое потребление тока? Яркость приблизительно пропорциональна среднему току через светодиод. Чем мы его достигаем — ШИМом или активным элементом последовательно светодиоду — да пофиг — потери в любом случае равны (Uпитания — Uсветодиода)*I. А напряжение на светодиоде почти не зависит от тока — их даже раньше использовали в качестве этакого стабилитрона.
                                                        Единственный способ понизить потребление — индуктивность последовательно светодиоду, ШИМ и схема стабилизации тока. Но это такой геморрой, что это имеет смысл только на каких-то уж очень больших цифрах.
                                                        0

                                                        Я себе слабо представляю проектирование и изготовление на коленке оптической системы, дающей равномерную засветку полоски в десяток-другой сантиметров длиной от одного диода. А с адресной лентой — запросто и с минимальным геморроем и числом проводов. Да, overkill, ну так почти вся современная разработка overkill ещё больший.

                                                          0

                                                          Ну, я не претендую на сверхпрограммиста.
                                                          Для меня это был интересный проект, однако при повторени всплыли некоторые сложности.
                                                          Порог вхождения для обычного человека довольно низкий — в чём и плюс, то есть идея в том, чтобы любой желающий мог повторить.
                                                          К тому же, идея не моя — я лишь развил и доработал её)

                                                          0

                                                          WS8211 есть и 5в.

                                                            +7

                                                            Arduino? Зачем?
                                                            Для часов прямо просится ESP32 (ну, или ESP8266): подключение к сети через Wi-Fi даст возможность использовать NTP для синхронизации времени, и Web — для настроек (например, яркости, цвета, будильников, Wi-Fi, NTP, часового пояса и т д.).

                                                              0

                                                              Если использовать годный модуль RTC — в синхронизации времени через WiFi нет особой необходимости, да и не всегда она возможна. А так, для часов и attiny достаточно. И цена микроконтроллера значительно меньше цены индикатора в любом случае.

                                                                +1
                                                                в синхронизации времени через WiFi нет особой необходимости

                                                                Вопрос ведь в количестве кода и возни. ESP8266 — это 1 модуль с WiFi и программными часами (ничего не надо паять), NTP-синхронизация есть готовая (ничего не надо писать).


                                                                В проекте автора надо припаивать два модуля (RTC и Bluetooth), писать много кода (поддержка RTC, поддержка BT, спаривание и приём команд по BT, обновление RTC по команде), и писать ещё внешнюю программу для отправки времени по Bluetooth. В финальном продукте остаётся батарейка, которая однажды откажет или потечёт.


                                                                … да и не всегда она возможна

                                                                Часы не будут работать, если их выключить-включить и нет интернета? YAGNI.
                                                                Если это так важно — включите локальный NTP-сервер на точке доступа. Туда же и RTC на батарейке, если хочется ещё максимальной надёжности

                                                                +1
                                                                Есть и противоположный вариант: выбрасываем модуль часов реального времени, запаиваем кварц 32768 гц вместо штатного на ардуино, программируем таймер на работу от этого кварца, а основное ядро тактуется встроенным RC генератором на 8 МГц.

                                                                Есть и другие варианты, можно нафантазировать.
                                                                  0
                                                                  Не забыть про правильное питание, не забыть переписать программу из ардуиновского суперцикла на deep sleep с прерываниями…
                                                                    0
                                                                    В ардуинах разве LDO?
                                                                      0
                                                                      Придется выпаять, стабилизатор будет мешать экономии энергии.
                                                                        0
                                                                        А что тогда от ардуины останется?
                                                                          0
                                                                          Будто она только из стабилизатора и состоит.
                                                                            0
                                                                            Еще из прошивки, которую вы предлагаете свою.
                                                                              0
                                                                              Если делать из ардуины RTC, придется немного напрячься. Конечно, проще взять готовый модуль с батарейкой.
                                                                                0
                                                                                Проще с нуля собрать из рассыпухи и прошить программатором, чем ардуину перекраивать, кмк.
                                                                                  0
                                                                                  Да и не нужна там Ардуина, обычная ATTINY + RTC справятся легко.
                                                                                  Тинька, если все правильно сделать, в покое будет жрать 7-10 мкА.
                                                                                    0
                                                                                    Я туда и веду)
                                                                                      0
                                                                                      Это конский ток по меркам микропотребления… Вроде, для тинек доступны токи порядка 0.5мкА в глубоком сне. Нужен внешний будильник.
                                                                                        0

                                                                                        Внешний будильник можно сделать от того же RTC если уж очень хочется. Будет потребление только одного RTC там да, сотые дали микроампер. Другое дело — надо ли так заморачиваться?

                                                                                          0
                                                                                          Особенно при том, что дисплей из сабжа потребляет на почти 6 порядков больше.
                                                                      0
                                                                      С WS2812 будут проблемы при 8МГц тактировании ядра.
                                                                      0

                                                                      Можно. Только зачем?))
                                                                      Проект изначально замышлялся как ("взял и собрал"), без сильных заморочек.
                                                                      При нормальном питании (в цепь RTC впаивается конденсатор, а также желательно в цепи ленты и ардуины), всё ок. Без конденсаторов за пару лет часы начали "врать" секунд на 30. С модулем bluetooth время выставляется за несколько секунд с точностью до секунды — ну и всё))
                                                                      Потребление тока для меня значения не имеет, так как часы питаются от БП (всегда включены в розетку), висят в офисе на работе.
                                                                      Ну и в конце концов, это просто часы (не система умного дома/теплицы/чего-то ещё), так что усложнять смысла не вижу — зато повторить может каждый, собрав минимальное количество "железок" без особых танцев с бубном

                                                                      0
                                                                      Для часов прямо просится ESP32 (ну, или ESP8266)


                                                                      Осенью 2015 года Espressif представила развитие линейки — микросхему ESP32. В начале 2016 года инженерные образцы нового кристалла стали доступны партнерам компании для тестирования, в сентябре 2016 года ESP32 стал доступен как полноценный продукт[6][7].

                                                                      Двухъядерный 32-бит Tensilica Xtensa LX6 с FPU и MAC. 240 МГц (600 DMIPS).
                                                                      448 кБайт ПЗУ, 520 кБайт ОЗУ. Внешние ОЗУ/ПЗУ на SPI интерфейсе, до 4*16 МБайт. Внешняя память может быть криптографически защищена.
                                                                      Питание 2,2…3,6 В.
                                                                      Wifi 802.11, Bluetooth v4.2 (в том числе Low Energy).
                                                                      Увеличенное количество портов и периферии: ADC, DAC, 4 SPI, 2 I2S, 2 I2C, 3 UART, CAN. Интерфейс SD карт (как мастер так и слейв). Ethernet MAC.
                                                                      Корпус QFN-48.

                                                                      ESP8266 может работать как в роли точки доступа так и оконечной станции. При нормальной работе в локальной сети ESP8266 конфигурируется в режим оконечной станции. Для этого устройству необходимо задать SSID Wi-Fi сети и, в закрытых сетях, пароль доступа. Для первоначального конфигурирования этих параметров удобен режим точки доступа. В режиме точки доступа устройство видно при стандартном поиске сетей в планшетах и компьютерах. Остается подключиться к устройству, открыть HTML страничку конфигурирования и задать сетевые параметры.


                                                                      тоже выглядит как дикий оверкил, судя по вычислительной мощности ESP8266 может в каждом «сегменте» запустить по копии дума, и програмно голосовым синтезом на всех языках мира еще озвучивать время «часов»
                                                                        +5

                                                                        По спецификациям возможно и оверкил, а вот по цене модули на esp* стоят сравнимо с модулями на ардуино, а возможностей значительно больше.

                                                                          0
                                                                          esp8266 полтора доллара на али стоит с доставкой, дешевле чем ардуина не говоря уже про ее модули.
                                                                          +2
                                                                          Данный проект повторяли много раз, каждый раз по-разному, однако я не встречал понятного руководства по сборке данных часов

                                                                          Вот неплохая реализация на таких же компонентах, с полной инструкцией, файлами для печати и исходниками прошивки:


                                                                            +6
                                                                            Автор, не поймите меня неправильно, это классно, что вы реализовали проект и захотели им поделиться, но эта часть издевательски коротка и лишена полезной информации, нет даже тизера конечного результата! Неужели нельзя было немного больше контента подготовить для первой статьи?

                                                                            Я тоже хотел сделать часы на адресуемых диодах, только в виде матрицы 32x8. Остановился примерно на том же этапе, на котором оборвалась статья :)
                                                                              0
                                                                              Для творческого человека, уже перечень элементов уже даст волю фантазии… и к следущей статье, в экспериментах уже будут созданы свои часы… статья будет контрольным ответом насколько хорошо справились с задачей.
                                                                                0

                                                                                Планировал одной обойтись, но к концу этой понял, что слишком много информации хочется вложить.
                                                                                Всё распишу, ок)

                                                                                0
                                                                                Я использовал BH1750 по двум причинам:
                                                                                1. Он аналоговый, то есть позволяет передавать числовое значение освещённости (в отличие от цифровых, которые имеют только значение порога «светло/темно»).


                                                                                Не совсем понял по этому пункту.
                                                                                Подключается он по I2C, значения передает в люксах
                                                                                  0
                                                                                  Уже подправил с статье (меня поправили).
                                                                                  Есть цифровые, которые выдают пороговое значение. Этот даёт возможность плавного управления яркостью ленты
                                                                                  0
                                                                                  ценники в пятерочке можно делать?
                                                                                    0
                                                                                    Если разориться на матрицу — пожалуйста
                                                                                      0

                                                                                      для ценников в пятерочке больше подходит e-ink

                                                                                        0
                                                                                        Не подходит он для ценников. Опыт эксплуатации показал, что они недолговечны, особенно возле холодильников.
                                                                                      0
                                                                                      В принципе собрать было не сложно, но мне кажется что датчик температуры в этом устройстве лишний, и в зависимости от место расположения будет показывать разный градус. Например если повесить над батареей, то показатели будут не верны. Тут еще важно в принципе расположение относительно пола, потому что ближе к потолку воздух теплее, нежели внизу.
                                                                                        0
                                                                                        Дело хозяйское. У меня висят под потолком, мне нравится с температурой))
                                                                                        0
                                                                                        Автор, очень интересный пост! Люблю, когда нормально объясняется, как сделать на первый взгляд сложные вещи. Пойду пробовать, спасибо) Если получится — результат покажу
                                                                                          0
                                                                                          Многовато 3d печати в этом проекте, полки можно было и самому сделать, а так круто!
                                                                                            0
                                                                                            Вторая статья будет сегодня-завтра. 3D печати нет совсем))
                                                                                            0
                                                                                            Обожаю адресную ленту, из нее столько всего можно сделать)
                                                                                              0
                                                                                              Отличная идея для стартапа))
                                                                                                0
                                                                                                Они может и крутые, но проще аналогичные заказать на алике, и не убивать несколько часов своего времени.
                                                                                                  0
                                                                                                  Покажите, где такие можно купить за эту цену?))

                                                                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                Самое читаемое