DIY Automatic Musical Christmas Lights (MSGEQ7 + Arduino)




Introduction: DIY Automatic Musical Christmas Lights (MSGEQ7 + Arduino)

About: Just about anything you can do yourself.

So every year I say am going to do this and never get around to doing it because I procrastinate a lot. 2020 is a year of change so I say this is the year to do it. So hope you like and make your own musical Christmas lights. This is going to be a simple guide but next year I plan to do a lot more with this project.

Full project video:


Bluetooth Receiver

Arduino Nano or

PRO Mini

(going to need to program it)


MSGEQ7 Module

MSGEQ7 Shield



Relays - Mechanical or

Solid State X3

Solid State 4 channel

8x8 LED display

Solder-able Breadboard

Hook Up Wire Kit

JST Adapters

3.5mm Stereo Jack Socket

Power Supply Module

9V 1A Power Supply

AC Plug, AC sockets and electrical box from any local hardware

Tools used (not bought for this video just general stuff I have):

Solder Iron:

Repair Mat:

Lead-Free Solder Wire:

Magnetic Helping Hands:

Multimeter: (my next buy)

Circuit Board Holder

This post contains affiliate links, which help support my channel.
If you purchase through one of my links, I may earn a small commission; at no extra cost to you

Step 1: How This Works - MSGEQ7

So the main component of this project would be the MSGeq7. This is a seven-band graphic equalizer IC is a CMOS chip that divides the audio spectrum into seven bands, 63Hz, 160Hz, 400Hz, 1kHz, 2.5kHz, 6.25kHz and 16kHz. The seven frequencies are peak detected and multiplexed to the output to provide a DC representation of the amplitude of each band. No external components are needed to select the filter responses. Only an off-chip resistor and capacitor are needed to select the on-chip clock oscillator frequency. The filter centre frequencies track this frequency.


So all in all a really easy to use IC.

Step 2: Test Circuit

The datasheet for msgeq7 provides the typical application circuit diagram which I followed and used to design the circuit for this project.

Take note of the values of the specific resistors and capacitors. I have 2 x 3.5mm stereo audio jacks to allow for a Bluetooth module to input audio to be sensed by the msgeq7. You would need two 22k resistors and a capacitor to isolate the MSG and allow the other jack is to output to a speaker via an AUX cable.

Also, I replaced the LEDs later with relays (they are basically the same thing in the realm of this project) to then control some Christmas lights.

The LEDs represent the audio "lows" "mids" "Highs". The plan is to sense the frequency amplitudes and determining a trigger point which will then turn on the light.

I also added an 8x8 led matrix to give a nice audio visualization of the audio frequency as they are being played.

The code can work with any Arduino board but I am using nano for testing and Pro Mini in the finial board.

Step 3: Code

So the code again is pretty simple.

Full code:

The code needs the LedControl library for the 8x8 display MAX7219. Other than that no other extra library is needed and the code is stand alone.

In the loop, I check the different bands from the MSG and scaling the values between 0 and 7 to be displayed on the 8x8 matrix. I then store the values into an array to be quickly processed right after.

These amplitude values are then checked to see if they cross a set value. If they do I put on the light.

band 0,1,2 = LOWs (63Hz to 400Hz)

band 3 = MIDs (400Hz to 2500Hz)

Band 4,5,6 = HIGHs (2.5KHz to 16KHz

This was more of a personal choice based on observations which gave the best lighting effect in my opinion. This can be tweaked and changed to suit any type of music or light show.

Since I ended up using mechanical relays cause that is all I had at the moment I added a flag system to allow the replays to stay on for a minimum amount of time as to not cause over switching/fast oscillations that may damage the relays and affect the musical lighting.

Once the time is passed and the amplitude isn't triggered again the led would come off and the process continues.

I am using millis(), not delays for this to not have the code blocking with delays. So the code runs really fast and efficient.

Step 4: Adding Relays

WARNING: Please be careful when dealing with AC voltages. Please get help from a professional/Electrician if you are unsure. Note I am a licensed wireman.

For this project, I am using mechanical relays cause the Solid-state relays I had are only for DC voltages/


I recommend you get a set of SSRs if you don't already have mechanical relays and plan to do this project.

They are faster and more importantly quieter. Note SSR have lower current levels than mechanical relays to take note of how much lights you want to put on one plug and gauge the current draw.

Step 5: The Board That Does It All.

After getting everything to work how I wanted I placed everything on a solderable breadboard.

Its the same circuit diagram as before just this time I used an old laptop audio jack for the audio in and out.

I have an Arduino pro mini and a breadboard power supply so the board can be powered from a 12v dc jack/

The 8x8 display is attached to one of the screws holes.

The relay has as 6 pin JST connector that would supply Gnd, 5v, and 4 GPIOs to control the 4 relays. For this project, I am only using 3 of these relays while the 4 plug is normal close and would be used as a hard reset for the future and to power the board.

Step 6: Done + Future

Full project video:

You can Like share and subscribe.

Next year I want to add wifi and an RTC to allow remote and time control. Also, an FM transmitter so cars would be able to tune into the audio. Most importantly I would switch the relays out for SSRs. I could also switch the MSGEQ7 for a DSP and do a proper analysis of the audio for better lighting effects.

Hope everyone has a Great Christmas and a Happy new year.

Anything Goes Contest

Participated in the
Anything Goes Contest

Be the First to Share


    • For the Home Contest

      For the Home Contest
    • Make It Bridge

      Make It Bridge
    • Game Design: Student Design Challenge

      Game Design: Student Design Challenge



    Tip 2 years ago on Step 5

    Here are some improvement ideas. First, for each audio frequency band, have 2 light channels. One of the lights turns on when the audio energy gets higher, and the other turns off. This way, no matter what the audio is doing, there is always light.
    Second, use triacs (or SSR's that allow phase control) to drive the lights. This will permit smooth dimming, not just off-on.
    Third, universal problem with "color organs" is that the dynamic range of the audio is greater than the lights (in quiet passage, lights are always off, in loud passage, lights are always on). You solve this by having "automatic gain control" on the input audio, which adjusts the gain to keep the lights "active". The gain adjustment circuit should have a time constant of about 20 seconds. If the front-end analog circuitry and the A/D converter have enough dynamic range (12-14 bits), you can do the "gain control" in software.
    If you want to get real fancy, use the Arduino to generate digital multiplex code (DMX). This can be used to drive standard DMX stage lights, or stage "dimmer packs" (which can drive incandescent lights).


    Reply 1 year ago

    gona add this to plans for this years light show


    2 years ago

    I'm finding you everywhere this is a nice project. The SSR would be a plus since the mech R wouldn't take the much of Barrons music lol


    Reply 2 years ago

    HAHA thanks, yea need ssr for next year for sure


    2 years ago

    Nice project; I wonder what the SSR operation would look like compared to the mechanical version?
    Bob D


    Reply 2 years ago

    SSRs would have a near instant response time, making the lights seem more 'in sync' with the music


    Reply 2 years ago

    That makes sense, I will keep an eye to see if anyone makes a version with the SSR's.
    Thanks again for sharing,
    Bob D