Arduino: LED цветомузыка

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

С Википедии:
Цветомузыкой называют электронное устройство для построения световых картин, формирования цветовых зрительных образов, сопоставленных с музыкальным сопровождением.

Что нам потребуется:

  • Arduino
  • Ethernet Shield
  • Светодиоды — 10 шт.
  • Резисторы 470 Ом — 10 шт.
  • Макетная плата или что-либо, на чём будете крепить светодиоды.

Схема соединения очень простая. С ней справится даже первоклассник. Светодиоды через резисторы подключаются на цифровые выводы с 0 по 9.
Схема подключения светодиодов
Схема подключения светодиодов
Вот так это поначалу выглядело у меня:
dsc_0039
Теперь прошиваем в ардуину следующий скетч:

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

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


Также прикладываю исходники плагинов.

Скачать
Скетч (1.26 KB)

Необходимые библиотеки для скетча:
Ethernet (29.73 KB)
SPI (7.49 KB)

Плагин для Winamp:
Плагин (227.16 KB)
Исходники плагина на Delphi (18.97 KB)

Плагин для AIMP:
Плагин (227.52 KB)
Исходники плагина на Delphi (24.94 KB)

Работа проверялась с Arduino IDE v0.22


Предупреждение!
Автор не несёт ответственности за возможную порчу оборудования. Всё, что вы делаете — вы делаете на свой страх и риск!