Materiales necesarios
- Arduino UNO / Nano (o compatible)
- Tira WS2812B (NeoPixel) 30-60 LEDs
- Resistor 470 Ω y capacitor 1000 µF
- Cable MIDI DIN-5 o módulo MIDI-USB
- Fuente 5 V ≥ 2 A
- Arduino IDE + librería FastLED
Esquema de conexión
Arduino WS2812B
5 V → 5 V
GND → GND
Pin 6 → DIN (con 470 Ω en serie)
MIDI DIN-5 → RX pin 0 (HardwareSerial) o SoftSerial en pin 8/9.
Código Arduino (extracto)
#include <FastLED.h>
#define LED_PIN 6
#define NUM_LEDS 30
CRGB leds[NUM_LEDS];
byte midiClock = 0;
const int BPM = 120; // inicial
const int PPQ = 24; // pulsos por compás
void handleClock() {
midiClock = (midiClock + 1) % PPQ;
float pos = (float)midiClock / PPQ; // 0..1
uint8_t hue = pos * 255; // arco iris
fill_rainbow(leds, NUM_LEDS, hue, 255/NUM_LEDS);
FastLED.show();
}
void setup() {
FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);
Serial.begin(31250); // MIDI baud-rate
}
void loop() {
if (Serial.available() > 0) {
byte data = Serial.read();
if (data == 0xF8) handleClock(); // MIDI Clock
}
}
WebMIDI Clock desde el navegador
navigator.requestMIDIAccess()
.then(access => {
const output = access.outputs.values().next().value;
setInterval(() => output.send([0xF8]), 20.83); // 120 BPM
});
Activa MIDI-USB en tu Arduino (por ejemplo, con Hairless MIDI) y selecciónalo como dispositivo.
Efectos visuales sincronizados
- Snare hit: flash blanco instantáneo.
- Bass kick: estrella que se expande desde el centro.
- CC 16 → controla saturación (HSV).
- Tap-tempo: recalcula intervalo con 2 pulsos.