Arduino: LED цветомузыка
Изучал я как-то создание плагинов визуализации для медиаплееров, и тут мой взор упал на сборку светодиодов, которые я подключал к Arduino для проверки состояния выводов при тестировании различных скетчей. А почему бы не сделать аппаратную визуализацию музыки? Так я решил сделать простенькую цветомузыку.
С Википедии:
Цветомузыкой называют электронное устройство для построения световых картин, формирования цветовых зрительных образов, сопоставленных с музыкальным сопровождением.
Что нам потребуется:
- Arduino
- Ethernet Shield
- Светодиоды — 10 шт.
- Резисторы 470 Ом — 10 шт.
- Макетная плата или что-либо, на чём будете крепить светодиоды.
Схема соединения очень простая. С ней справится даже первоклассник. Светодиоды через резисторы подключаются на цифровые выводы с 0 по 9.
Вот так это поначалу выглядело у меня:

Теперь прошиваем в ардуину следующий скетч:
#include <SPI.h> // needed for Arduino versions later than 0018 #include <Ethernet.h> #include <Udp.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192,168,1,177 }; //IP ардуины unsigned int localPort = 53412; // локальный порт byte remoteIp[4]; unsigned int remotePort; // буфер для приёма/отправки данных char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //буфер для получения данных по сети void setup() { Ethernet.begin(mac,ip); Udp.begin(localPort); for (int i=0; i<10; i++) { pinMode(i,OUTPUT); digitalWrite(i, LOW); } } void loop() { // читаем пакеты данных при наличии int packetSize = Udp.available(); if(packetSize) { memset(packetBuffer, 0, sizeof(packetBuffer)); //обнуляем буфер packetSize = packetSize - 8; // subtract the 8 byte header Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort); for (int i=0; i<10; i++) { if (packetBuffer[i]=='1') { digitalWrite(i,HIGH); } else { digitalWrite(i,LOW); } } } //if(packetSize) }
Всё, что он делает, это получает по протоколу UDP строку из десяти нулей и единиц и соответствующим образом зажигает светодиоды. При необходимости меняем переменные ip[] и localPort.

Теперь подключаем плагин к Winamp или AIMP (необходимо скопировать DLL-файл в папку плагинов программы) и настраиваем его. Устанавливаем IP, порт (такие как в скетче) и выбираем режим визуализации. Ethernet Shield и компьютер соединяем по локальной сети.

Для открытия настроек плагина в AIMP щёлкните по чёрному полю визуализации.
В результате у меня получилась вот такая цветомузыка. На втором видео я всё разместил в небольшой коробочке, туда же воткнул и LCD-дисплей (о его подключении к этой же ардуине и использовании я расскажу в другой раз, как допишу программу управления). Сверху светодиоды накрыл пластиковыми баночками из под фотоплёнки.
Также прикладываю исходники плагинов.
Скетч
Необходимые библиотеки для скетча:
Ethernet
SPI
Плагин для Winamp:
Плагин
Исходники плагина на Delphi
Плагин для AIMP:
Плагин
Исходники плагина на Delphi
Работа проверялась с Arduino IDE v0.22
