Часы на 2812 и ардуино: Крутые часы на адресных диодах / Хабр

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

Ещё несколько лет назад на просторах сети я увидел интересный проект, в котором автор сделал огромные цифровые часы (с 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 (на базе ATmega328) — самая доступная плата как по цене, так и по простоте освоения новичку. Продаётся как с распаянными «ногами», так и без них. Лучше брать сразу с «ногами», так как я рекомендую использовать шилд, который очень сильно упрощает сборку, повышая качество и модульность.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Модуль 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

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

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

Провода «мама-папа»

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

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

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

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

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

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

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

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

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

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

Часы – матрица на Arduino и адресных светодиодах WS2812B.

Это уже 2 версия часов матрицы на Arduino и адресных светодиодах WS2812B. Первый вариант собирал год назад. Допустил пару ошибок. От выбора пластика до реализации рассеивателя. Но обо всем по порядку.

Печать деталей и сборка корпуса.

Распечатался детали для часов. 3D модели сам не делал, а взял готовый из интернета. Вы можете скачать модели со страницы автора или внизу страницы в разделе «файлы для скачивания».

Печатаю я на своём принтере Anet A8 на стекло. Это достаточно недорогой, но эффективный способ печати.

Для того, чтобы деталь держалась хорошо, используя клей ПВА, наношу его на стекло. Но перед тем как печатать данный проект, у меня закончился клей, которым я мазал стекло. И решил я нанести столярный клей.

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

Это меня очень сильно расстроила. После чего положил заготовки в горячую воду и оставил на ночь. Клей так и не отошёл. Хороший клей. Но нельзя этих целей.

Принял решение покрасить часы темно – серым цветом, развёл краску.

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

Сборка корпуса часов матрицы.

Приступаю к сборке часов. Для этого нам понадобится светодиодная лента, 60 светодиодами на метр.

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

Беру шлейф от компьютера, который раньше использовали для подключения CD-rom. Разделяю на 3 проводника. Нарезаю проводники нужной длины. И зачищаю края каждого провода.

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

Подключаю к ESP8266, в которой загружен код из предыдущего проекта: «Елочная гирлянда на ESP8266 (ESP32). Управление с приложения».

Тестирование показала, что все сделано правильно, и светодиоды светятся. Устанавливаю решётки поверх светодиодной ленты. На светодиоды нанёс термоклей. Чтобы усилить эффект рассеивания.

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

На решётку корпуса устанавливаю матовый пластик, который вырезал из коробки под нитки. Коробку под нитки купил незадорого в фикс-прайсе.

Установил внутреннюю часть со светодиодами в корпус. Затем поставил боковые накладки, которые закрывают провода. Поверх накладок устанавливаются ножки. И с помощью винтов М3 длинной 10 мм. Закрепляю корпус и ножки. По центру часов устанавливаю корпус под электронику, который также служит фиксатором конструкции.Все скрепляю винтами М3.

Проверка электроники часов на Arduino.

Пришло время проверить работоспособность часов на Arduino и адресных светодиодах WS2812B. Для этого собираем электронику на макетной плате.

Для проекта на Arduino понадобится следующая электроника:

  • Arduino Nano или Arduino Pro Mini.
  • Лента адресных светодиодов WS2812B.
  • МодульDS-3231 или DS-3231 mini.
  • Две тактовые кнопки.
  • Соединительные провода.
  • Макетная плата.
  • Блок питания 5в. 700 мА.

Схема подключения часов матрицы на Arduino NANO.

Для тестирования и проверки кода часов матрицы собрал электронику на макетной плате по схеме.

Протестировал и поправил код, и вот что получилось.

Пришло время установить электронику в корпус часов. Плату решил использовать Arduino Pro Mini. Так как они есть у меня в наличии, и занимает меньше места в корпусе часов.

Установка электроники в корпус часов.

Подготовил всю необходимую электронику.Нарезал провода нужной длины. На необходимые проводники установил разъём Dupont. Загрузил прошивку в Arduino Pro Mini. Как это сделать, читайте в статье: «Прошивка Arduino Pro Mini с помощью конвертера PL2303HX». И после чего приступим к пайке.

Схема подключения часов на Arduino Pro Mini и светодиодах WS2812B.

Паяем электронику по схеме.

Вот такой результат получился, осталось уложить все в корпус часов.

Чтобы Arduino Pro Mini и DS-3231 не стучали об корпус, приклеил их на двухсторонний вспененный скотч.

Тактовые кнопки устанавливают на место и креплю специальными пластинами, распечатанными заранее. Устанавливаю крышку на бокс с электроникой.А теперь можно подключить часы к питанию и приступить к финальному тестированию.

А сейчас немного о прошивке часов.

Код часов на Arduino и светодиодах WS2812B.

Для начала необходимо установить 2 библиотеки: DS3232RTC –для работы с модулем реального времени DS3231 и FastLED – для управления адресными светодиодами WS2812B.

Внимание! При установке библиотеки FastLED будьте внимательны нужно ставить версию, не больше, чем 3.3.2. Если у вас уже установлена более поздняя версия библиотеки, её нужно переустановить.

Установить эти библиотеки можно из файла. Скачать их можно внизу статьи в разделе «файлы для скачивания».

Также установить данные библиотеки можно через менеджер библиотек. Для этого в Arduino IDE переходим в пункт меню Скетч > Подключить библиотеку > Управлять библиотеками …

Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Отфильтруйте результаты поиска, набрав «DS3232RTC». Устанавливаем последнюю версию библиотеки.

Затем установить библиотеку FastLED для этого отфильтруйте результаты поиска, набрав «FastLED».

Выбираем версию 3. 3.2. и устанавливаем. Если у вас была установлена более новая версия, её нужно переустановить что можно сделать через менеджер – библиотека. Аналогичным образом.Выбрать нужную версию и нажать, установить. Ваша версия библиотеки будет переустановлена на ту версию, которую вы выбрали.

Модуль DS-3231 подключён по шине I2C, по этому контакт SDA подключаем к пину А4 Arduino и SCL подключаем к A5.

#define LED_PIN 6                     // Пин поключения ленты 6

Контакт данных ленты подключаем к 6 пину Arduino. Тактовые кнопки подключаем к 3 и 4 пинам Arduino.

byte button_1 = 4;  // кнопка
byte button_2 = 3;  // кнопка

Данные настройки можно оставить без изменений, но про них нужно знать.

После чего можно приступить к загрузке скетча в Arduino. Код мы рассмотрели, тут ничего сложного нет, а сейчас приступим к сравнению предыдущей версии часов с текущей.

Сравнение первой версии часов с данной реализацией.

Подобные часы я уже собирал около года назад, но допустил ряд ошибок:

  • Напечатал пластиком PLA.И буквально через месяц пластик начал трескаться, и часы потеряли свою привлекательность. Данную версию напечатал пластиком PETG.
  • Размер матрицы не позволяла водить время в формате 24 часа, что было исправлено в данном весе часов.
  • В первой версии не было фальш – панелей, которые прикрывают провода. Что исправлено данной версии.
  • В данной версии также реализовал вывод температуры со встроенного датчика модуля часов DS3231.Данные не очень точные, это связано с тем, что модуль установлен в корпус. И реагировать на изменение температуры будет медленно. Но в помещении нет резких перепадов температуры, и данной точности будет достаточно.
  • Покрасил корпус часов матовым серым цветом, что делать часы более красивыми.

На этом различия заканчиваются. Первая версия часов тоже неплохая. Я бы их повесил в коридоре или поставил в комнате. Но так как пластик потрескался, они пылятся на полке. Возможно, я их разберу и комплектующие, используя при реализации других проектов.

Понравились часы, не забудь нажать на сердечко. И поделиться с друзьями в соцсетях нажав на иконку в правом верхнем углу статьи. Или ниже статьи, если вы читаете с телефона.

Понравился проект Часы – матрица на Arduino и адресных светодиодах WS2812B? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.

Код часов на Arduino и светодиодах WS2812B.ino11 Kb 1383Скачать
библиотека FastLED .zip331 Kb 733Скачать
библиотека DS3232RTC .zip48 Kb 725Скачать
Файлы для печати .zip958 Kb 753Скачать

Светодиодные бинарные часы — Совместимость с Arduino Shield


Этот щит предназначен для использования в качестве бинарных часов поверх Olimexino-5510. Другие дуино тоже могут работать.

Схема

Описание

Светодиодная матрица

Главной особенностью часов является светодиодная матрица WS2812 RGB 6×3. Эти светодиоды содержат небольшой контроллер, который принимает последовательный протокол для данных о цвете и обрабатывает ШИМ. Они также могут быть объединены в цепочку, что означает, что для всех из них требуется только один контакт (D11, LED-DATA). Протокол описан в даташите WS2812, существует пара библиотек, которые их обрабатывают, в том числе одна для Arduino. В моем случае я использую библиотеку ASM для MSP430.

Блок питания

Olimexino-5510 имеет разъем для аккумулятора. Но он просто подключает батарею к шине 5 В, батарея может разряжаться до 3 В. WS2812 не предназначен для работы на таком низком уровне, в частности, синий светодиод становится намного тусклее. Чтобы исправить это, я включил SMPSU, который может получать 5 В от напряжения батареи. Теоретически он может выдерживать до 2А. Дизайн был сделан с помощью TI Webench, все детали такие же, как и предложенные.

Светодиоды WS2812 очень яркие, поэтому в темноте это может быть проблемой. Можно затемнить их, придав им более темный цвет, но это уменьшит разрешение. Назначение Q2 состоит в том, чтобы ШИМ-это 5V, что светодиоды, чтобы затемнить их извне. По сути, это дает еще один масштабный коэффициент для яркости. Принцип аналогичен тому, как работает динамическая контрастность в телевизорах.

Емкостные сенсорные панели

Этот экран содержит 4 сенсорных панели для пользовательского интерфейса. Микросхемы MSP430 имеют хорошую периферию, где из любого вывода можно сделать RC-генератор, измеряя частоту этого генератора, можно определить емкость тачпада. TI предлагает библиотеку для емкостного сенсорного экрана: http://www.ti.com/tool/capsenselibrary

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

На щите также имеется датчик освещенности, предназначенный для измерения внешней освещенности. Можно использовать это, чтобы яркость дисплея соответствовала комнате. Датчик подключен через I2C, так как ни Arduino, ни Olimexino-5510 не имеют I2C на контактах, мне придется сделать для этого программное решение. Датчик TCS34725FN также способен измерять цвет RGB; Я уверен, что с его помощью можно сделать что-то интересное.

Олимексино-5510

Чип olimexino-5510 содержит MSP430F5510. Плата имеет возможности USB (я воспользуюсь этим для синхронизации часов с компьютером).

Части

D1
L1
U1-мощность
U2-датчик
Q1-PMOSFET
Q2-npn
2 штифта с наружной резьбой (40 контактов)
С1, С10, С11, С13, С15, С17 6x 100 нФ
С4, С5, С7, С8, С9, С12, С14, С16, С18 9x 10 мкФ
С2 12 пФ
С3 15 нФ
С6 4,7 мкФ
Р1 30,9к 1%
Р2 10. 0k 1%
Р3 82,5к
Р4 2,8к
Р5, Р6 2x 1k
Р7, Р8 2x 4,7k
Зарядный резистор для олимексино
18 шт. WS2812
Олимексино-5510
Аккумулятор 6600 мАч

 

DIY WS2812 Аналоговые кольцевые часы Arduino

Это цифровые часы аналогового типа с несколькими состояниями отображения

Детали

       На этот раз я покажу вам, как сделать красивые кольцевые часы. В часах используется кольцо WS2812, содержащее 60 светодиодов (4 неопикселя четверти круга x 15 светодиодов), и оно идеально подходит для этой цели. Это цифровые часы в аналоговом стиле с несколькими состояниями отображения, 24-часовым будильником, будильником с обратным отсчетом, несколькими состояниями отображения будильника и демонстрационным режимом. Часы, минуты и секунды представлены другим цветом соответствующего светодиода.

   Держатель кольца изготовлен на 3D-принтере, и вы можете скачать файл .stl ниже. Физический корпус настольных часов основан на размерах неопиксельного кольца. Часы должны питаться от источника питания 5 В / 3 А или более. Код взят из проекта с открытым исходным кодом «Rise and Shine LED Clock». Я сделал лишь небольшую аппаратную модификацию, чтобы изменить интенсивность свечения светодиодов.

   Устройство очень простое в изготовлении и содержит всего несколько компонентов:
      — Кольцо из 60 светодиодов WS2812, изготовленное из неопикселей в форме четырех четвертей с 15 светодиодами
     — Микроконтроллер Arduino nano
     — Вращающийся энкодер с кнопкой
     — Два выпрямительных диода 3A
       ) мы входим в режим смены циферблата. Перемещение поворотного регулятора влево и вправо меняет циферблат часов: существует 6 разных циферблатов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *