LPD8806 VUMeter With PC & Arduino + GUI

Intro: LPD8806 VUMeter With PC & Arduino + GUI

If you like this project please vote for it in the "Sensors Contest 2016" and "Rainbow Contest 2016" as it took me a lot of time to make it (pressing the top-right button that says "Vote").

I have always wanted some kind of LED VU-Meter because I like music and LEDs but all of the devices I found online had an integrated microphone or used a lot of pins (so a shift register was required), and I didn't want that. I wanted to display on the VU-Meter only the music played on my PC, so I needed a PC-based solution. And this is it.

In this instructable I will be showing how to make a VU-Meter with a LPD8806 or WS2801 based LED strip and a PC without the need to install any compiler (like Python).

Let's get started.

Step 1: Component List

This step is pretty short as we only need:

  1. A LPD8806/WS2801 based LED strip
  2. An Arduino (or any other microcontroller that supports SPI protocol)
  3. A Windows PC
  4. A power supply for the LEDs (optional but recommended). If you have more than 5 LEDs it is recommended to use an external power supply as the Arduino won't be able to supply a lot of current. I use the 5V rail of my PC's power supply.

Done! You don't need anything else so let's move on.

Step 2: How It Works

The PC program processes the audio coming from the sound input devices (not in dB but in RMS) and sends it to the Arduino. The best thing is that you don't actually need a MIC or any cables at all. You can just set up the "Stereo Mix" virtual device in the "Sound Recording Devices" menu.

After processing the audio the program sends the data over the serial port and the Arduino processes it by using the Adafruit code (thank you guys for reverse-engineering the LPD8806 protocol!). That's another advantage: the Arduino uses the same code used in the Adalight (or similar) system, so if you have built one there is no need to change the code.

The PC program (made with Python) is pretty complete: it has a lot of features like changing the LEDs' colour, a mono or stereo mode, a mode to show the peak LED and a lot more!

The GUI is made with Tkinter for Python 2.7

Step 3: Diagram and Installation

Note: Make sure you connect the LED's as they are in the image. Also, make sure to connect the GND cable on one end of the LED strip and the 5V on the other end. This is needed to "split" the current evenly through all the LEDs, so there won't be any LED brighter than any other.

Step 4: The Arduino Code

This is step is very short. The only thing you need to do is download the code you need depending on the type of chip the LED strip has (LPD8806 or WS2801). The code is made by Adafruit!


Step 5: The PC Program

Below is a link to my GitHub repository. There are two files. One is the source file. It is written in Python so, if you want to edit it and run it, you will need Python 2.7 with the pyserial and pyaudio libraries.

The other file is a .exe. If you just download the .exe you won't need to install Python to run it.

The first time you run the program a new file will be created "RGB_VUMeter.ini" (you can hide it). This is used to save the current settings. If this file has a wrong format or doesn't exist then the program will replace it or create a new one.


Note: You need to set up the "Stereo Mix" virtual device in the "Sound Recording Devices" menu.

Step 6: That's All!

That's all! Now enjoy your fancy LED VU Meter!

If you like this project please vote for it in the "Sensors Contest 2016" and "Rainbow Contest 2016" as it took me a lot of time to make it (pressing the top-right button that says "Vote").



    • Optics Contest

      Optics Contest
    • Electronics Tips & Tricks Challenge

      Electronics Tips & Tricks Challenge
    • Audio Contest 2018

      Audio Contest 2018

    3 Discussions

    Nicolas BritosDelta1Dan

    Reply 10 months ago

    Hi, you can't do that with the current version, but you can edit the source code in order to control more arduinos. Depending on what you are trying to achieve, this can be done in very little time. If you only want to connect to another Arduino (2 arduinos at different COM Ports) then you just need to create another serial com instance (with name f.e. "arduino2") and just go to every place where it says "arduino" and copy the same line but writting "arduino2".
    I don't have time right now as I am really busy but later on I will try to add that feature.