VU meter on speaker

Dual channel VU meter using Arduino Uno (Atmega328p) and NeoPixel LED strips. Strips mounted around each two speakers.

Similar projects worth following
I am making a stereo VU meter. Audio level is displayed on NeoPixel LED strips (separate for each channel), Arduino measures audio levels and drives both LED strips. Strips are mounted around the speakers forming a circle (strip starts and ends on the bottom side of the circle). Actual audio level is represented on one side of the circle - the other is mirrored, e.g. if I need to display current audio level for the channel on 5 LEDs, I light up 5 LEDs from the circle bottom clockwise and 5 LEDs counter-clockwise.

For Arduino part I am adapting Adafruit LED Ampli-Tie project (details here: In addition I would like to implement several modes for my VU meter which are changed by a button press (e.g. different preset colors). I also want to have a mode where I set a color using a potentiometer and map it's value to RBG color for the strip. Another mode would be nice to have where colors are changing gradually and the speed of color change is set by the same potentiometer.

When I am done with prototyping, I want to put LED strip driver inside my homemade amplifier, have the pot I mentioned, mode changing button, button to on/off VU meter have connectors for wires which connects LED strips to Arduino.

  • All done

    Matikas11/24/2015 at 19:43 0 comments

      I have completed my project and I am really satisfied with the result. It was not difficult to make this VU meter, but I had some challenges which I solved and learned a lot. I would say that the hardest part was to put everything together: LED strips around the speaker hiding wire inside the speaker box, making settings panel and putting the microcontroller board in amplifier case.

      Audio signal is biased at Vcc/2 and fed into opamp, then to ATmega328 which controls NeoPixel LED strips.

      During development I was using my old mp3 player with USB and my first version of hardware seemed fine - I had a cap at opamp feedback and voltage reference circuits. They were dampening signal and removing noise. It was really surprising that the circuit met my theoretical model(!). Audio line level met standard (, but when I was almost done and connected VU meter to my PC sound card, it almost always was saturated - all LEDs had been turned on. If I reduced expected reference ADC value, VU meter of course showed lower level but still levels were barely changing. Then I read somewhere (really sorry, don't have link any more...) that audio equipment manufacturers often want that their products sound louder so they increase the audio level their devices output. The same story with my PC sound card. At the end, I have got rid of those dampening and filtering caps, fine tuned reference ADC value for my PC and I works great now (if I plug my mp3 player - max only half of the LEDs light on [scale is logarithmic]).

      Another thing worth to mention is settings buttons. Came to debouncing problem, as everyone had in their lifetime. To implemet debounce in hardware, I have connected external interrupt pins to ground through resistors and put small capacitor in parallel. When button is pressed - Vcc is fed to external interrupt pins. It worked great during development - no double or triple interrupts on button press. For testing I was using my 5V 20A power supply, but when finishing project switched to be used 5V 1.5A supply, strange things started to happen - ATmega was resetting after any external interrupt button press. After some hours I made a conclusion, that during button press, when the capacitor between interrupt pin and ground is empty, it starts charging and requires quiet amount of current, thus power supply voltage drops below 5V and, I guess Arduino bootloader has brown-out detection enabled, and ATmega resets. I really did not want to make any changes to my complete PCB, so I just hooked a big cap (10mF) between PSU Vcc and GND and it solved the problem. Not a great solution, but works great.

      Oh, by the way about the specs - VU meter has 4 modes:

      1. classic where bottom leds are green, few in the middle yellow and top - red;
      2. rainbow;
      3. preset color;
      4. cycle color;

      There are 2 buttons - one for changing mode and another (called "POT") for enabling potentiometer read. Potentiometer sets setting according by mode. If mode is classic or rainbow - it changes brightness. For preset color mode it changes color and for cycle color mode it changes color cycle speed. After pressing "POT" button again it saves settings to EEPROM and loads it when device is powered again (the same with changing mode).

View project log

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates