Skip to main content
Version: ACS CC

Music Lights

A Raspberry Pi Pico system that synchronizes LED lighting with music

info

Author: Antonio-Christian Carazeanu
GitHub Project Link: link_to_github

Description

Music Lights is a project that uses a Raspberry Pi Pico to control an LED strip based on live music input. A microphone captures ambient audio, and a signal processing algorithm detects the beat and dominant frequencies. The LEDs react in real-time by changing color and brightness, creating an immersive audio-visual experience.

Motivation

The idea behind this project came from a desire to blend music with dynamic visual effects. I wanted to explore how embedded systems can process audio and produce synchronized lighting, making music more interactive and engaging.

Architecture

Arhitecture diagram

The project is composed of the following main components:

  • Microcontroller: Raspberry Pi Pico running real-time firmware using Embassy.
  • Audio Input: MAX4466 Microphone module connected to the Pico's ADC, capturing audio signals.
  • Signal Processing: Algorithm performing FFT using the microfft library to analyze frequencies.
  • LED Control: LED strip controlled via the RP2040's PIO unit using embassy-rp and a compatible WS2812 PIO program (like ws2812-pio or similar). Requires a Logic Level Shifter (3.3V to 5V) for the data signal.
  • Output: WS2812 LED strip visualizing music dynamically.

Connections:

  • Microphone Analog Out → Pico ADC GPIO (e.g., GPIO26)
  • Pico GPIO (PIO Output) → Level Shifter (Low Voltage Input)
  • Level Shifter (High Voltage Output) → LED Strip Data In (via ~330Ω resistor)
  • Buttons → Pico GPIO Inputs (with 10kΩ pull-up/pull-down resistors)
  • Pico USB → Power (for Pico) and programming
  • Separate 5V Power Supply → LED Strip (+5V, GND)
  • Separate 5V Power Supply → Level Shifter (HV Pin)
  • Common Ground: Crucial connection between Pico GND, Level Shifter GND, and the Separate 5V Power Supply GND.

Log

  • Week 5 - 11 May: Research and initial setup of Raspberry Pi Pico and LED strip. Completed the project description.
  • Week 12 - 18 May:
  • Week 19 - 25 May:

Hardware

  • Raspberry Pi Pico W (x2 - one for development/debug)
  • WS2812 LED Strip (3x 10cm segments = 18 LEDs)
  • MAX4466 Microphone Module
  • Logic Level Shifter Module
  • Jumper wires (M-M, M-F) and Breadboard
  • USB cables (for Pico power/programming)

Schematics

(KiCAD schematics to be added here)

Bill of Materials

ItemQuantityUnit PriceTotal PriceNotes
Jumper Wires for Breadboard17.99 RON7.99 RON
Raspberry Pi Pico W239.66 RON79.32 RON
Breadboard HQ (830 tie points)19.98 RON9.98 RON
White Pin Header 2.54 mm (40p)20.99 RON1.98 RON
Colored Jumper Wires Female-Male (40p, 15 cm)17.99 RON7.99 RON
Electrolytic Capacitor 1000 µF, 35 V12.99 RON2.99 RON
Electrolytic Capacitor 470 µF, 50 V10.79 RON0.79 RON
USB Cables (for LEDs and Pico)2--Powered from laptop
Addressable LED Strip WS2812, 10 cm (60led/m)32.69 RON8.07 RON
Button 12x12x7.3 mm21.10 RON2.20 RONFor switching LED modes
Button Cap 12x12x7.3 mm, Blue10.34 RON0.34 RON
Button Cap 12x12x7.3 mm, Red10.34 RON0.34 RON
MAX4466 Microphone Module with Amplifier17.18 RON7.18 RON
4-Channel Logic Level Converter Module14.00 RON4.00 RON
330 Ω Resistor20.12 RON0.24 RONFor buttons
10k Ω Resistor10.13 RON0.13 RONFor data line

Estimated Total: ~ 133.84 RON (excluding USB cables)

Software

This list details the recommended Rust crates for the "Music Lights" project using the Embassy async runtime on the Raspberry Pi Pico.

CategoryLibrarycrates.io LinkDescription & Usage in Project
Runtime Asyncembassy-executorlinkCore asynchronous task executor. Runs all concurrent operations.
embassy-timelinkAsync time primitives (Delay, Timer, Instant). Essential for timing.
embassy-synclinkAsync synchronization (Mutex, Channel, Signal). For safe data sharing between tasks.
HAL (Embassy)embassy-rplinkAsync HAL for RP2040 peripherals (ADC, PIO, GPIO, DMA, etc.).
LED Controlws2812-piolink(Recommended) PIO program & driver for WS2812 LEDs.
piolinkBase crate for defining PIO programs (dependency for ws2812-pio).
Audio Proc.microfftlinkno_std Fast Fourier Transform implementation for frequency analysis.
libmlinkno_std math functions (sqrt, powf, etc.) for FFT post-processing.
Core Embeddedcortex-mlinkLow-level access to ARM Cortex-M core APIs.
cortex-m-rtlinkMinimal runtime for Cortex-M (entry point, exceptions).
panic-probe or panic-haltlink linkPanic handler implementation. panic-probe works well with defmt.
Loggingdefmtlink(Recommended) Efficient embedded logging framework.
defmt-rttlink(Recommended) RTT transport for defmt (requires debug probe).
HAL Utilitiesembedded-hal embedded-hal-asynclink linkStandard HAL traits used for interoperability (often dependencies).
embedded-io embedded-io-asynclink linkStandard IO traits (often dependencies).

Notes:

  1. ws2812-pio or a similar PIO-based implementation is recommended for controlling WS2812 LEDs with embassy-rp on the RP2040, leveraging its Programmable I/O capabilities. An alternative like ws2812-spi might require adaptation for async use.
  2. Using defmt also typically involves adding defmt-rtt for transport and a suitable panic handler like panic-probe. Basic runtime crates like cortex-m and cortex-m-rt are also fundamental dependencies.