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

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

Выше приведен скриншот программного обеспечения Studio One DAW (ПО для работы с цифровым звуком), которое мы используем для этого проекта. MIDI-трек в программном обеспечении DAW синхронизирован с песней. Используем Hairless MIDI для организации моста последовательной передачи данных для отправки MIDI-сигналов на Arduino. При этом плату Arduino мы запрограммируем для включения и выключения определенных реле в соответствии с полученными нотами. Таким образом, программное обеспечение DAW будет управлять светом в соответствии с ритмом песни. Ниже показана блок-схема устройства управления музыкальной гирляндой на основе Arduino.

Схема подключения Arduino и управляющих реле показана ниже.

Огни подключены к реле на платах. Три регистра сдвига 74HC595 используются для управления реле. Три байта используются для хранения световых состояний в программе (вкл / выкл). Музыкальное программное обеспечение отправляет MIDI-данные, которые принимаются Arduino, и устанавливает соответствующий бит одного из трех байтов равным 0 или 1. Три байта сдвигаются из регистров и затем фиксируются, поэтому реле включаются. или выключаются. После того, как все байты отправлены и процесс завершен, они фиксируются, что предотвращает включение или выключение реле при смещении данных.
Итак, соберите схему, как показано на рисунке, и подключите внешний источник питания реле. Снимите перемычку, которая есть в большинстве релейных плат, так как не рекомендуется получать питание, необходимое для работы реле, с платы Arduino.
Теперь настроим программное обеспечение. Установите Studio One (или любое программное обеспечение DAW). Можно использовать Studio One 2 Free. Большинство функций работают в бесплатной версии. Установите loopMIDI для создания виртуального порта MIDI. Запустите loopMIDI и запустите виртуальный порт MIDI.
Настройте порт loopMIDI как новый инструмент в программном обеспечении DAW. Для этого в Studio One 2 нажмите Ctrl +, выберите External Devices – Add – New Instrument – Send to: loopMIDI port – OK – OK.

Откройте этот файл (https://github.com/AkshayJames/arduino-midi-lights/blob/master/carol%20of%20the%20bells%20lights.song) с песней "Carol of the Bells", щелкните область, показанную ниже, и выберите New Instrument.

Если вы не используете Studio One, вы можете начать новую песню, создать MIDI-трек и отправить его вывод на вновь созданный инструмент.
Теперь загрузите основной код в Arduino:
/*
* GND (вывод 8) на землю,
* Vcc (вывод 16) на 5V
* OE (вывод 13) на ground
* MR (вывод 10) на 5V
*
* DS (pin 14) к цифровому выводу 9 платы Ardunio (синий провод)
* SH_CP (pin 11) к цифровому выводу 8 платы Ardunio (желтый провод)
* ST_CP (pin 12) к цифровому выводу 10 платы Ardunio (зеленый провод)
*/
#include"notes_bits.h"
// Вывод соединен с линией защелки (ST_CP) 74HC595
const int latchPin = 9;
// Вывод соединен с линией тактирования (SH_CP) 74HC595
const int clockPin = 8;
// Вывод соединен с линией данных (DS) 74HC595
const int dataPin = 10;
int pitch, cmd, velocity;
int light;
boolean state;
byte lightData1 = 0, lightData2 = 0, lightData3 = 0;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(38400);
}
void loop() {
// считываем MIDI-сигнал
if(Serial.available()>2) {
cmd = Serial.read();
pitch = Serial.read();
velocity = Serial.read();
// Свет зажигается согласно данным канала 1 (MIDI ch.1)
if(cmd==144) state=0;
else if(cmd==128) state=1;
// так, чтобы свет не менялся во время смещения новых данных
digitalWrite(latchPin, LOW);
light = getBit(pitch);
// установить соответствующий бит в lightData
if(light<8)
bitWrite(lightData1, light, state);
else if(light<16){
light-=8;
bitWrite(lightData2, light, state);
}
else {
light-=16;
bitWrite(lightData3, light, state);
}
Также создайте файл notes_bits.h. Скопируйте и вставьте приведенный ниже код.
int getBit(int p) {
switch(p) {
case 60: return 0; //note C3 (middle C)
case 62: return 1; //D3
case 64: return 2; //E3
case 65: return 3; //F3
case 67: return 4; //G3
case 69: return 5; //A3
case 71: return 6; //B3
case 72: return 7; //C4
case 74: return 8; //D4
case 76: return 9; //E4
case 77: return 10; //F4
case 79: return 11; //G4
case 81: return 12; //A4
case 83: return 13; //B4
case 84: return 14; //C5
case 86: return 15; //D5
case 88: return 16; //E5
case 89: return 17; //F5
case 91: return 18; //G5
case 93: return 19; //A5
case 95: return 20; //B5
case 96: return 21; //C6
case 98: return 22; //D6
case 100: return 23; //E6
}
}
Подключите гирлянду и питание к плате реле и подключите Arduino к вашему компьютеру. Затем откройте мост Hairless Serial to MIDI bridge и выберите порт Arduino в качестве последовательного порта, а порт MIDI в качестве loopMIDI. Затем перейдите File – Preferences – Set the Baud rate to 38400 – OK, чтобы установить скорость передачи данных в 38400 бод. Мы должны изменить скорость передачи, потому что нам нужно, чтобы она была выше, чем скорость передачи MIDI, которая составляет 31250 бод. Если скорость передачи ниже этой, у нас будет заметная задержка в индикации.
Затем отметьте опцию Serial – MIDI bridge. Вернитесь в Studio One и запустите песню. Вы должны увидеть мигание зеленого светодиода в мосте Hairless Serial to MIDI bridge. Если это так, то ваши реле также должны работать. Теперь вы увидите свое световое шоу в синхронизации с песней. Это может все выглядеть примерно так:
Или так:
© digitrode.ru