Крутые часы на адресных диодах
Часть 1. Используемые компоненты
Ещё несколько лет назад на просторах сети я увидел интересный проект, в котором автор сделал огромные цифровые часы (с 7-мисегментными цифрами), в основе которых лежит так называемая адресная светодиодная лента.
Фото готового проекта
Я использовал размер цифры примерно 280х205 мм (почти лист А4), общий размер часов — 300х800 мм.
Данный проект повторяли много раз, каждый раз по-разному, однако я не встречал понятного руководства по сборке данных часов, а кроме того, я постараюсь максимально подробно описать те особенности и трудности, с которыми пришлось столкнуться мне. Кроме того, данные часы работают у меня уже порядка 3 лет, и совсем недавно я обновил как программную, так и аппаратную части, оглядываясь на опыт их использования, в связи с чем расскажу о некоторых технических доработках, которые я применил в данном проекте.
Что такое адресная светодиодная лента
Обычная RGB-светодиодная лента имеет 4 контакта: общий «+» и 3 «-«, соответственно для каждого из основных цветов — красного, зелёного и синего.
Многочисленные контроллеры позволяют данной ленте отображать оттенки цветов путём смешивания основных цветов, однако у данной ленты есть существенные ограничения: отрезок ленты светится только целиком и с одинаковой яркостью по всей длине.
Лента на адресных диодах устроена иначе: на ней имеются контроллеры, которые позволяют управлять группой диодов (либо каждым диодом) по отдельности, позволяя независимо включать или выключать их, заставляя светиться любым цветом с любой яркостью. Лента имеет 3 контакта: «+», «-» и контакт управления, который подключается к микроконтроллеру.
На момент создания часов было 2 типа ленты, сейчас их стало несколько больше:
WS2811. Самая дешёвая из всех лент (считалась надёжнее «старшей» WS2812b). Позволяет управлять группами по 3 диода.
WS2812b. Использовалась мной (считается ненадёжной, хотя за время использования часов проблем выявлено не было). Позволяет управлять каждый диодом в отдельности. Из минусов — при выходе из строя 1 диода — дальнейшие работать не будут.
WS2813, WS2815, WS2815 — обновление WS2812, имеют «резервный» контакт передачи данных, увеличенная частота обновления. При выходе из строя одного диода остальной отрезок ленты сохраняет работоспособность. Минусы — цена.
Итак, нам понадобится:
Теперь подробнее об использованном оборудовании:
Микроконтроллер
Arduino nano с распаянными «ногами»
Я использовал Arduino Nano (на базе ATmega328) — самая доступная плата как по цене, так и по простоте освоения новичку. Продаётся как с распаянными «ногами», так и без них. Лучше брать сразу с «ногами», так как я рекомендую использовать шилд, который очень сильно упрощает сборку, повышая качество и модульность.
Модуль часов реального времени
Модуль часов реального времени DS3231
Настоятельно рекомендуется брать модель DS3231, так как у неё имеется встроенный датчик температуры, который нивелирует влияние перепадов температуры окружающей среды на показания часов.
Модули DS1302 и DS1307 к приобретению не рекомендуются, тем более что разница в цене незначительна.
Модуль выпускается в двух вариантах: полноразмерном (внизу) и компактном (вверху). Я брал полноразмерную версию, так как с ней удобнее работать.
Светодиодная лента
Адресная светодиодная лента
Светодиодная лента. Именно она отвечает за индикацию.
Я в своём проекте использовал WS2812b 60 диодов на метр.
Можно сэкономить и взять WS2811 (но тогда придётся немного поправить скетч, и при подключении схемы учесть, что ей нужно 12V питания, в то время как WS2812b питается от 5V).
Во многих проектах использовалась лента с частотой 30 диодов на метр, но на мой взгляд, так делать не стоит.
Датчик температуры
Датчик температуры DHT22 на плате
Использование датчика температуры опционально (в случае его отсутствия — необходимо удалить/закомментировать соответствующие строки в коде).
Я использовал модель DHT22 (кстати, измеряет также и влажность) — он дороже, чем его «младший брат» DHT11, однако, как пишут пользователи, младшая версия выдаёт значения, основанные на только ей известном алгоритме.
Рекомендуется брать сразу распаянный на плате (как на картинке слева).
Датчик освещённости
Датчик освещённости BH1750
Я использовал BH1750 по двум причинам:
1. Он позволяет передавать числовое значение освещённости (в отличие от более простых фоторезисторов, которые имеют только регулируемое значение порога «светло/темно»).
2. Согласно тестам (статьи в сети), он адекватно реагирует на лампы дневного света, так как имеет «на борту» несколько разных сенсоров (некоторые датчики не улавливают свет от люминесцентных ламп).
Уточнение по датчику
Как подсказал ivanii, «BH1750 — это цифровой 16-тибитный датчик с интерфейсом I2C, со спектрокомпенсацией и фильтром пульсаций», за что ему отдельная благодарность.
Фоторезистрор, распаянный на плате. Имеет три ноги: две питания и цифровой выход, и не позволяет плавно менять яркость ленты (выдаёт только 2 значения: «1» или «0»).
Винт регулировки позволяет настроить порог чувствительности.
P.S. Существуют такие фоторезисторы на плате с 4 ногами (помимо цифрового добавлен аналоговый выход), однако используемый датчик (BH1750) предпочтительнее.
Модуль bluetooth
Модуль bluetooth
Оригинальный проект для корректировки времени использовал кнопки, однако, на мой взгляд, bluetooth даёт гораздо больше возможностей (например, просмотр отладочной информации).
Кроме того, у меня часы висят на высоте примерно 3,5 метров, так что корректировать их кнопками — то ещё удовольствие.
Модель — HC-05 или HC-06, сразу на плате с «ногами».
Блок питания
Я использую БП на 10 ватт (5V/2A), чего вполне хватает для моих часов (172 диода), особенно с учётом того, что они редко светят даже на половину своей яркости.
Какой ток потребляет лента?
Один цвет одного диода при максимальной яркости потребляет примерно 12 мА. В одном светодиоде три цвета, то есть если метр нашей ленты с плотностью 60 диод/метр будет светить белым светом максимальной яркости, получаем (12*3*60) примерно 2.1A.
Однако нужно учитывать, что в данном проекте нет смысла запускать свечение ленты белым цветом; яркости у ленты так же с запасом.
Кстати: WS2811 питается от 12V, WS2812b — от 5V.
Использование шилда так же опционально, однако он очень сильно упрощает сборку, а также повышает её модульность.
Первая версия часов была собрана без него, и как показала практика, использование шилда крайне рекомендуется.
Шилд позволяет извлечь микроконтроллер для обновления прошивки или заменить любой из модулей независимо от остального оборудования, а также дублирует пины питания и другие важные пины.
Провода и коннекторы
Провода «мама-папа»
Для соединения компонентов удобно использовать такие провода-джамеры (есть с более качественными концевиками). Могут быть различные варианты («мама-мама», «папа-папа», «папа-мама»).
Под блок разъём блока питания подбирается соответствующий разъём.
Материалы корпуса и рассеивателя
Для изготовления корпуса я использовал кусок экструзионного пенополистирола («техноплекс») — в отличие от всем известного «пеноплекса», он серый, то есть не влияет итоговый оттенок цифр и кабель-канал для рамки корпуса.
Для рассеивателя многие используют бумагу, что не очень практично и сильно ухудшает качество «изображения» цифр. Я использовал специальный светотехнический поликарбонат молочного цвета (opal). Он используется при изготовлении рекламных световых конструкций — можно поискать объявления в интернете или узнать у фирм, которые занимаются изготовлением рекламных конструкций. У меня лист толщиной примерно 4 мм, однако если бы у меня был выбор, то я бы рекомендовал взять более тонкий (толстый сильно «мылит» края цифр).
Поликарбонат бывает разный
Как я понял, поликарбонат бывает обычный, тоже белого (молочного цвета).
Предпочтительнее использовать именно «opal», так как он специально сделан для рассеивания света и имеет две разные стороны: одна направлена к источнику света, другая — наружу, к зрителю.
Так как материала получается много, к концу написания этой части я подумал, что будет правильным разделить статью на части.
В следующей части я расскажу про сборку компонентов, а разбор программной части, скорее всего оставлю на третью часть.
Источник
Гайд по адресной светодиодной ленте
Данный гайд посвящен адресной светодиодной ленте применительно к использованию с микроконтроллерами (Arduino, esp8266). Рассмотрены базовые понятия, подключение, частые ошибки и места для покупки.
КУПИТЬ АДРЕСНУЮ ЛЕНТУ
Лента WS2812
- Giant4 30 LED
- Giant4 60 LED
- Giant4 144 LED
- AliExpress
- AliExpress
Гибкий профиль
Гирлянда
Полоски
Кольца
Матрицы
- Giant4 16×16
- Giant4 32×8
- AliExpress
- AliExpress
- Black PCB / White PCB — цвет подложки ленты, чёрная / белая
- 1m/5m — длина ленты в метрах
- 30/60/74/96/100/144 — количество светодиодов на 1 метр ленты
- IPXX – влагозащита
- IP30 лента без влагозащиты
- IP65 лента покрыта силиконом
- IP67 лента полностью в силиконовом коробе
- ECO – “экономная” версия ленты, менее качественная и яркая чем обычная
ТИПЫ АДРЕСНЫХ ЛЕНТ
Сейчас появилось несколько разновидностей адресных светодиодных лент, они основаны на разных светодиодах. Рассмотрим линейку китайских чипов с названием WS28XX.
Чип | Напряжение | Светодиодов на чип | Кол-во дата-входов | Купить в РФ |
WS2811 | 12-24V | 3 | 1 | 30 led, 60 led |
WS2812 | 3.5-5.3V | 1 | 1 | 30 led, 60 led, 144 led |
WS2813 | 3.5-5.3V | 1 | 2 (дублирующий) | 30 led, 60 led |
WS2815 | 9-13.5V | 1 | 2 (дублирующий) | 30 led, 60 led |
WS2818 | 12/24V | 3 | 2 (дублирующий) | 60 led |
У двухпиновых лент из линейки WS28XX достаточно подключить к контроллеру только пин DI, пин BI подключать не нужно. При соединении кусков ленты нужно соединять все пины!
WS2811 (WS2818) и WS2812
Сейчас популярны два вида ленты: на чипах WS2812b и WS2811 (и новая WS2818). В чём их разница? Чип WS2812 размещён внутри светодиода, таким образом один чип управляет цветом одного диода, а питание ленты – 5 Вольт. Чип WS2811 и WS2818 размещён отдельно и от него питаются сразу 3 светодиода, таком образом можно управлять цветом только сегментами по 3 диода в каждом. А вот напряжение питания у таких лент составляет 12-24 Вольта!
ЧТО ТАКОЕ АДРЕСНАЯ ЛЕНТА
Итак, данный гайд посвящен адресной светодиодной ленте, я решил сделать его познавательным и подробным, поэтому дойдя до пункта “типичные ошибки и неисправности” вы сможете диагностировать и успешно излечить косорукость сборки даже не читая вышеупомянутого пункта. Что такое адресная лента? Рассмотрим эволюцию светодиодных лент.
Обычная светодиодная лента представляет собой ленту с напаянными светодиодами и резисторами, на питание имеет два провода: плюс и минус. Напряжение бывает разное: 5 и 12 вольт постоянки и 220 переменки. Да, в розетку. Для 5 и 12 вольтовых лент нужно использовать блоки питания. Светит такая лента одним цветом, которой зависит от светодиодов.
RGB светодиодная лента. На этой ленте стоят ргб (читай эргэбэ – Рэд Грин Блю) светодиоды. Такой светодиод имеет уже 4 выхода, один общий +12 (анод), и три минуса (катода) на каждый цвет, т.е. внутри одного светодиода находится три светодиода разных цветов. Соответственно такие же выходы имеет и лента: 12, G, R, B. Подавая питание на общий 12 и любой из цветов, мы включаем этот цвет. Подадим на все три – получим белый, зелёный и красный дадут жёлтый, и так далее. Для таких лент существуют контроллеры с пультами, типичный контроллер представляет собой три полевых транзистора на каждый цвет и микроконтроллер, который управляет транзисторами, таким образом давая возможность включить любой цвет. И, как вы уже поняли, да, управлять такой лентой с ардуино очень просто. Берем три полевика, и ШИМим их analogWrit’ом, изи бризи.
Адресная светодиодная лента, вершина эволюции лент. Представляет собой ленту из адресных диодов, один такой светодиод состоит из RGB светодиода и контроллера. Да, внутри светодиода уже находится контроллер с тремя транзисторными выходами! Внутри каждого! Ну дают китайцы блэт! Благодаря такой начинке у нас есть возможность управлять цветом (то бишь яркостью r g b) любого светодиода в ленте и создавать потрясающие эффекты. Адресная лента может иметь 3-4 контакта для подключения, два из них всегда питание (5V и GND например), и остальные (один или два) – логические, для управления.
Лента “умная” и управляется по специальному цифровому протоколу. Это означает, что если просто воткнуть в ленту питание не произойдет ровным счётом ничего, то есть проверить ленту без управляющего контроллера нельзя. Если вы потрогаете цифровой вход ленты, то скорее всего несколько светодиодов загорятся случайными цветами, потому что вы вносите случайные помехи, которые воспринимаются контроллерами диодов как команды. Для управления лентой используются готовые контроллеры, но гораздо интереснее рулить лентой вручную, используя, например, платформу ардуино, для чего ленту нужно правильно подключить. И вот тут есть несколько критических моментов:
ОСОБЕННОСТИ ПОДКЛЮЧЕНИЯ
1) Команды в ленте передаются от диода к диоду, паровозиком. У ленты есть начало и конец, направление движение команд на некоторых моделях указано стрелочками. Для примера рассмотрим ws2812b, у нее три контакта. Два на питание, а вот третий в начале ленты называется DI (digital input), а в конце – DO (digital output). Лента принимает команды в контакт DI! Контакт DO нужен для подключения дополнительных кусков ленты или соединения матриц.
2) Если в схеме возможна ситуация, при которой на ленту не будет подаваться питание 5V, но будет отправляться сигнал с микроконтроллера – лента начнёт питаться от дата-пина. В этом случае может сгореть как первый светодиод в ленте, так и пин контроллера. Не испытывайте удачу, поставьте резистор с сопротивлением 200-500 Ом. Точность резистора? Любая. Мощность резистора? Любая. Да, даже 1/4.
2.1) Если между лентой и контроллером (Arduino) большое расстояние, т.е. длинные провода (длиннее 50 см), то сигнальный провод и землю нужно скрутить в косичку для защиты от наводок, так как протокол связи у ленты достаточно скоростной (800 кГц), на него сильно влияют внешние наводки, а экранирование земляной скруткой поможет этого избежать. Без этого может наблюдаться такая картина: лента не работает до тех пор, пока не коснёшься рукой сигнального провода.
2.2) При подключении ленты к микроконтроллерам с 3.3V логикой (esp8266, ESP32, STM32) появляется проблема: лента питается от 5V, а сигнал получает 3.3V. В даташите указана максимальная разница между питанием и управляющим сигналом, если её превысить – лента не будет работать или будет работать нестабильно, с артефактами. Для исправления ситуации можно:
- Уменьшить напряжение питания ленты до 4.5V, “промышленные” (металлические в дырочку) блоки питания позволяют это сделать (у них есть крутилка).
- Поставить конвертер (преобразователь) уровней с 3.3 до 5V на управляющий сигнал.
- Также я придумал весьма грязный трюк с диодом: первый светодиод в ленте можно запитать от более низкого напряжения через любой кремниевый диод (например 1N4007), а остальные – как обычно. На диоде падает около 0.6V, таким образом сигнал пройдёт через ступеньку повышения 3.3-4.4-5.0V и всё будет работать стабильно. Для этого нужно аккуратно вырезать кусочек дорожки 5V между 1 и 2 светодиодом, подключить питание ко второму, и диодом оттуда же – на первый (см. схему #1 справа).
- Ещё один способ с нашего форума: диодом “приподнять” землю самого микроконтроллера на те же 0,6V. Для этого диод ставится между GND питания катодом и GND микроконтроллера анодом (см. схему #2 справа).
3) Самый важный пункт, который почему то все игнорируют: цифровой сигнал ходит по двум проводам, поэтому для его передачи одного провода от ардуины мало. Какой второй? Земля GND. Как? Контакт ленты GND и пин GND Ардуино (любой из имеющихся) должны быть обязательно соединены. Смотрим два примера.
4) Питание. Один цвет одного светодиода при максимальной яркости кушает 12 миллиампер. В одном светодиоде три цвета, итого
36 мА на диод. Пусть у вас есть метр ленты с плотностью 60 диод/метр, тогда 60*36 = 2.1 Ампера при максимальной яркости белого цвета, соответственно нужно брать БП, который с этим справится. Также нужно подумать, в каком режиме будет работать лента. Если это режимы типа «радуга», то мощность можно принять как половину от максимальной. Подробнее о блоках питания, а также о связанных с ними глюках читай здесь.
5) Продолжая тему питания, хочу отметить важность качества пайки силовых точек (подключение провода к ленте, подключение этого же провода к БП), а также толщину проводов. Как показывает мой опыт, брать нужно провод сечением минимум 1.5 квадрата, если нужна полная яркость. Пример: на проводе 0.75 кв.мм. на длине 1.5 метра при токе 2 Ампера падает 0.8 вольта, что критично для 5 вольт питания. Первый признак просадки напряжения: заданный программно белый цвет светит не белым, а отдаёт в жёлтый/красный. Чем краснее, тем сильнее просело напряжение!
6) Мигающая лента создаёт помехи на линию питания, а если лента и контроллер питаются от одного источника – помехи идут на микроконтроллер и могут стать причиной нестабильной работы, глюков и даже перезагрузки (если БП слабый). Для сглаживания таких помех рекомендуется ставить электролитический конденсатор 6.3V ёмкостью 470 мкФ (ставить более ёмкий нет смысла) по питанию микроконтроллера, а также более “жирный” конденсатор (1000 или 2200 мкФ) на питание ленты. Ставить их необязательно, но очень желательно. Если вы заметите зависания и глюки в работе системы (Ардуино + лента + другое железо), то причиной в 50% является как раз питание.
7) Слой меди на ленте не очень толстый (особенно на модели ECO), поэтому от точки подключения питания вдоль ленты напряжение начинает падать: чем больше яркость, тем больше просадка. Если нужно сделать большой и яркий кусок ленты, то питание нужно дублировать медным проводом 1.5 (или больше, надо экспериментировать) квадрата через каждый метр.
КАК ДЕЛАТЬ НЕЛЬЗЯ
Как мы уже поняли, для питания ленты нужен источник 5 Вольт с достаточным запасом по току, а именно: один цвет одного качественного светодиода на максимальной яркости потребляет 0.012 А (12 мА), соответственно весь светодиод – 0.036 А (36 мА) на максимальной яркости. У китайцев есть “китайские” ленты, которые потребляют меньше и светят тускло. Я всегда закупаюсь в магазине BTF lighting (ссылки в начале статьи), у них ленты качественные. Я понимаю, что порой очень хочется запитать ленту напрямую от Ардуино через USB, либо используя бортовой стабилизатор платы. Так делать нельзя. В первом случае есть риск выгорания защитного диода на плате Arduino (в худшем случае – выгорания USB порта), во втором – синий дым пойдёт из стабилизатора на плате. Если всё-таки очень хочется, есть два варианта:
- Не подключать больше количества светодиодов, при котором ток потребления будет выше 500 мА, а именно 500/32
16 штук
Вы наверное спросите: а как тогда прошивать проект с лентой? Ведь судя по первой картинке так подключать нельзя! Оч просто: если прошивка не включает ленту сразу после запуска – прошивайте. Если включает и есть риск перегрузки по току – подключаем внешнее питание на 5V и GND.
Источник