Готовимся к новому году: простая гирлянда на arduino
Содержание:
Светодиодная лента
Светодиодная лента — это группа из светодиодов, размещённых на гибком и клейком основании. Лента может быть длиной от 30 см до 5 м.
Существует два типа лент: с синхронизированными светодиодами и адресными. Для гирлянды понадобится второй тип. В этой ленте к каждому светодиоду подключён специальный чип. Эти чипы соединены последовательно. Всего лишь по одному проводу, подключенному к первому чипу, можно управлять цветом отдельно каждого светодиода в ленте.
Традиционная адресная светодиодная лента
У таких адресных светодиодных лент множество форм-факторов. Есть традиционные формы лент или же матрицы. Есть ленты с отдельными светодиодами, которые лучше всего подойдут на роль гирлянды. Вот некоторые их них:
- раздельные адресные светодиоды;
- светодиоды в виде бочонков;
- полусферические светодиоды (вариант 1, вариант 2);
- светодиоды в виде ёлочных шишек;
- светодиоды в раздельных сферах;
- светодиоды наподобие гирлянды.
Для примера будет использоваться последний тип адресной ленты:
Умная новогодняя гирлянда
Подготовка
Когда наскучили китайские однотипные гирлянды — почему бы не сделать свою? Она будет ярче светить и иметь ничем не ограниченное количество режимов работы. Ну кроме вашего воображение и размера памяти платы Arduino 🙂
Вот что нам понадобится для ее изготовления (не считая компьютера с IDE и usb-кабеля):
- Arduino Nano:
- 3D-принтер: ,
- адресная RGB-лента WS2812B:
- Блок питания на 5 вольт (3А):
- 3 потенциометра:
- кнопка:
- выключатель:
- резистор на 220 Ом:
- провода и паяльник думаю в вас уже, если нет — это можно найти в каталоге
Так как корпус будет небольшой, Arduino Nano плату следует взять без распаянных пинов на ней. К тем, которые мы будем использовать, мы припаяем провода напрямую.
Если 3D-принтера у вас нет — подойдет любой корпус размером от 10х10см 3см толщиной. Если принтер есть — вот 3D-модель корпуса. Но я на всякий случай приложил ссылку на очень неплохой 3D-принтер — вдруг вы именно сейчас выбираете, какой купить. Советую купить именно такой — он не требует сборки и имеет закрытый корпус, что позволяет без проблем печатать не только PLA, но и ABS пластиком.
Я спроектировал корпус так, чтобы он не требовал никаких специальных креплений и винтов: крышка задвигается ио направляющим и имеет отверстия для крепления — можно прикрепить шурупами к стене или хомутом — куда будет удобно. Корпус имеет упор для Arduino — плата встает в распор и не требует крепления.
Потенциометры подойдут любые, я взял простые 3х-контактные. Кнопка обычная, чуть больше стандартной. Выключатель нужен для того, чтобы обесточить плату при ее перепрошивки, при использовании он не требуется. Если вы не планируете дорабатывать код, то можно обойтись и без него.
Лента RGB подойдет не любая, а только адресная. Именно она позволит нам управлять каждым светодиодом по отдельности, зажигая его любым из 16 миллионов цветов. Код проекта рассчитан на ленту WS2812B на 50 светодиодов. Такие ленты могут иметь разную плотность (разное расстояние между светодиодами), имеют три контакта — два для питания и один управляющий, а также их можно резать на любое количество частей, или, наоборот, спаивать.
Мощность блока питания зависит от количества светодиодов ленты, напряжение — 5 вольт. На каждые 50 светодиодов нужно 3 ампера. Так что для 150-ти светодиодов вам понадобится уже 9-10 амперный блок питания.
Техническая часть
Паяем все детали по следующей схеме:
Батарейный блок обозначает подключение блока питания. В итоге должно получится примерно вот так:
Прошивка
Скачиваем код с сайта проекта на github: https://github.com/arduinotech/new_year_rgb. Если вы используете PlatformIO IDE — вам потребуется оба файла: platformio.ini и src/main.ino, а в platformio.ini нужно будет заменить usb-порт на тот, к которому у вас подключена плата. Если же для прошивки будет использоваться Arduino IDE, тогда достаточно будет скопировать код из файла src/main.ino и установить библиотеку FastLED (очень рекомендую перейти на PlatformIO или хотя бы попробовать).
Сам код довольно простой, реализовано несколько режимов работы гирлянды, переключаться между режимами кнопкой, подключенной к пину BUTTON_PIN. Ну и при необходимости нужно заменить кол-во светодиодов в ленте, если у вас их не 50 — это LED_COUNT. LED_PIN — пин, к которому подключен управляющий контакт ленты, а ENCODER_1_PIN, ENCODER_2_PIN и ENCODER_3_PIN — пины подключения потенциометров.
На данный момент реализовано 5 простых эффектов в качестве примера. Я специально не стал реализовывать больше, чтобы вы использовали код в качестве примера и реализовали сами то, что вам больше понравится.
Доработки и идеи
Полученный девайс можно намотать на елку, повесить на стену или куда-то еще, при наличии мощного блока питания можно довольно неплохо осветить небольшое помещения, нарастив длину ленты. А можно, напротив, уменьшить длину ленты до 5-10 диодов, для питания которых вполне хватит батарейного блока, и собрать светящуюся елочную игрушку.
Довольно интересно, создавая новые варианты мерцания ленты, использовать потенциометры для изменения скорости мерцания, яркости и цвета. При желании можно даже придумать и реализовать простенькие игры. В общем, я надеюсь, статья будет кому-то полезна.
Мои хотелки:
Использовать ленту на WS2811, и чтоб управлялось пультом. На Arduino, как правило, это не выполнимо, слабовато, ресурсов не хватает, лишнего ничего не прикрутишь.
Я уже был готов собрать это на контроллерах ARM. (валяются у меня много платок контроллеров с LPC1754) но паять не охота, и переводить код с Arduino времени нет.
Да я знаю что можно делать на ESP8266, но не хочу… (желающие могут портировать скетч самостоятельно)
И вот мучительно рыская в интернете в поисках интересных эффектов под разные библиотеки, я случайно набрел на страничку FastLED-Demos, где Andrew Tuline выкладывает эффекты для библиотеки FastLED.
Меня заинтересовал раздел notamesh
Я сказал Вау… и понеслось…
Гирлянда на ESP8266 и WS2812
Новый год стремительно приближается, в связи с чем вновь актуален вопрос о гирлянде на елку.
Ширпотребные китайские гирлянды, у которых провода толщиной с волос и под напряжением 220 вольт, а изоляция разваливается от одного взгляда, решено было выкинуть куда подальше.
Новая гирлянда сделана на базе адресуемых RGB-светодиодов WS2812, управляемых с помощью контроллера ESP8266. Все светодиоды WS2812 в гирлянде могут управляться абсолютно независимо и светить любым из 16777216 цветов. Питается гирлянда от безопасных 5 вольт, от любой 2-амперной зарядки для смартфона.
|||
|||
Прошивку использовал готовую — McLighting v2 (https://github.com/toblum/McLighting) Подробный мануал по прошивке ESP8266 из среды Arduino и первому запуску расписан здесь.
В прошивке имеется порядка 50 разных эффектов, есть web-интерфейс, а также HTTP REST-API, WebSocket-API, MQTT-API.
Для интеграции с MajorDoMo я использовал HTTP REST-API.
Примеры запросов управления.
- Выключить:
- Включить заданный цвет:
- Изменить яркость:
- Сменить режим:
Набросал элементы управления в меню, также добавил включение и выключение в Telegram, в шаблоны поведения для реакции на фразы «ёлочка гори» и «ёлочка потухни».
|||
Кроме того, повесил функционал (вкл/выкл/смена режима) на беспроводную кнопку Xiaomi, которая всегда валяется под руками.
Бюджет — сама лента на 50 диодов 700 р., ESP8266 200 р., корпус 50 р. или что-то подручное, блок питания — зарядка от телефона на 2А, не знаю сколько они стоят, пусть 300 р. Прошивка бесплатная. Итого 1250 р.
С наступающим!
Обсуждение (49)
Смотрите так же:
06.04.2020 Получение данных о COVID с карты Яндекс
12.07.2019 MajorDoMo и Яндекс Алиса. Алиса, включи канал Карусель.
20.06.2019 MajorDoMo и Яндекс Алиса. Алиса, измени цвет бра на красный.
18.06.2019 MajorDoMo и Яндекс Алиса. Алиса, сделай ярче настольную лампу.
17.06.2019 MajorDoMo и Яндекс Алиса. Алиса, включи свет на кухне.
10.06.2019 MajorDoMo и Яндекс Алиса. Модуль Yandex Home.
06.06.2019 MajorDoMo и Яндекс Алиса. Объединение аккаунтов.
05.06.2019 MajorDoMo и Яндекс Алиса. Регистрация приватного навыка.
03.06.2019 Загрузка PHP-расширения PDO MySQL в Windows
01.06.2019 MajorDoMo и Яндекс Алиса. Публикация вебхуков.
29.05.2019 MajorDoMo и Яндекс Алиса. Общие сведения.
22.05.2019 Экспресс контроль состояния циклов в Linux
08.05.2019 Сценарий контроля состояния SSL сертификатов сайтов
26.02.2019 Экспорт графиков в PNG-файл в модуле Charts
26.01.2019 Мультисерийный кастомный график в модуле Charts
30.12.2018 Личные итоги 2018 года
13.12.2018 График с цветовой индикацией выхода величины за пределы
12.11.2018 Кастомный график в модуле Charts
15.08.2018 Кронштейн NB F120 (North Bayou)
18.07.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 3.
20.06.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 2.
15.06.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 1.
20.05.2018 Кросс-компиляция ядра для Banana Pi M2U
14.05.2018 Ссылки на ресурсы по MajorDoMo
02.03.2018 Знакомство и тестирование Banana Pi M2U
21.02.2018 Распаковка Banana Pi M2U
14.02.2018 Одноплатный ПК для MajorDoMo
14.08.2018 Заметки по железу
23.01.2018 Мой взгляд на вопрос голосового управления в MajorDoMo
17.01.2018 Обзор цен на устройства Xiaomi
20.12.2017 Блог им. skysilver
Настройка моего скетча
У автора номера строк будут другими
В 75 строке выставляем пин приемника ИК int RECV_PIN = 8;
В 84 строке выставляем пин выхода на гирлянду #define LED_DT 14
Если у вас другие гирлянды то в строках 84- 87 выбирается ее тип.
И не забываем для 4 проводных гирлянд убрать комментарий в строке 208 и добавить в 209
// LEDS.addLeds<LED_TYPE, LED_DT, LED_CK, COLOR_ORDER >(leds, MAX_LEDS);
LEDS.addLeds<LED_TYPE, LED_DT, COLOR_ORDER >(leds, MAX_LEDS);
Если пины не напутали, то должно работать сразу
При первом запуске число светодиодов в гирлянде установлено в 20 шт
Поэтому, для тех кто не использует пульт надо в стоке 119 поставить нужное количество светодиодов,
#define INITLEN 20
а если вы уже запустили, то тогда меняем код в строке 225
NUM_LEDS = EEPROM.read(STRANDLEN);
На NUM_LEDS =100;
Где 100 это ваше количество светодиодов.
Для остальных, количество светодиодов можно настраивать с пульта
Я не ограничен в токе блока питания, если у вас блок питания слабее,
то в строке 211 меняем второе число на ваше
set_max_power_in_volts_and_milliamps(5, 3000);
где 3000 – максимальный ток блока питания в мА, его при необходимости меняем
Вроде все
Как будет время, добавлю эффектов и скетч сюда выложу.
Я записал видео эффекты (режим демонстрации)
И видео когда не меняя эффект, пультом переключал палитры.
Программа для микроконтроллера
Программа относительно проста. И при наличии персонального компьютера и программного обеспечения для ARDUINO UNO можно создавать любые, какие угодно порядки переключения гирлянд. Ниже приводится простая программа с всего двумя состояниями — переключение четных и нечетных номеров гирлянд. Но это только демонстрация.
Саму программу очень просто можно дописать на любые желаемые порядки переключения гирлянд, скорости переключения. Суть в том, что нужно брать каждый шаг программы и указывать в нем на каких портах должны быть нули (гирлянда не горит), а на каких — единицы (гирлянда горит). Затем указывается время продолжительности этого шага.
Всего шагов может быть от двух, как демонстрационной программе, то десятков и сотен, — все зависит от вашей фантазии и усидчивости.
И так, программа:
/* Blink12 */
// задание выходовvoid setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinModef 10, OUTPUT); pinModef 11, OUTPUT); pinModef 12, OUTPUT); pinModef 13, OUTPUT);}
// рабочий циклvoid loop() { digitalWrite(2, HIGH); // горит H12 digitalWrite(3, LOW); // не горит H11 digitalWrite(4, HIGH); // горит H10 digitalWrite(5, LOW); // не горит H9 digitalWrite(6, HIGH); // горит H8 digitalWrite(7, LOW); // не горит H7 digitalWrite(8, HIGH); // горит H6 digitalWrite(9, LOW); // не горит Н5 digitalWrite(10, HIGH); // горит Н4 digitalWrite(11, LOW); // не горит Н3 digitalWritef 12, HIGH); // горит Н2 digitalWrite(13, LOW); // не горит Н1 delay(1000); //время шага 1 сек. digitalWrite(2, LOW); // не горит Н12 digitalWrite(3, HIGH); // горит Н11 digitalWrite(4, LOW); // не горит Н10 digitalWrite(5, HIGH); // горит Н9 digitalWrite(6, LOW); // не горит Н8 digitalWrite(7, HIGH); // горит Н7 digitalWrite(8, LOW); // не горит Н6 digitalWrite(9, HIGH); // горит Н5 digitalWrite(10, LOW); // не горит Н4 digitalWrite(11, HIGH); // горит Н3 digitalWrite(12, LOW); // не горит Н2 digitalWrite(13, HIGH); // горит Н1 delay(1000); //время шага 1 сек.}
Таким образом, в каждый шаг записываем состояния гирлянд (LOW — не горит, HIGH — горит). Затем указываем длительность (время) шага (1000 = 1 сек). Затем следующий шаг. Как уже сказано, шагов может быть сколько угодно. Лампочные гирлянды сейчас уже никак нельзя назвать современным ёлочным украшением.
Принципиальная схема
Схема предназначена для управления 12-. гирляндами. Для управления выбраны порты D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13. Логические уровни с этих портов поступают на электронные ключи на ключевых высоковольтных полевых транзисторах VT1-VT12. При логической единице на соответствующем порту платы, открывается соответствующий транзистор.
Транзисторы предназначены для работы на постоянным (или пульсирующем) токе, поэтому напряжение на гирлянды поступает через диоды VD13-VD24.
Применение отдельного диода для каждой гирлянды вместо общего выпрямителя для всех позволяет обойтись относительно маломощными диодами.
Диоды VD1-VD12 служат для улучшения разрядки емкостей затворов мощных полевых транзисторов, а резисторы R1-R12 устраняют кратковременные перегрузки портов по току из-за импульсов тока на заряд / разряд емкостей затворов полевых транзисторов.
Рис. 1. Принципиальная схема переключателя гирлянд на основе Arduino UNO.
Теперь о скетче
Автор использовал библиотеки FastLED (https://github.com/FastLED/FastLED) и IRLremote.
Первую я оставил, вторую заменил на IRremote (https://github.com/z3t0/Arduino-IRremote), теперь пульт работает с библиотекой FastLED.
Мой вариант скетча с этими библиотеками https://yadi.sk/d/4aKV_Ug6HcFdWQ
Оригинальный скетч старался не переделывать (нет времени).
В будущем добавлю новых команд.
Продолжаем
Скачиваем библиотеки FastLED и IRremote и ставим.
Для установки библиотеки IRremote, по совету автора надо удалить Arduino / libraries / RobotIRremote
Берем пульт, загружаем пример из библиотеки IRremote с названием IRrecvDemo
В 11 строке int RECV_PIN = 11; 11 меняем на 8 (в моей схеме к этому пину подключен ИК приемник)
Загружаем скетч в Arduino.
Тыкаем на кнопки пульта и в режиме монитора порта будут появляться коды, запоминаем их.
Эти коды надо вставить в файлик commands.h,
Например:
для команды IR_A1 (увеличить яркость) у меня на пульте код клавиши 0xff4ab5
#define IR_A1 0xff4ab5 //N/P // Увеличение яркости A1
разберетесь я думаю.
Контроллер
В гирлянде контроллером ленты будет Arduino Uno. Но для этих целей подойдёт всё, что под руку попадётся: различные платы Arduino, МК серии ESP, STM, AVR, PIC, микрокомпьютеры Raspberry Pi. Единственное, о чём ещё следует помнить, это о логическом уровне контроллера. Некоторые из них работают на 3-вольтовой логике, и нужно будет использовать конвертер уровней.
Тока, выдаваемого с Arduino Uno, не хватит на запитывание ленты
Поэтому нужно использовать внешний источник питания на 5В (обратите внимание, некоторые ленты могут запитываться от 12В). Потребляемый ток напрямую зависит от длины ленты, поэтому нужно внимательно подбирать источник питания в зависимости от ваших целей
Минусовые контакты источника питания и контроллера нужно объединить. Плюс от источника питания нужно подключить напрямую к плюсовому контакту ленты. Сигнальный же контакт ленты нужно подключить к любому порту Uno.
Схема подключения ленты к контроллера и источнику питания
Хакатон Tour.Hack
Ивент перенесён на 26–27 сентября, Новосибирск, беcплатно
tproger.ru
События и курсы на tproger.ru
После скачивания zip-файла, нужно установить его в Arduino IDE. Переходите в Скетч→Подключить библиотеку→Добавить .ZIP библиотеку и выберите нужный файл.