YACTL: Ще одна ялинкова гірлянда

— Чому?
Перед новим роком багато наряджають і прикрашають ялинки всілякими іграшками-брязкальцями і, звичайно, світловий гірлянди.
На Хабре вже нещодавно було кілька варіацій на тему саморобних гірлянд, але їх менше 100500 і тому я подумав, що цього явно мало. Щоб не прогнівити дух Нового Року я складаю свій варіант ялинкової гірлянди в подарунок цього великого духу.

Так само цей проект задумувався як частину початкового навчання для свого сина в стилі «я роблю і розповідаю що, як і чому, а син дивиться і ставить каверзні питання по темі і не дуже». З цієї причини я намагався зробити все якомога простіше і доступніше.





З чого?
Трохи порившись в своїх коробках, я виявив кілька стрічок індивідуально-адресуються RGB світлодіодів. У дикій природі вони мають різні назви — WS2801, WS2811, WS2812, Neopixels і т. п.
Головна родзинка цих стрічок в тому, що можна керувати будь-яким RGB світлодіодом індивідуально і змінювати RGB колірні складові і яскравість.

Відмінності між стрічками є електричні. Якщо дуже грубо, то їх можна описати приблизно так:
WS2801 — сама перша версія. Дані передаються по двох сигнальних проводів — DATA і CLOCK. Харчування у них зазвичай 12 вольт. RGB світлодіод підключений окремо.
WS2811 — більш нова версія. Дані передаються по одному проводу — DATA. Сигналу CLOCK немає, так як WS2811 контролер сам вважає тимчасові інтервали і треба їм слідувати в своєму коді. Зазвичай живлення 5 вольт. RGB світлодіод так само підключений окремо.
WS2812 — те ж саме як WS2811, але вбудований в світлодіод (наприклад, 5050), тим робить стрічку більш компактною і з можливим більш щільним розміщенням світлодіодів. Зазвичай живлення 5 вольт. Мікросхема-світлодіод має 6 висновків.
WS2812B — як WS2812, але з відмінністю в тому, що живлення для світлодіодів і самої мікросхеми об'єднано (у всіх варіантів вище роздільне харчування). Мікросхема-світлодіод має 4 виводу.

Будь-які варіації світлодіодних стрічок можна купити на eBay, Alibaba/AliExpress і в магазинах такого типу.

З точки зору програмування різниця дуже приємно згладжена використанням бібліотеки FastLED @ GitHub. Тобто, можна без особливих клопотів комбінувати різні типи програмованих стрічок в одному проекті, ніж я без сорому і скористався. Син, правда, не оцінив татову винахідливість і зручність бібліотеки.

У себе я знайшов три стрічки: одна на базі контролера WS2801 (25 світлодіодів) і дві на базі контролера WS2811 (20 та 15 світлодіодів). Разом виходить 60 світлодіодів щенячей радості.
Дві WS2811 я з'єднав разом послідовно.

Як вже здогадався допитливий розум читача, для управління такими світлодіодними стрічками потрібен контролер. Спочатку я задумував використовувати плату Arduino Pro Mini через компактності і готовності, але у своїх бездонних засіках не знайшов ні одну чомусь. Зате знайшов Teensy 3.1 (Cortex-M4 @ 72MHz, 256KB Flash, 64KB RAM). Це трохи перебір, але багато краще, ніж мало.

Так як у мене використовуються 12-ти і 5-ти вольт стрічки разом, то я запитал всю схему від 12В/1А блоку живлення з перетворенням в 5 вольт для живлення другої стрічки та плати мікроконтролера. Перетворював я імпульсним DC-DC модулем KIS-3R33S на базі MP2307DN, які дає до 3A на виході і майже не гріється. Звичайно, модуль можна замінити чимось типу 7805, але треба буде подбати про правильне охолодженні (це близько 1-1,5 вата на кожні 10 світлодіодів).



Перелік компонентів:

  • Індивідуально-призначені світлодіодні стрічки на базі WS2801, WS2811 і т. п.
  • 12В/1А блок живлення. При максимальній яскравості 60 світлодіодів споживали приблизно 800 мА. Я включаю їх на підлогу-яскравості і отримую 400 мА споживання
  • Модуль мікроконтролера Teensy 3.1. Так само підійде Arduino або інший відповідний модуль або мікроконтролер
  • DC-DC перетворювач KIS-3R33S. Тут варіантів багато і все залежить від вимог живлення




Як підключити?
Схеми практично немає, так як всі підключається досить просто:
Teensy 3.1 живиться від 5 вольт. На цих 5 вольтах сидить WS2811 стрічка. На 12 вольтах сидить стрічка на базі WS2801.
Стрічка WS2801 підключена до Teensy 3.1 так: DATA — 11, CLOCK — 13.
Стрічка WS2811 підключена до Teensy 3.1 так: DATA — 14.
Якщо схема все-таки потрібна, то можу додати про прохання.
Грудку проводів і деталей був вдало запихан в коробку для зберігання чотирьох AA елементів. Я в таких коробках зазвичай збираю щось таке просте і швидке.



У чому магія?
Магія в коді, який керує всім цим неподобством і приводить у захват трьох-річного сина.
Свій код виклав на GitHub: github.com/nochkin/LightBottle (потрібна бібліотека github.com/FastLED/FastLED
У коді все досить просто — псевдо-випадково вибирається колір, в який плавно переходить світлодіод і поточний колір переходить далі по світлодіодним стрічки. На ялинці виглядає як ніби світло падає вниз. Або наверх якщо, наприклад, перевернути ялинку (рада сина) або самі стрічки повісити навпаки (моє нераціональне пропозицію).

На самому початку коду я вивів деякі змінні для конфігурації:
LEDS1_NUM/LEDS1_PIN — кількість світлодіодів та пін підключення першої стрічки
LEDS2_NUM/LEDS2_PIN — кількість світлодіодів та пін підключення другої стрічки
LEDS_SATURATION — максимальна колірна насиченість
LEDS_BRIGHTNESS — максимальна яскравість (на 60 світлодіодах приблизне споживання вийшло 800 мА при яскравості 255, 400 мА при 128 і 200 мА при 64)
hueStep — крок зміни кольору за один цикл
UPDATE_DELAY — швидкість «бігу» кольори по стрічці

В setup() конфігуруються обидві стрічки, тому якщо стрічка одна, то можна залишити тільки одну сходинку, яка відповідає контролеру стрічки і обнулити LEDS2_NUM.

А мультик?
Прикладаю відео цього вироби. Прошу вибачення за телефонне якість і портретну орієнтацію.


Так само хочу передати вітання з наступаючим всіх хабровчанам. Ура-ура!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.