Готовимся к новому году: простая гирлянда на arduino

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

Светодиодная лента — это группа из светодиодов, размещённых на гибком и клейком основании. Лента может быть длиной от 30 см до 5 м.

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

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

У таких адресных светодиодных лент множество форм-факторов. Есть традиционные формы лент или же матрицы. Есть ленты с отдельными светодиодами, которые лучше всего подойдут на роль гирлянды. Вот некоторые их них:

  • раздельные адресные светодиоды;
  • светодиоды в виде бочонков;
  • полусферические светодиоды (вариант 1, вариант 2);
  • светодиоды в виде ёлочных шишек;
  • светодиоды в раздельных сферах;
  • светодиоды наподобие гирлянды.

Для примера будет использоваться последний тип адресной ленты:

Ёлочный автомат на 12 гирлянд нa ARDUINO UNO

Рейтинг:   / 5

Подробности
Просмотров: 1114

Автомат предназначен для переключения 12-ти гирлянд или других светящихся ёлочных украшений на основе лампочек, питающихся напряжением 220V от электросети. Мощность каждой гирлянды может быть от нуля до 200W. Поэтому автомат пригоден как для домашней ёлочки, так и для большой ёлки, установленной во дворе или на улице, в концертном зале…

Автомат сделан на основе микроконтроллерной платы ARDUINO UNO. Схема предназначена для управления 12-. гирляндами. Для управления выбраны порты D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13. Логические уровни с этих портов поступают на электронные ключи на ключевых высоковольтных полевых транзисторах VT1-VT12. При логической единице на соответствующем порту платы, открывается соответствующий транзистор. Транзисторы предназначены для работы на постоянным (или пульсирующем) токе, поэтому напряжение на гирлянды поступает через диоды VD13-VD24. Применение отдельного диода для каждой гирлянды вместо общего выпрямителя для всех позволяет обойтись относительно маломощными диодами. Диоды VD1-VD12 служат для улучшения разрядки емкостей затворов мощных полевых транзисторов, а резисторы R1-R12 устраняют кратковременные перегрузки портов по току из-за импульсов тока на заряд / разряд емкостей затворов полевых транзисторов. Программа относительно проста. И при наличии персонального компьютера и программного обеспечения для 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); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } //рабочий цикл void loop() { digitalWrite(2, HIGH); // горит Н12 digitalWrite(3, LOW); // не горит Н11 digitalWrite(4, HIGH); // горит Н10 digitalWrite(5, LOW); // не горит Н9 digitalWrite(6, HIGH); // горит Н8 digitalWhte(7, LOW); // не горит Н7

Ёлочная гирлянда на ARDUINO как средство от боязни микроконтроллеров

Оставлять комментарии могут только зарегистрированные пользователи

Программа для микроконтроллера

Программа относительно проста. И при наличии персонального компьютера и программного обеспечения для 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.

Контроллер

В гирлянде контроллером ленты будет 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 библиотеку и выберите нужный файл.

Настройка моего скетча

У автора номера строк будут другими

В 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 :)

Вот что нам понадобится для ее изготовления (не считая компьютера с 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

Я сказал Вау… и понеслось…

Теперь о скетче

Автор использовал библиотеки 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

разберетесь я думаю.

Оцените статью:
Оставить комментарий