Невероятно эффектная цветомузыка на Arduino и светодиодах. Светодиодная лампа с эффектом имитации огня на ардуино и управление пламенем Теперь о скетче

Невероятно эффектная цветомузыка на Arduino и светодиодах. Светодиодная лампа с эффектом имитации огня на ардуино и управление пламенем Теперь о скетче

В интернете я нашел очень много интересных идей о том, как сымитировать эффект огня при помощи программируемых светодиодов WS2812c и Ардуино. Я попытался сделать свой собственный ночник, который добавит романтики в комнату.

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

Шаг 1: Создаём электронику


Для проекта нужны:

  1. Светодиодная полоска WS2812b со светодиодами, расположенными очень близко друг к другу. Можно использовать другие светодиоды, например, если вы хотите создать более высокую напольную лампу имитирующую пламя, вместо настольной.
  2. Ардуино нано. Для меня этого модуля было вполне достаточно. Если вы хотите сделать более сложную штуку, то другие типы плат подойдут лучше
  3. Провода для соединения

Так как диоды и Ардуино нано используют 5V, я был привязан к этому вольтажу. Это означает, что для питания лампы можно использовать павербанк и создавать романтическую обстановку где угодно и когда угодно.

На моей светодиодной полосе было 120 диодов, я разделил её на полосы по 20 диодов на цилиндре, это можно увидеть на фото. Также я припаял штекеры папа\мама, чтобы иметь возможность заменять какие-то части лампы в будущем.

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

Шаг 2: Световые эффекты

Итак, закончив с электроникой, мы видим, что свечение всё еще не выглядит как огонь. Для придания реалистичности нам надо рассеять свет от диодов, так, чтобы свечение каждого отдельного диода перестало быть различимым.

Немного поэкспериментировав с бумагой (которая слишком рассеивала свет) и пластиковой плёнкой, выкрашенной в белый (также не подходившей для моих нужд), я пришёл к выводу, что единственным нормальным решением будет использовать матовое стекло или акрил.

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

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

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

Чего только самобытные мастера не придумают. От трехцветных моргалок до лазерных многолучевых установок с управлением по MIDI интерфейсу.

Как большой поклонник, так называемых адресных светодиодов, хочу показать вам очень простую и удивительную цветомузыку. Я вообще такой ни разу не видел. Пока не собрал за один вечер. Итак, визуализатор звука!

Инструкция

Схема очень простая!


Вам понадобятся Arduino Nano, или Uno. Или какая там у вас есть? Два потенциометра, пять резисторов, пару конденсаторов и линейка (лента) из 180 светодиодов WS2812b. Всё! Светодиодов в линейке может быть 60, 120 или 180.

В визуализаторе с помощью алгоритма быстрого преобразования Фурье выделяются 8 частот (порог чувствительности на каждую частоту свой, снижается от 1 к 8), преобразуются в цвет и выводятся на линейку светодиодов по одному из восьми алгоритмов. Скетч писал Майкл Крампас, парни из Чип и Дипа добавили функционал, а библиотека для светодиодов и быстрого преобразования Фурье (FFT) написана в Адафрут для проекта Piccolo. Библиотека FFT для 128 точек, адаптированная для AVR микроконтроллеров написана на ассемблере.

Сам скетч и библиотеку FFT нужно скачать и .

Не теряйте время на разбор алгоритмов, просто соберите, залейте скетч и наслаждайтесь шоу.
Это всего лишь развлечение!

В момент первого включения нужно сделать пару настроек :

Яркость: удерживайте кнопку color при включении питания. На первых 8 светодиодах будет отображаться радуга светодиодов. С помощью ручки param измените яркость. По завершении нажмите кнопку color еще раз, и ваша конфигурация будет сохранена в памяти.

Длина светодиодной полосы: удерживайте кнопку pattern при включении питания. Отобразится один, два или три красных светодиода. Используйте ручку param, чтобы выбрать длину светодиодной полосы в зависимости от количества красных светодиодов:

1=60 светодиодов
2=120 светодиодов
3=180 светодиодов

По завершении нажмите кнопку pattern еще раз, и ваша конфигурация будет сохранена в памяти.

Алгоритмы

Танцы плюс: пики звуковых сигналов испускаются из центра полосы и исчезают по мере приближения к концам. Скорость пика пропорциональна величине звукового сигнала этого пика.

Танцы минус: то же, что и Dance Party, но пики сигналов испускаются с одного конца.
Импульс: пики сигналов отображаются как яркие импульсы, которые поступают из центра полосы. Ширина импульса зависит от уровня сигнала.

Световая полоса: в пиках освещается вся полоса.

Цветные полоски: пики сигналов отображаются как цветные полосы, которые исчезают.

Цветные полоски 2: подобно цветные полоски, но каждая полоска сжимается и исчезает.

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

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

Цветовые схемы

Случайная двухцветная схема: выбраны два случайных цвета и только они используются для отображения пиков сигнала. Со временем будут выбраны новые цвета. Используйте param, чтобы настроить скорость изменения цветовой схемы. Если ручка потенциометра «параметры» в верхнем положении, цвета будут меняться часто и каждый пик сигнала будет иметь новый цвет. Рекомендую установить ручку в средину.

Радуга: все пики сигналов отображаются как один и тот же цвет (с небольшим количеством случайных вариаций) и этот цвет меняется как радуга с течением времени. Скорость изменения цвета устанавливается потенциометром param.

Цветные частоты: в этом режиме каждый пик сигнала окрашивается в зависимости от частотной полосы где он находится. Самая низкая полоса красного цвета, и дальше вверх по спектру. Есть 8 полос частот: красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый, белый. Этот цветовой режим наиболее интересен, когда частотная характеристика настроена на все полосы частот.

Диапазон частот: вы можете управлять тем диапазоном частот, на который откликается цветомузыка. Чтобы установить диапазон нажмите и удерживайте обе кнопки. Используйте ручку param, чтобы выбрать, сколько из восьми частотных диапазонов будет показываться. Если вы хотите выделить бас и ритм музыки, установите частотную характеристику только на самые низкие 2 или 3 полосы. Если вы хотите показать все частоты в музыке (например, вокал и более высокие инструменты), выберите все полосы частот.

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

Ещё одна композиция

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

С наступающим 2018 годом!

Добавлено 15.12.2017 Эпилог или разбор полётов
1. Как изменить подсветку в паузах?
2. Можно ли изменить динамику?
3. Как подключить ленту с количеством светодиодов отличным от 60/120/180?
Плюс опубликована обновленная схема. Не волнуйтесь, добавили всего один резистор.
Осталось две недели до Нового года. Успеете собрать?

Добавлено 09.06.2018
Сделал настройки подсветки:
скетч и схема .
Пользуемся так.
Фоновая подсветка:
В паузах включается фоновая подсветка т.е вся линейка будет светится выбранным вами цветом и с выбранной яркостью.
Цвет: установите ручку потенциометра PARAM2 в среднее положение и один раз нажмите кнопку Background. Светодиодная линейка зажжется. Вращайте потенциометр PARAM2, цвет линейки будет меняться от красного до фиолетового. Выберите цвет и ещё раз нажмите кнопку Background.
Яркость: установите потенциометр в минимальное положение (ручку до упора по часовой) и нажмите кнопку Background. Линейка погаснет. Медленно вращая ручку потенциометра PARAM2 выберите требуемую яркость подсветки и ещё раз нажмите кнопку Background. Значения яркости запишется в память микроконтроллера.

Внимание! Новая программа не совместима со старыми скетчами.

Внешний вид новой программу ЦМУ

Программа поддерживает цветомузыкальные и динамические режимы работы.
В цветомузыкальном режиме для формирования цветовых эффектов используются выходы 19 цифровых полосовых фильтров. Значения на выходе цифровых фильтров в постоянном темпе передаются персональным компьютером и содержатся в массиве readData.
В динамическом режиме цветовые эффекты выполняются в темпе задаваемом программируемой задержкой. Для выполнения динамических программ подключение к ПК не требуется.
В программе можно выбрать одну из 4-х цветомузыкальных программ или одну из 8-ми динамических. Не все программы реализованы в прилагаемом скетче контроллера ленты. Я реализовал 3 цветомузыкальные и 4 динамические подпрограммы. Остальные программы вы можете составить сами.

Цветомузыкальные программы:
Радуга;
МИКС;
Двутавр;
Новая - оставлена под вашу реализацию.

Динамические программы:
1 - theaterChaseRainbow - из примеров к библиотеке Adafruit_NeoPixel, темп задается ползунком;
2 - rainbowCycle - из примеров к библиотеке Adafruit_NeoPixel, темп задается ползунком;
3 - мерцающие огни
4, 5, 6 - разные варианты бегущих огней
7..8 - оставлены под вашу реализацию.

Установка цвета всей ленты осуществляется выбором цвета на цветном поле;

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

Для реализации цветомузыкальных программ у вас есть выходы 19 полосовых фильтров. Вы можете обрабатывать их как вам угодно для получения красивой цветомузыкальной программы. Вы можете увеличить количество программ используя ползунок изменения параметра (250 состояний) для изменения цветовой программы.

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

Творите, выдумывайте, пишите, делитесь и каждый сможет сделать такое устройство, какое пожелает.

Скетч для варианта подключения к компьютеру «COMtoLED.ino»:

Дополнительная информация

#include #define ledPin 13 // светодиод на плате arduino #define stripPin 2 // выход управления светодиодной лентой #define stripLed 60 // количество светодиодов в ленте #define bandPass 15 // число полос ЦМУ (используемых светодиодов) #define ledDist 4 #define LedtoColor 4 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic "v1" (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel(stripLed, stripPin, NEO_GRB + NEO_KHZ800); const uint32_t PROGMEM colorTab={ 0xFF0000,0xFF1100,0xFF2200,0xFF3300,0xFF4400,0xFF5500,0xFF6600,0xFF7700,0xFF8800,0xFF9900,0xFFAA00,0xFFBB00,0xFFCC00,0xFFDD00,0xFFEE00,0xFFFF00, //красный - жёлтый 0xFFFF00,0xEEFF00,0xDDFF00,0xCCFF00,0xBBFF00,0xAAFF00,0x99FF00,0x88FF00,0x77FF00,0x66FF00,0x55FF00,0x44FF00,0x33FF00,0x22FF00,0x11FF00,0x00FF00, //жёлтый - зелёный 0x00FF00,0x00FF11,0x00FF22,0x00FF33,0x00FF44,0x00FF55,0x00FF66,0x00FF77,0x00FF88,0x00FF99,0x00FFAA,0x00FFBB,0x00FFCC,0x00FFDD,0x00FFEE,0x00FFFF, //зелёный - циан (голубой) 0x00FFFF,0x00EEFF,0x00DDFF,0x00CCFF,0x00BBFF,0x00AAFF,0x0099FF,0x0088FF,0x0077FF,0x0066FF,0x0055FF,0x0044FF,0x0033FF,0x0022FF,0x0011FF,0x0000FF, //голубой - синий 0x0000FF,0x1100FF,0x2200FF,0x3300FF,0x4400FF,0x5500FF,0x6600FF,0x7700FF,0x8800FF,0x9900FF,0xAA00FF,0xBB00FF,0xCC00FF,0xDD00FF,0xEE00FF,0xFF00FF, //синий - пурпур (маджента) 0xFF00FF,0xFF00EE,0xFF00DD,0xFF00CC,0xFF00BB,0xFF00AA,0xFF0099,0xFF0088,0xFF0077,0xFF0066,0xFF0055,0xFF0044,0xFF0033,0xFF0022,0xFF0011,0xFF0000}; //маджента - красный typedef union{ struct { uint8_t b,g,r,w; }; uint32_t dw; } TColor; typedef union{ struct { uint8_t b0,b1; }; uint16_t w; } TWord; uint8_t inCounter = 0; boolean stringComplete = false; // whether the string is complete char prog = "4"; uint8_t param = 10; char inStr; // a string to hold incoming data char readData; // a string to hold incoming data void setup() { // initialize serial: strip.begin(); strip.show(); // Initialize all pixels to "off" Serial.begin(115200); // reserve 32 bytes for the inputString: pinMode(ledPin, OUTPUT); } void loop() { // print the string when a newline arrives: if (stringComplete) { stringComplete = false; cmdExecute(); readData=0; Serial.println(readData); // Подтверждение - команда выполнена } else { switch (prog) { case "3": { theaterChaseRainbow(param); break; } case "4": { rainbowCycle(param); break; } case "5": { sub1(param); break; } case "6": { sub2(param); break; } // case "7": { sub3(param); break; } // case "8": { sub4(param); break; } } } } void cmdExecute() { prog = readData; param = readData; switch (prog) { case "r": { zmu(); break; } case "s": { zmu2(); break; } case "t": { zmu3(); break; } case "u": { zmu4(); break; } case "1": { white(param); break; } case "2": { color(param); break; } case "3": { theaterChaseRainbow(param); break; } case "4": { rainbowCycle(param); break; } case "5": { sub1(param); break; } case "6": { sub2(param); break; } // case "7": { sub3(param); break; } // case "8": { sub4(param); break; } case "c": { strip.clear(); strip.show(); break; } } } void sub1(uint8_t wait) { // Напишите свой код } void sub2(uint8_t wait) { // Напишите свой код } void zmu4() { TColor cl; TWord akk; uint8_t i,k; for(i=0; i

Скетчи для беспроводного варианта:
Скетч для модуля подключаемого к компьютеру «COMtoRF.ino»:

Дополнительная информация

#include // Подключаем библиотеку для работы с nRF24L01+ RF24 radio(9, 10); // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN) char rfData; // Создаём массив для передачи данных uint8_t rfCounter = 0; char serData; // a string to hold incoming data uint8_t serCounter = 0; boolean stringComplete = false; void setup(){ Serial.begin(115200); radio.begin(); // Инициируем работу nRF24L01+ radio.setChannel(5); // Указываем канал передачи данных (от 0 до 127), 5 - значит передача данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков) radio.setDataRate (RF24_1MBPS); // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек radio.setPALevel (RF24_PA_HIGH); // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm) radio.openWritingPipe (0x1234567890LL); // Открываем трубу с идентификатором 0x1234567890 для передачи данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора) } void loop(){ uint8_t i; if (rfCounter>0) { radio.write(&rfData,22); rfCounter=0; Serial.write(rfData,22); } } // SerialEvent void serialEvent() { uint8_t i; while (Serial.available()) { // get the new byte: char inChar = (char)Serial.read(); if (inChar != char(254)) { if (inChar == char(255)) { for(i=0; i<22; i++) rfData[i]=serData[i]; rfCounter = 22; serCounter = 0; // clear the input string: } else { serData = inChar; serCounter &= 0x1F; } } else serCounter = 0; // clear the input string: } }

Скетч для модуля ленты «RFtoLED.ino»:
#include // Подключаем библиотеку для работы с шиной SPI #include // Подключаем файл настроек из библиотеки RF24 #include // Подключаем библиотеку для работы с nRF24L01+ #include #define stripLed 120 // количество светодиодов в ленте #define bandPass 17 // полос (групп светодиодов) #define stripPin 2 // выход управления светодиодной лентой #define ledDist 7 #define LedtoColor 7 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic "v1" (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel(stripLed, stripPin, NEO_GRB + NEO_KHZ800); RF24 radio(9, 10); // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN) const uint32_t PROGMEM colorTab={ 0xFF0000,0xFF1100,0xFF2200,0xFF3300,0xFF4400,0xFF5500,0xFF6600,0xFF7700,0xFF8800,0xFF9900,0xFFAA00,0xFFBB00,0xFFCC00,0xFFDD00,0xFFEE00,0xFFFF00, //красный - жёлтый 0xFFFF00,0xEEFF00,0xDDFF00,0xCCFF00,0xBBFF00,0xAAFF00,0x99FF00,0x88FF00,0x77FF00,0x66FF00,0x55FF00,0x44FF00,0x33FF00,0x22FF00,0x11FF00,0x00FF00, //жёлтый - зелёный 0x00FF00,0x00FF11,0x00FF22,0x00FF33,0x00FF44,0x00FF55,0x00FF66,0x00FF77,0x00FF88,0x00FF99,0x00FFAA,0x00FFBB,0x00FFCC,0x00FFDD,0x00FFEE,0x00FFFF, //зелёный - циан (голубой) 0x00FFFF,0x00EEFF,0x00DDFF,0x00CCFF,0x00BBFF,0x00AAFF,0x0099FF,0x0088FF,0x0077FF,0x0066FF,0x0055FF,0x0044FF,0x0033FF,0x0022FF,0x0011FF,0x0000FF, //голубой - синий 0x0000FF,0x1100FF,0x2200FF,0x3300FF,0x4400FF,0x5500FF,0x6600FF,0x7700FF,0x8800FF,0x9900FF,0xAA00FF,0xBB00FF,0xCC00FF,0xDD00FF,0xEE00FF,0xFF00FF, //синий - пурпур (маджента) 0xFF00FF,0xFF00EE,0xFF00DD,0xFF00CC,0xFF00BB,0xFF00AA,0xFF0099,0xFF0088,0xFF0077,0xFF0066,0xFF0055,0xFF0044,0xFF0033,0xFF0022,0xFF0011,0xFF0000}; //маджента - красный typedef union{ struct { uint8_t b,g,r,w; }; uint32_t dw; } TColor; typedef union{ struct { uint8_t b0,b1; }; uint16_t w; } TWord; char readData; // Буфер команды char prog = "3"; uint8_t param = 0; void setup(){ // initialize serial: Serial.begin(115200); strip.begin(); strip.show(); // Initialize all pixels to "off" radio.begin(); // Инициируем работу nRF24L01+ // radio.setAutoAck(false); radio.setChannel(5); // Указываем канал приёма данных (от 0 до 127), 5 - значит приём данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков) radio.setDataRate (RF24_1MBPS); // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек radio.setPALevel (RF24_PA_HIGH); // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm) radio.openReadingPipe (1, 0x1234567890LL); // Открываем 1 трубу с идентификатором 0x1234567890 для приема данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора) radio.startListening (); // Включаем приемник, начинаем прослушивать открытые трубы } void loop(){ if(radio.available()){ // Если в буфере имеются принятые данные, то получаем номер трубы, по которой они пришли, по ссылке на переменную pipe radio.read(&readData, 22); // Приём команды cmdExecute(); } else { switch (prog) { case "3": { theaterChaseRainbow(param); break; } case "4": { rainbowCycle(param); break; } case "5": { sub1(param); break; } case "6": { sub2(param); break; } // case "7": { sub3(param); break; } // case "8": { sub4(param); break; } } } } void cmdExecute() { prog = readData; param = readData; switch (prog) { case "r": { zmu(); break; } case "s": { zmu2(); break; } case "t": { zmu3(); break; } case "u": { zmu4(); break; } case "1": { white(param); break; } case "2": { color(param); break; } case "3": { theaterChaseRainbow(param); break; } case "4": { rainbowCycle(param); break; } case "5": { sub1(param); break; } case "6": { sub2(param); break; } // case "7": { sub3(param); break; } // case "8": { sub4(param); break; } case "c": { strip.clear(); strip.show(); break; } } } void sub1(uint8_t wait) { // Напишите свой код } void sub2(uint8_t wait) { // Напишите свой код } void zmu4() { TColor cl; uint8_t i,k; for(i=0; i95) colorNumber=95; cl.dw = pgm_read_dword(&colorTab); cl.dw = strip.Color(cl.r, cl.g, cl.b); for(i=0; i


Работа программ Радуга, МИКС, Двутавр:






Добавить в избранное Понравилось +65 +147

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

Однако вернемся к фотографии. Само слово photographie от древнегреческого φως / φωτος - свет и γραφω - пишу, можно перевести как светопись, или техника рисования светом, что несет в себе идею одного из способов создания в застывшем мгновении реальности частицы вымысла и самое интересное в том, что ни какого обмана, на снимке именно то, что видела фотокамера в момент экспонирования. Верно, речь идет о таком направлении в фотографии как фризлайт. Именно этот способ создания необычных снимков некогда меня заинтересовал.


За кажущейся простотой метода вырисовывания источником света на матрице фотоаппарата, или пленке, следа оставляемого им, источником, при перемещении в пространстве кроется немало сложностей. Основной, из которых, является безупречная ориентация. Казалось бы, что может быть проще: палка, палка, огуречик вот и вышел человечек. Однако даже подобное художество способно вызвать затруднение при его воплощении. Это только на бумаге видно границы линий служащие ориентиром для дальнейшего написания следующего элемента, так шаг за шагом, штрих за штрихом и воссоздается задуманная картина. При рисовании светом тоже самое, только линий проведенных секунду назад в пространстве не остаётся, нет ориентиров, по которым ты мог бы продолжать вычерчивать сложившуюся в твоём воображении картину. При отсутствии опыта зачастую выходит свалка из элементов, или расчленёнка наоборот разрозненные между собой составляющие, а зрителю самому придется включать воображение, дабы понять, что хотел изобразить автор. И это в простом, что уж говорить о более сложных фигурах рожденных воображением. Признаюсь, фокусы с фонариком и у меня вызвали большие затруднения.

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

И вот как-то листая страницы любимого журнала, нашел интересный пост у d_a_ck9 , где была реализована отличная идея, автоматическая отрисовка изображения. Раньше увидев фотографии, выполненные с помощью подобных устройств, возникал вопрос: КАК, как это возможно? Погружался в поиск, находил какие-то схемы, сейчас уже не вспомнить, тогда при виде их, меня в дрожь бросало. Этот проект показался простым и я сразу им загорелся, почти так же, как воодушевляется ребенок при виде красивой картинки на упаковке конструктора лего демонстрирующей возможный результат при правильной сборке.

И так, подсчитав вытряхнутую из карманов мелочь, закупку оборудования пришлось делать несколькими этапами, по мере пополнения бюджета. И первое что я заказал это плату на платформе Arduino и плату расширения к ней для чтения SD-карт, собственно это и есть мозг устройства, именно ему предстоит управлять светодиодами, задавая порядок включения, интенсивность свечения и цвет каждому из них в отдельности.

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

Сердце устройства – микроконтроллер

Самым дорогостоящим элементом оказалась светодиодная лента. Светодиоды в ней не простые, а золотые фактически в одном корпусе заключены сразу три - это красный, синий и зеленый, а также ШИМ-драйвера управляющие их яркостью, для каждого из каналов возможны 256 градаций цвета.

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

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

Кисть ещё немного недоделана. Прежде предстоит придумать, из чего сделать рассеиватель. В обычный профиль для светодиодной ленты, у которого экран есть, мой экземпляр не помещается из-за силиконового чехла, пришлось заменить его кабель-каналом, а из чего сделать экран пока не придумал. Есть ещё несколько вещей, которые предстоит доделать и исправить. Всё же аппарат рабочий и эти мелочи не помешали провести полевые испытания устройства. А результаты эксперимента с прибитой к рейке ёлочной гирляндой покажу в следующем посте.

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

Чего только самобытные мастера не придумают. От трехцветных моргалок до лазерных многолучевых установок с управлением по MIDI интерфейсу.

Как большой поклонник, так называемых адресных светодиодов, хочу показать вам очень простую и удивительную цветомузыку. Я вообще такой ни разу не видел. Пока не собрал за один вечер. Итак, визуализатор звука!

Инструкция

Схема очень простая!


Вам понадобятся Arduino Nano, или Uno. Или какая там у вас есть? Два потенциометра, пять резисторов, пару конденсаторов и линейка (лента) из 180 светодиодов WS2812b. Всё! Светодиодов в линейке может быть 60, 120 или 180.

В визуализаторе с помощью алгоритма быстрого преобразования Фурье выделяются 8 частот (порог чувствительности на каждую частоту свой, снижается от 1 к 8), преобразуются в цвет и выводятся на линейку светодиодов по одному из восьми алгоритмов. Скетч писал Майкл Крампас, парни из Чип и Дипа добавили функционал, а библиотека для светодиодов и быстрого преобразования Фурье (FFT) написана в Адафрут для проекта Piccolo. Библиотека FFT для 128 точек, адаптированная для AVR микроконтроллеров написана на ассемблере.

Сам скетч и библиотеку FFT нужно скачать и .

Не теряйте время на разбор алгоритмов, просто соберите, залейте скетч и наслаждайтесь шоу.
Это всего лишь развлечение!

В момент первого включения нужно сделать пару настроек :

Яркость: удерживайте кнопку color при включении питания. На первых 8 светодиодах будет отображаться радуга светодиодов. С помощью ручки param измените яркость. По завершении нажмите кнопку color еще раз, и ваша конфигурация будет сохранена в памяти.

Длина светодиодной полосы: удерживайте кнопку pattern при включении питания. Отобразится один, два или три красных светодиода. Используйте ручку param, чтобы выбрать длину светодиодной полосы в зависимости от количества красных светодиодов:

1=60 светодиодов
2=120 светодиодов
3=180 светодиодов

По завершении нажмите кнопку pattern еще раз, и ваша конфигурация будет сохранена в памяти.

Алгоритмы

Танцы плюс: пики звуковых сигналов испускаются из центра полосы и исчезают по мере приближения к концам. Скорость пика пропорциональна величине звукового сигнала этого пика.

Танцы минус: то же, что и Dance Party, но пики сигналов испускаются с одного конца.
Импульс: пики сигналов отображаются как яркие импульсы, которые поступают из центра полосы. Ширина импульса зависит от уровня сигнала.

Световая полоса: в пиках освещается вся полоса.

Цветные полоски: пики сигналов отображаются как цветные полосы, которые исчезают.

Цветные полоски 2: подобно цветные полоски, но каждая полоска сжимается и исчезает.

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

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

Цветовые схемы

Случайная двухцветная схема: выбраны два случайных цвета и только они используются для отображения пиков сигнала. Со временем будут выбраны новые цвета. Используйте param, чтобы настроить скорость изменения цветовой схемы. Если ручка потенциометра «параметры» в верхнем положении, цвета будут меняться часто и каждый пик сигнала будет иметь новый цвет. Рекомендую установить ручку в средину.

Радуга: все пики сигналов отображаются как один и тот же цвет (с небольшим количеством случайных вариаций) и этот цвет меняется как радуга с течением времени. Скорость изменения цвета устанавливается потенциометром param.

Цветные частоты: в этом режиме каждый пик сигнала окрашивается в зависимости от частотной полосы где он находится. Самая низкая полоса красного цвета, и дальше вверх по спектру. Есть 8 полос частот: красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый, белый. Этот цветовой режим наиболее интересен, когда частотная характеристика настроена на все полосы частот.

Диапазон частот: вы можете управлять тем диапазоном частот, на который откликается цветомузыка. Чтобы установить диапазон нажмите и удерживайте обе кнопки. Используйте ручку param, чтобы выбрать, сколько из восьми частотных диапазонов будет показываться. Если вы хотите выделить бас и ритм музыки, установите частотную характеристику только на самые низкие 2 или 3 полосы. Если вы хотите показать все частоты в музыке (например, вокал и более высокие инструменты), выберите все полосы частот.

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

Ещё одна композиция

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

С наступающим 2018 годом!

Добавлено 15.12.2017 Эпилог или разбор полётов
1. Как изменить подсветку в паузах?
2. Можно ли изменить динамику?
3. Как подключить ленту с количеством светодиодов отличным от 60/120/180?
Плюс опубликована обновленная схема. Не волнуйтесь, добавили всего один резистор.
Осталось две недели до Нового года. Успеете собрать?

Добавлено 09.06.2018
Сделал настройки подсветки:
скетч и схема .
Пользуемся так.
Фоновая подсветка:
В паузах включается фоновая подсветка т.е вся линейка будет светится выбранным вами цветом и с выбранной яркостью.
Цвет: установите ручку потенциометра PARAM2 в среднее положение и один раз нажмите кнопку Background. Светодиодная линейка зажжется. Вращайте потенциометр PARAM2, цвет линейки будет меняться от красного до фиолетового. Выберите цвет и ещё раз нажмите кнопку Background.
Яркость: установите потенциометр в минимальное положение (ручку до упора по часовой) и нажмите кнопку Background. Линейка погаснет. Медленно вращая ручку потенциометра PARAM2 выберите требуемую яркость подсветки и ещё раз нажмите кнопку Background. Значения яркости запишется в память микроконтроллера.

просмотров