Простая LED цветомузыка через Ethernet

4 апреля 2012

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

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

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

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

Схема соединения очень простая. С ней справится даже первоклассник. Светодиоды через резисторы подключаются на цифровые выводы с 0 по 9.

Вот так это поначалу выглядело у меня:

Теперь прошиваем в ардуину следующий скетч:

colormusic1.ino
#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

  • arduino/prostaja_led_cvetomuzyka_ethernet.txt
  • Последнее изменение: 31.12.2025 15:40
  • r0wbh