Update December 2014: a kit containing all the circuit parts for this project is now available from Jameco Electronics. See the Materials step for details.
The inspiration for this project started when I saw a variety of awesome stereo LED towers on YouTube (also referred to as VU meters). Many of the videos showed the end result, and maybe a slideshow of the assembly process, but lacked complete build details or a circuit diagram. So, I set out to find out how they worked, and build my own "mini" desktop version that would go nicely with computer speakers, instead of a big living room stereo. This Instructable will give you complete directions to assemble the required circuit (even if you have no electronics experience - you can even do it without soldering), build two LED towers, and hook them up to an audio input so you can simultaneously drive them and listen to music.
To give credit where credit is due - if you search Instructables, there are a lot of "make LEDs respond to music" type projects. They range from rather simple, like using a transistor to drive a single LED; to using an Arduino or a Raspberry Pi to make an audio equalizer. This project lies somewhere in between - it uses a handy "LED driver" chip called the LM3914. The chip can drive a bar of 10 LEDs proportionally to an analog input, with no microcontroller required. So, using two of the chips with a simple circuit and stereo sound is sufficient to drive two separate volume towers.
While there are already a handful of Instructables about using the LM3914, I'm hoping this new one can contribute two things: a very clear explanation of how the circuit works along with assembly instructions, and a way to make aesthetically-pleasing LED towers that will look nice on a computer desktop, instead of just sticking all the LEDs on a breadboard. Head on to the next step for a full materials list - but first, a quick note about some of the resources I used:
I owe a special thank you to the SoHa SMART makerspace for letting me use their laser cutter for this project. I also used the UP! Plus 3D printer I won in last year's UP! contest. I have my fingers crossed for this year's Epilog Challenge, as it would be great to have my own laser cutter for projects like this in the future. As I've learned from previous projects, cutting acrylic with a jigsaw is a pain. Scoring it with a plastic-cutting knife or utility knife and snapping it works OK for rectangular pieces, but that quickly becomes a limiting factor if you want to do more complicated shapes. However, if you don't have access to a 3D printer and/or laser cutter, don't despair! You can still follow the instructions to build the circuit, you will just need to come up with an alternate method for building the LED towers. I'll provide some suggestions for that in the following steps.
Some helpful updates thanks to the comments:
- You can chain together multiple chips to make each tower have more than 10 LEDs. See this video for a demonstration and page 11 of the LM3914's datasheet for instructions on how to connect multiple chips.
- Thanks to switch62 for pointing out that technically the LM3914 makes a voltmeter and not a VU meter, because its voltage divider has a linear scale. There are two similar chips, the LM3915 and LM3916, that are almost exactly the same, but have logarithmically-scaled voltage dividers, corresponding to certain points on a decibel (dB) scale. This seems like a common misconception (most of the YouTube videos I saw originally referred to LM3914 VU meters), but if anyone tries this out with one of the other chips, let me know! I'm curious how different the output would look. Update: thanks to taborj for testing all three chips - see his comment below for details.
Step 1: Materials
Update December 2014: a kit containing all the circuit parts for this project is now available from Jameco Electronics. There are two modifications to the kit from the original list below. First, it contains stranded hookup wire instead of the (more expensive) M-F jumper wires, so you will need a soldering iron. Second, based on feedback from the comments (see below), it contains the LM3916 LED driver chip in addition to the LM3914. The pinouts are the same, so you can swap the chips out and use whichever one you like best. Full disclosure: I earn a commission on any Jameco sales, as outlined at the bottom of this page. I did the math and it's actually about $5 cheaper to buy the kit through Jameco than it is to buy all the individual components through them separately. But obviously, if you can source the components elsewhere cheaper, or already have some of them laying around, there's no real reason to buy the kit. For reference you can submit your own kit designs at clubjameco.com.
The following is an exact list of the materials I used. Of course, there is room for customization in this project (i.e. if you want to use different color LEDs, or design your own towers), so you can alter as you see fit.
- (2) LM3914 LED driver chip. Note that you can also request free samples of the chip from Texas Instruments.
- Note: as switch62 pointed out in the comments, technically the LM3914 is a linearly-scaled voltmeter, and not a logarithmically-scaled VU meter. There are two similar chips, the LM3915, and LM3916, with logarithmic scales, intended specifically for use with audio signals. I didn't find out about this until after I did the project, and I'm happy with how the LM3914 worked out, but you can still try substituting one of the other chips. Just be careful to check their respective datasheets to see if there are any other changes you'd need to make to my circuit.
- (1) half-size solderless breadboard
- (1) 3xAA battery holder with cover and switch
- (3) AA batteries
- (3) 10k potentiometer
- (1) SPDT slide switch
- (20) LEDs. I used 4 each (2 per tower) of blue, green, yellow, orange, and red.
- If you have a soldering iron, you can use stranded hookup wire (more flexible than solid-core wire, so better for moving the towers around on a desk).
- If you want to avoid soldering, SparkFun carries an assortment of male-female jumper wires available in 6" and 12" lengths. You will need 22 wires total (20 LEDs in two sets of 10 - each set has a common anode, then individual connections for each cathode). I used these because I already had a bunch laying around for use with my Raspberry Pi, and they make it easier to disconnect the towers.
- Note that you will need to cut this cable in half and strip the ends to expose the individual ground and left/right audio wires. SparkFun sells a 3.5mm audio jack but I've found that it doesn't work very well with solderless breadboards because it doesn't sit flush with the surface when you plug in the cable, so it looks like it was designed for real PCBs. This one from Adafruit might be a better option if you don't want to cut the cable in half.
LED tower materials
- (1) 12"x12" sheet of 1/8" thick clear acrylic, available from Amazon and McMaster
- STL file for towers. Attached to this page and available on Thingiverse.
- Plastic for 3D printer. I used approximately 40 grams total (both towers) of ABS on my UP! Plus printer, which comes out to about $2.50 worth of plastic ($45 for a 700g spool). Your mileage may vary depending on your printer and type of material.
- If you do not have access to a 3D printer and you have money to burn, you could order the towers from an online vendor like Shapeways. Just be warned that the markup is really steep - I checked and one tower would be $45 in the cheapest white plastic. Not worth it in my opinion.
- A cheaper non-3D-printing method - check out the technique used in this Instructable to attach the acrylic plates together using a threaded rod.
- You could be creative and come up with your own tower out of other craft or construction materials (cardboard, wood, etc).
- Laser cutter
- Again, special thanks to the SoHa SMART makerspace for letting me use their laser cutter.
- If you don't have access to a laser cutter, you can use the score-and-snap method to cut acrylic rectangles, and drill holes for the LEDs, but this is a much more laborious process.
- Wire strippers
- Soldering iron
- Hot glue gun
- Needle nosed pliers
- LED tower_v4.STL
- 30mm acrylic square LED horizontal v2 x10.dwg
- 30mm acrylic square LED horizontal v2 x10.dxf
Step 2: Assemble the Test Circuit
Before you start building the towers, I'd highly recommend assembling the entire circuit (including LEDs) on a breadboard and testing it. That way you won't get an unpleasant surprises when you build the whole thing and something doesn't work. The "test" circuit uses a potentiometer (which forms a voltage divider) as the analog input instead of an audio signal. This step is just assembly instructions - if you want to learn how the circuit actually works, see the next step.
If you're used to working with breadboards, you can probably just follow the first breadboard diagram above to assemble everything. If not, follow the step-by-step instructions below to take things just a few components at a time (and here's a tutorial about using a breadboard if that helps).
If you can read circuit diagrams (here's a nice tutorial if you want to learn, and a Wikipedia article with all the common symbols), the second image shows the diagram for one LM3914, so you can duplicate that to hook up both (note that the analog input potentiometer and the SPDT switch are shared between the two LM3914's on the breadboard, whereas each one has its own pot connected to pins 6 & 7).
I've also included a photo of the circuit - notice how the LEDs are actually too big to be all squished together like that, so you have to bend the leads sideways a bit.
- Put the main components on the breadboard.
- Insert one LM3914 so it bridges the gap in the middle of the breadboard, from rows 2-10. The pins should go into columns E and F. The little half-circle mark on the package should go towards the top (towards row 1).
- Insert the second LM3914 into rows 17-25.
- Insert the first potentiometer's pins into holes C12, C13, and C14.
- Insert the second potentiometer's pins into holes H12, H13, and H14.
- Insert the third potentiometer's pins into holes D27, D28, and D29.
- Insert the slide switch's pins into holes H27, H28, and H29.
- A3 to GND
- A4 to V+
- A5 to GND
- A9 to GND
- A14 to GND
- A18 to GND
- A19 to V+
- A20 to GND
- A24 to GND
- A27 to GND
- A29 to GND
- J14 to GND
- J29 to V+
- Make sure you connect the V+ bus on the left side of the breadboard to the one on the right side, and do the same for GND.
- D2 to F1
- B6 to A28
- C7 to C8
- B8 to A13
- D10 to C25
- D17 to F1
- B21 to B28
- A23 to F13
- C22 to C23
- E25 to F28
- The anode (long lead) of each LED should go to the V+ bus on the right side of the breadboard.
- The cathodes (short leads) of the LEDs go into rows 1-10 for the top LM3914.
- The cathodes of the LEDs go into rows 16-25 for the bottom LM3914.
- Connect the battery pack's red lead to the positive bus.
- Connect the battery pack's black lead to the negative bus.
Step 3: How Does the Circuit Work?
By now, hopefully you're at least a little bit curious about how the circuit works. If you want the full-blown explanation, you can read the LM3914's official datasheet. I'll try to give a simplified explanation here, based on the diagram on page 8 of the datasheet (copied and annotated above). Here are the key components:
- The LM3914 has an internal voltage reference. This voltage can be adjusted via one of the pins, but we don't bother doing that in this circuit - the default value is 1.25V.
- The internal reference is connected to a ten-stage voltage divider. A voltage divider is basically a bunch of resistors in series that can "divide" a voltage. In this case, if the internal reference is 1.25V, the voltage divider will split that into tenths (0.125V, 0.25V, 0.375V....)
- The analog input and the ten stages of the voltage divider are each connected to one of ten comparators. The comparator checks which voltage is higher - the analog input, or that specific stage of the reference voltage. If the analog input is bigger, it lights up the corresponding LED. So, for example, if the analog input is just over 0.25V, the first two LEDs should light up.
- In your test version of the circuit, you have a potentiometer forming a voltage divider between V+ (4.5V from 3 AA batteries) and ground. That should allow the voltage to swing fully from ground to V+ (more range than you need), which you can use to test and make sure all the LEDs light up.
- Pin 9 can be used to toggle between "dot" (floating) and "bar" (V+) display modes.
Step 4: Test the Circuit
Time to test things out!
- Turn the battery pack on.
- Adjust the potentiometer on the right (in photos above) to change the analog input signal. This should let you control both bars of LEDs simultaneously.
- Adjust the other two potentiometers to individually tweak the brightness of each set of LEDs. This one is pretty sensitive - turn it too far in either direction, and it will shut the LEDs off completely, or force them to full-scale output.
- Use the toggle switch to go between dot mode and bar mode.
If it works, great! Now you're ready to start building the tower. If it doesn't work, go back to Step 2 and double-check your wiring. Be careful about the following:
- That you don't have any of your power and ground jumper wires criss-crossed, as that could create a short circuit and mess things up.
- Make sure you have the LED polarity correct - all the longer leads should be going directly to the positive voltage bus, and the shorter leads should be connected to the LM3914's.
- Make sure you don't have the LM3914's in the breadboard backwards. The little notch should be facing towards row 1.
- Make sure the pins of the potentiometers and slide switch are in the right holes. They have large plastic cases that obscure a bunch of breadboard space, even though they only have three pins each.
Step 5: 3D Print the Towers
You will need to print two of the LED towers. I can't give very specific instructions here, since everyone will have access to a different type of 3D printer. The default settings on my UP! Plus worked fine. I'd definitely recommend printing in the orientation shown in the first photo above - this means that it won't require any support material. Printing it vertically would make it a huge pain to clean out all the holes for the LEDs and slots for the acrylic plates.
Remember that you can download the STL file from this page or from Thingiverse. The file dimensions are in millimeters.
Scroll through the photos above to see some design notes. If anyone prints one on a different printer (Makerbot etc) and you have recommended settings, leave a comment and I can add them to this step.
Remember that if you don't want to use a 3D printer, you can try mounting the acrylic plates on a threaded rod instead, or come up with your own method.
Step 6: Laser Cut the Acrylic Sheets
You will need to laser-cut 20 acrylic pieces.These pieces slide into slots in the towers and have a cut-out for the LEDs (see next step to see how it all fits together). You can download either the DXF or DWG from this page. Dimensions are in millimeters, and each file contains 10 pieces arranged in a 5x2 array. I made these with DraftSight.
Again, I can't provide specific directions here since everyone will have access to a different type of laser cutter. I used a hobby laser from Full Spectrum Laser at the SoHa SMART makerspace, and it was able to cut 1/8" acrylic without any trouble. If you're not sure about cutting acrylic on your laser, I'd recommend doing smaller test cuts before you potentially waste material by trying to cut out 10 of these at once.
If you don't have access to a laser cutter, you can use a utility knife or a special plastic-cutting knife to score and snap the acrylic instead, then drill holes for the LEDs (this won't be fun to do for 20 pieces though).
Step 7: Assembly Dry Run
Before you start permanently gluing and/or soldering things, it's probably a good idea to make sure all your pieces fit together. Depending on the tolerances of your 3D printer and laser cutter, three things could happen:
- The LEDs and acrylic plates could slide into the tower snugly, and not even need any glue to hold them in place
- They might be a little loose, and require some glue to prevent them from wiggling
- The fit might be too tight, in which case, hopefully you can shave things down with an Xacto knife, file, or sandpaper and not have to re-cut or re-print anything (I was able to do this for the first tower I printed)
I'd recommend checking things one at a time. This approach will help you pinpoint any tolerance issues:
- Make sure an LED fits into each circular hole (thread the leads individually through the two smaller holes)
- Take the LEDs out, then make sure an acrylic plate fits into each rectangular slot
- Put the LEDs back in, and make sure the acrylic plates fit over them and into the slots
Follow the photos above to see how the pieces fit together. If your parts are a little loose, you can just use glue to hold them in place (see next step). If they don't fit, try gently shaving down material as necessary (with a file, hobby knife etc). As an absolute last resort, you can try re-designing the CAD files to be more compatible with the tolerances of your printer and/or laser cutter.
Make sure you do this for both towers!
Step 8: Glue the LEDs And/or Acrylic Plates in Place If Necessary
My acrylic plates fit snugly, but the LEDs required glue to hold them in place. I found that the nozzle of my glue gun was way too big to apply small enough quantities of glue, so I used a toothpick to apply the glue - either directly to the surface of the hole, or the back of the LED. Be careful about getting glue everywhere, as it can be a pain to clean up later. This is the point where you need to decide what color order you want your LEDs in permanently (I did blue at the bottom, red at the top).
Important note about the LEDs: make sure you're consistent with the left-right orientation of the leads. In the photos above, all the long leads (anodes) are on the right, and all the short leads (cathodes) are on the left.
Important note about the acrylic: it's probably dirty at this point from fingerprint smudges, smoke/debris from the laser cutter, and other grime. You should probably clean the pieces off before you permanently glue them in place - they'll be hard to clean later, since the gap between them isn't that big.
Step 9: Connect All the LED Anodes
The LEDs in the circuit (refer back to the diagrams in Step 2) all have a common anode, meaning the long leads can all be connected together. I used needle-nosed pliers to bend all the leads together as shown above, then soldered them together. Again, make sure you do this for both towers - but, assuming you don't want the towers right next to each other, don't solder the two towers to each other.
If you don't have a soldering iron, do your best to tightly bend/crimp the leads together, so they make good electrical contact.
Step 10: Connect the Tower LEDs to the Breadboard
Now you're ready to connect the LED towers to your breadboard.
- Attach wires to the short lead (cathode) of each LED, as well as the common anode for each tower. As pictured above, I used male-female jumper wires, but you could also solder hookup wire to the LED leads.
- Plug the male ends of the jumper wires into the breadboard. I've included the breadboard diagram again for reference. The individual cathode wires go into rows 1-10 for the first LM3914 and rows 16-25 for the second LM3914. The common anode wires go to the positive power bus.
Once everything is plugged in, test the circuit again like you did in Step 4. Nothing should have changed on the breadboard but the LED connections - so if it worked before, but doesn't work now, odds are something's wrong with your LED wiring. Again, make sure you have the LED polarity correct. Check your soldering work, and if you're using the male-female jumper wires, make sure they aren't loose.
Step 11: Connect the Audio Source
Disclaimer: if you have wired something wrong, there is no guarantee that the circuit won't damage the device you use for audio output. Accidentally sending 4.5 volts into your computer's headphone jack probably isn't good. So, make sure you have been super-careful about double checking your wiring up until this point. If you're extra paranoid, you could dust off that old first-generation iPod you have sitting in a drawer somewhere and use that for a preliminary test.
Now, time to get rid of that "test" potentiometer and connect a real audio source!
- Cut the 3.5mm audio cable in half (or into unequal lengths, as you see fit). There should be three smaller wires inside - left and right audio (with red and white colored insulation in the photos above), and ground (uninsulated). Strip about a centimeter of insulation off the end of each individual wire.
- If you have a soldering iron, twist each wire tightly and tin them so you'll be able to push them into a breadboard, Or, solder on pieces of solid-core jumper wire. If you don't have a soldering iron, do your best to twist them rigidly enough to work with a breadboard, or use pliers to bend/crimp them onto a piece of solid wire.
- Follow the new breadboard diagram above to remove the test potentiometer and replace it with the audio cable:
- Remove the potentiometer that was in rows 27-28-29, and the jumper wires that were connected it (one to the power bus, one to the ground bus, and two wires connecting it to the LM3914's).
- Insert the 3.5mm's ground (uninsulated) wire into the ground bus.
- Insert the red (or white, doesn't matter) audio signal wire into hole B21.
- Insert the other audio signal wire into hole C6.
Step 12: Test It!
Now, turn the battery pack on, pick your favorite music, and hit play! My setup seems to work best if I max out the volume on the computer (i.e. in the Windows taskbar, or in Pandora on my phone), and then individually adjust the potentiometers to make sure I get full-scale output on the LED towers. Obviously the lighting effects look way cooler in a dark room.
Thanks for reading this far! If you get stuck, have any questions, or suggested improvements, please don't hesitate to leave a comment, and I'll be happy to try and help out. Here's the video one more time in case you missed it at the beginning:
Step 13: References
I've tried to include a bunch of useful reference links scattered throughout the project. I've consolidated them all here in case you don't want to go digging around for them.
- Tower LED (Instructables user Finger44)
- Resistive voltage divider (Wikipedia)
- How to Use a Breadboard (SparkFun)
- How to Read a Schematic (SparkFun)
- Electronic Symbol (Wikipedia)
- LM3914 datasheet (Texas Instruments)
- Comparator (Wikipedia)
- VU meter (Wikipedia)
- Sync LEDs to music (Instructables user zatek)
- Raspberry Pi Spectrum Analyzer with RGB LED Strip and Python (Instructables user CuriousInventor.com)