Dancing LEDs: 3-Channel Music-Reactive Light with RC Filters and BC547
A color organ splits music into frequency bands and flashes a different set of lights for each: bass drums pump the red LEDs, vocals flicker the green ones and cymbals sparkle the blue. Unlike a simple sound-activated flasher, where all LEDs blink together, a three-channel design makes the lights follow the character of the music.
This project uses passive RC filters to separate the bands and a BC547 transistor per channel to drive strings of LEDs from a 12 V supply. It takes its signal from the speaker output of a small amplifier, such as an LM386 amplifier. You will learn how first-order RC filters work, how to calculate their corner frequencies, and how to size LED string resistors.
Components Required
| Part | Value / Type | Quantity |
|---|---|---|
| Sensitivity presets VR1 to VR3 | 4.7 kilo-ohm | 3 |
| Bass filter | 470 ohm series, 2.2 microfarad to GND | 1 each |
| Mid filter | 470 nanofarad series, 47 nanofarad to GND | 1 each |
| Treble filter | 100 nanofarad series | 1 |
| Base resistors | 1 kilo-ohm | 3 |
| Clamp diodes | 1N4148 | 3 |
| NPN transistors | BC547 | 3 |
| Red LEDs (bass) | 5 mm red | 12 |
| Green LEDs (mid) | 5 mm green | 8 to 12 |
| Blue LEDs (treble) | 5 mm blue | 8 |
| String resistors | 330 ohm | 12 |
| Power | 12 V DC adapter, 500 mA | 1 |
| Signal source | Small amplifier with ground-referenced speaker output | 1 |
Circuit Explained Stage by Stage
Stage 1: Input and sensitivity
The amplifier's speaker output is connected across three 4.7 kilo-ohm presets in parallel, one per channel. Their combined 1.6 kilo-ohm load is negligible next to an 8 ohm speaker, so the speaker keeps working. Each preset's wiper sets how much signal its channel receives, so you can balance the three colours.
Stage 2: Band filters
A first-order RC filter has a corner frequency f = 1 / (2 x pi x R x C). The bass channel uses a low-pass: 470 ohm in series and 2.2 microfarad to ground, which passes low notes and attenuates higher ones. The treble channel uses a high-pass: 100 nanofarad in series feeding the 1 kilo-ohm base resistor. The mid channel combines both: 470 nanofarad in series for a high-pass, then 47 nanofarad to ground after the 1 kilo-ohm resistor for a low-pass.
Bass low-pass: 1 / (2 x 3.14 x 470 x 2.2 uF) = about 154 Hz Mid high-pass: 1 / (2 x 3.14 x 1 k x 470 nF) = about 340 Hz Mid low-pass: 1 / (2 x 3.14 x 1 k x 47 nF) = about 3.4 kHz Treble high-pass: 1 / (2 x 3.14 x 1 k x 100 nF) = about 1.6 kHz
These are starting values. The preset's own resistance and the transistor's base loading shift the real corners, and first-order filters roll off gently, so the bands overlap. Adjust by ear rather than expecting sharp separation.
Stage 3: Transistor LED drivers
Each filtered signal drives a BC547 base through 1 kilo-ohm. The transistor conducts only on positive peaks above about 0.6 V, so quiet passages leave the LEDs off and loud beats switch them on, which is exactly the dancing effect. A 1N4148 from base to ground, cathode to base, clamps negative peaks so the base-emitter junction is never reverse-biased beyond about 0.7 V.
Stage 4: LED strings
R = (V_supply - n x V_LED - V_CE(sat)) / I_LED Red, 3 in series (about 2 V each): (12 - 6 - 0.2) / 330 = about 17.6 mA Blue, 2 in series (about 3 V each): (12 - 6 - 0.2) / 330 = about 17.6 mA Green: check your LEDs; standard green is about 2 V, pure green about 3 V
Each channel drives up to four strings in parallel, each with its own resistor, keeping the total under about 70 mA, well inside the BC547's 100 mA collector rating. Never parallel LEDs without individual resistors; small differences in forward voltage make one string hog the current.
| Channel | Filter | LED strings | Driver |
|---|---|---|---|
| Bass | 470 ohm series, 2.2 uF shunt | 4 strings of 3 red | BC547 Q1 |
| Mid | 470 nF series, 1 k, 47 nF shunt | 3 to 4 strings of 3 green (or 2 if pure green) | BC547 Q2 |
| Treble | 100 nF series, 1 k | 4 strings of 2 blue | BC547 Q3 |
How It Works
Music reaches all three filters at once. A kick drum carries most of its energy below 150 Hz, so it mostly passes the bass filter and drives Q1 hard, flashing the red LEDs. Vocals and guitars fall mainly in the mid band and light the green LEDs. Hi-hats and cymbals contain high frequencies that pass the treble filter and flash the blue LEDs. The emitters are grounded and the LED strings connect from +12 V to each collector, so each transistor works as a low-side switch.
Assembly and Testing
- Build the LED strings first and test each by grounding the string's lower end. Every LED should light.
- Build one channel's filter and driver, connect the 12 V supply, and join its ground to the amplifier ground.
- Play music with strong bass at moderate volume. Raise VR1 until the red LEDs pulse with the beat.
- Add the mid and treble channels and balance them with VR2 and VR3.
- A tone generator app on a phone is useful: sweep from 50 Hz to 5 kHz and watch the light move from red to green to blue.
Troubleshooting
- LEDs do not respond at normal volume: the signal is too small to reach 0.6 V. Raise the amplifier volume, turn up the presets, or add a BC547 preamplifier stage.
- LEDs stay on all the time: the amplifier output has a DC offset. Add a 10 microfarad coupling capacitor before the presets.
- All colours flash together: the filters overlap a lot. Narrow them by moving the corner frequencies further apart.
- Amplifier distorts when connected: check that the presets really are 4.7 kilo-ohm and that the output is not bridge-tied; disconnect at once until you have checked.
- One string brighter than others: a string resistor is missing or wrong.
Summary
Three first-order RC filters split the music into bass, mid and treble, and three BC547 switches drive coloured LED strings from 12 V. You calculated filter corners with f = 1/(2 pi RC), sized LED string resistors, and saw why each string needs its own resistor.