Dorm Room Musical Lighting System

A first project with the Arduino Microcontroller Platform
* System Updated in 2017! *

 22 Feb 2011 

Arduino Musical Lighting System (V1 and V2)

Introduction

This project was motivated by a desire to light up my dorm room in college. The common dorm room usually comes with a little fluorescent lamp in the middle of the room providing general illumination, but just barely. My room in Next House was no exception. Yet the idea of buying a little table lamp was unappealing. Earlier on in the semester, I had acquired a set of three 20W Halogen lamps and they added much warmth and comfort (everybody loves Halogens!). Still I wanted a bit more dynamism and colour - not simply to install additional lights, but also to bring a little more flavour and piazza to my room. Afterall, I was in a tech school.

In the early spring of 2011, my dorm held its first event in a while - Impulse, which was a party at the basement level. The cool thing about the party was the custom lights - a $2000 investment that the house had given to a group of students to design and build a party lighting system. It was extremely successful, and made me recall the amazing dancing lights I saw at another dorm room a few months back (TEP).

So I decided to build my own musical lighting system! This page documents the journey I went through to make this.

Update End 2011: Just less than two months after I conceived of the idea, the home-made audio-modulated dorm lighting system was born. The result is showcased here with extra incandescent lights synced to the bass. For more information, refer to the project log and notes below.

Update Start 2017: It has been six years since I started this project and it's time for an update! The update includes several improvements including a revised and tided up light bar with new LED colours, improved driving algorithms & firmware for less latency, and a completely new integrated circuit board removing the need to use an actual Arduino Uno (but keeping the same general schematic as the original), and additional functionality. Scroll down for more information!

 

Design Considerations (Version 1)

The goals of this project were straightforward. I decided to adopt the Arduino development platform using the Arduino UNO board running a ATMega328 Microprocessor. This was chosen due to its low cost, ease of use, fantastic documentation and versatility. This was also my first project with the Arduino platform so it would be a learning experience for me as well. I also decided to try out first hand the new high-powered LEDs which were quite expensive just a few years ago but now available at really low costs from Chinese distributers like DealExtreme.

The principle of the music visualizer is simple - stereo audio from a 3.5mm stereo jack is sent from a computer or an MP3 player into the analog input of a microcontroller. The microcontroller reads out the waveform and performs a frequency decomposition into several different frequency bands. The microcontroller then takes the amplitude of each frequency band and uses it to modulate the brightness of one of several ultra-bright LEDs using Pulse Width Modulation (PWM). Since the microcontroller cannot output more than 40mA safely, MOSFETs are used to switch the high-powered LEDs, and eventually, Halogen or regular incandescent lighting. [update: this was later extended to general lighting systems such as standard line lamps / bulbs]. Finally, I know I can purchase a similar musical lightning system online but that's not quite as fun as building one myself!

These are the goals of the project:

  • To design and construct a simple and portable lighting system with ultra-bright LEDs
  • Allow modular implementation for extension to other lighting systems, e.g. Halogen lamps / 120V or 240V bulbs
  • Learn to use the AVR microcontroller system via Arduino
  • Implement a basic but effective lighting algorithm for first version of system
  • Incorporate more complex and fancy lighting algorithms for subsequent versions

With these few ideas in mind, the project begins!

 

Project Log

 Feb 2011 

Arduino Uno arrived today. I bought an Arduino Uno on Amazon.com for $29.95, but I had a $20 discount voucher which I spent $10 buying. Unfortunately I can't work on anything else now because I'm still awaiting some other components. Spent some time reading up about the basic functionality of microcontrollers. This is after all my first real microcontroller project.

 2nd Mar 2011 

After some initial research, it was apparent that standard implementations of Fast Fourier transforms run somewhat slowly on the Atmega328. However, I discovered that there exists a 7-band graphic equalizer filter IC which will be able to filter out the 7 frequency bands of my input audio, and it all comes nicely in a small 8-pin IC! This is the MSGEQ7 graphic equalizer filter chip. I couldn't find a cheaper and easier place to get the MSGEQ7 graphic equalizer filter so I ordered some from Sparkfun electronics. The MSGEQ7 was $4.95 each.

I haven't decided which LEDs to buy yet, but it seems that the LEDs I am currently interested in from DealExtreme run at about 3V (varies with colour) and (have conflicting reports) of it being driven from 300 to 700mA, at which they run quite hot. Regardless, the microcontroller output pins can supply no greater than 40mA. In order to switch the bright LEDs, one could use a transistor like the TIP102 or TIP120 (darlington transistors), but I decided to go for a standard logic level N-Channel MOSFET RFP30N06LE. It is rated for 60V at 30A and is an overkill for the project, but they were easy to get. If all goes well, I should be getting the components in about 1 or 2 weeks.

Next up on order are the powerful 1-3W LEDs, which will probably be from DealExtreme.

 4th Mar 2011 

After sorting out the initial plans for how I would want to make the lights, I ordered some powerful LEDs from Dealextreme. I do not know the exact power rating the LEDs are but they have been claimed to be driven u to 700mA, which works out to be over 2W input per LED. The plan is to have 6 powerful LEDs of different colours corresponding to the six output frequencies from the MSGEQ7. These will be: White, Red, Yellow (white with gel), Green, Blue, Purple (White with Gel). I also purchased a few other spare components. These components are:

  1. 3W Multicolor LED #4530 $2.74 ea.
  2. Red CREE LED Emitter #1776 $3.64ea.
  3. Blue CREE LED Emitter #1775 $4.11ea.
  4. Green CREE LED Emitter #1777 $4.21ea.
  5. White CREE P4 LED Emitter #1302 $2.93ea.
  6. 5mm UV LEDs x20 #2398 $3.07 for 20x

 11th Mar 2011 

Today I finally got started working on the project since I had received some of the components and could begin. I got a breadboard and started laying out the circuit. The initial plan is to use the MSGEQ7 spectrum analyzer which is a 7-band filter and will output the amplitudes of each frequency band based on a driver frequency.

Setting up the circuit was relatively straightforward. One channel (out of two from the Stereo input) was used and the signal was sent to the graphic equalizer filter. After a few quick initial tests, I got the circuit working as planned. The MSGEQ7 outputs the amplitude of the frequency band as an analog voltage which is read by the microcontroller via it's 10-bit ADC. Right now I'm just dividing by 4 (fast binary operation) and sending it as a 8 bit value to the Atmega's Pulse Width Modulation output. Since the ATmega368 only has 6 PWM outputs, I connected only 6 LEDs to the output and ignored the last highest frequency band.

First Result: the circuit works! The most important observation for now is that the output of the LEDs is are not 'contrasty' enough. This is expected since the 'brightness curve' as it stands is linear (with relation to audio brightness), but our eyes have a somewhat logarithmic response to light brightness. More work will be done soon to fix this. School beckons.

 20th Mar 2011 

A quick improvement. I didn't have much time so I just did some small tweaks to the modulation code. This has mostly got to do with the 'contrast curve' After some experimenting and looking at various graphs, I've settled on a Sin(Sin^4) curve, but will probably optimize it further for better performance (speed).


I also found a white LED and used it for the bass. I recorded a short video of it in action. Now all I need is to await the bright LEDs to connected up via the MOSFETs. :)

 29th Mar / 1st Apr 2011 

Have received the bright LEDs from dealextreme! This week (at least till Wednesday) is a bit busy so I hope to begin at least wiring up the LEDs and the MOSFETs within the week :) ...


[Update 1st Apr] It's April Fool's today! However, not much stuff was going on in school. I headed over the MITERs, a little workshop in my school, and soldered the LEDs to wires for easy connection. I also did some tests on how uch current I should be sending into the LEDs. (I do not know exactly what the part numbers for the LEDs are except that they are CREE LEDs). The specifications actually seem to read that they are capable of 750mA input each at varying voltages, but I've heard reports that they run really hot at that current, and most people are fine with 300mA. So I plan to run them at 350mA each. Now it's time to make a mount to hold all of them together!

 11th Apr 2011 

The first phase of the project is complete!

Once I got the project tested on the breadboard, I made a quick 'shield' for the Arduino just for easy plug and play. I ran out of perf-board so I simply used two leftover pieces. The board contains the spectrum filter IC as well as a stereo input. To connect to the main lighting strip, I simply used an Ethernet RJ45 jack which has 8 wires in one easy connector. This choice is arbitrary and far from optimal, but was simply done out of convenience.

The corresponding piece is the main star of the show - a 6-led Light-Bar which contains the 6 ultra-bright LEDs of various colours, a 5V 1A input jack for the power, along with the drive transistors and another Ethernet connector. This allows easy connection to the controller board. I machined this carefully by hand using some aluminium L-bar and they were carefully milled inside to accept the electronics. Finally, I added some external bass output headers for future expansion! This all came together quite well and I'm very happy with how my light-bar came out.





Here's how it looks like inside (photos above), and with the lighting system running!

[Update] Above is another photo of the completed board (photo actually taken 6 years later in 2017!). A little bit of a shoddy construction built with junk parts I had on hand but it does work!

Extensions to come soon to extend control to normal 120V light bulbs around my room. This can be easily extended as a computer / remote lighting system controller or any other system for that matter. It all works and does look quite pretty if I may say so. :-)

 

Extensions - Halogen + Incandescent Bulbs

 Late Apr 2011 

TIP120 Darlington Transistor

Since the LED lights were so successful, I decided to do a quick extension to the project and wire up the set of three 20W halogen bulbs I had. I think the lights will be nice if they respond to the bass, so I spent an hour or so wiring up a quick circuit to put in series with the halogen lights and the 50W 12VAC halogen transformer. I had ran out of MOSFETs so I decided to give the TIP120 a try. The TIP120 is a common NPN Epitaxial Darlington Transistor, which is basically two transistors cascaded together, allowing a large current gain (i.e. use a really small current to switch a big one). The Darlington configuration allows a much higher switching load compared to just a single one.


TIP120 wired to Halogen Lights - Do not use this, a MOSFET performs much better! More details below.

This particular transistor is rated at 60V 5A, with Emitter-Base voltage of 5V and DC Current Gain of 1000. The 12VAC was rectified via a bridge rectifier and the output connected to the TIP120, which was mounted on a heatsink. The basic wiring diagram is as above. Note that it is important to connect the grounds together. With everything set up and the bass connected to the PWM output for the bass frequencies, the lighting system was switched on.

Unfortunately, the setup performed poorer than expected. The TIP120 got really warm quite quickly even with heat-sinking and the lights never really turned off - they just got brighter and dimmer. It was clear that a MOSFET would be better. I eventually sourced another MOSFET for the Halogen Lamps and put everything together on a nice heatsink (mostly for the bridge rectifier which was a 34A 800V one I had lying around) and connected it up to the lamps and Halogen transformer.

The circuit is as follows.


Replaced the TIP120 and used the 30N06 N-Channel MOSFET. Also added a switch allowing me to toggle between Always-On and Modulated. Works great!
[Update : Don't use this, instead, use my general purpose isolated drive circuit below!]



 

This new circuit is essentially identical to the LED setup. It works wonderfully well now and was fun to listen to music together with. See a video of it in action here:


 7 Sept 2011 

IRFP460 120V Incandescent Bulbs (see next section for better, safer circuit)

I got back to school on the 2nd of September and immediately got started on working on a new extension for my lights. This took a single 4 hour session as well as two more trips back to the workshop to get the circuit tidied up. The idea this time was to use the same signal to power an array of tungsten bulbs - not from a 12V supply, but bulbs from the mains (120V). This will allow me to use a row of cheap and nice light bulbs and should work great with the bass. Junk materials were used - a left-over polycarbonate board was machined to hold 4 bulb holders and the entire setup raised on wooden blocks. The heatsink was then mounted with two bolts and the small 12V supply with cable ties.

The question then is how to switch 120V with 5V? I had some very nice IRFP460 MOSFETs lying around, good for 500V at 20A, and decided to use them. :) The problem is that these normal MOSFETs require around 10 to 20V on the gate to switch.



I used 3 100W 230V bulbs (had to use a 25W 120V yellow bulb because I only had 3 100W bulbs) running on a 120V line to give
the bulbs a warmer glow. In comparison, the bulb in the background is a 72W halogen so you can see how comparatively warm
the 100W bulbs (under-driven at 25W) are, exactly the intended effect!

The original solution called for using a simple N-Channel 2N7000 MOSFET (very cheap and very common) to trigger the gate. The problem is that N-Channel MOSFETs should act as a 'low side' switch and wiring them in series with my IRFP460 would create a logic inversion, i.e. no signal from micro --> lights on; signal --> lights off; which is not what we desire. Eventually I settled on a rather unusual way of using an NPN transistor (2N2222) triggered by the micro to a resistor-voltage-divider. The 2N2222 sends current to this divider from a separate small 12VDC power supply which triggers the IRFP460.

(Update: This is a very dangerous circuit! DO NOT USE THIS - I've merely included it here for completeness)


- NO ISOLATION: Do not use this circuit! -

The bridge rectifier and MOSFET were mounted on a small heat sink and a spare 12V fan was attached above the heat sink for some cooling. The rest of the electronics were simply component-soldered directly without the use of a PCB, and turned out to be quite messy, something I will try not to repeat! This mess of wires was conveniently hidden under the heat-sink. Finally, a switch was added to allow the lamps to be (1) Turned off, (2) Turned on continuously and (3) Controlled by the MOSFET. This extension was completed on 6th Sept 2011.

[Update] This circuit is actually dangerous and of poor engineering design because there is no isolation from the logic to the mains. So I quickly set about making a proper design with opto-isolators.

 Sept 2011 

Opto-isolated 120V Incandescent Bulbs (general purpose)

I quickly realized that mixing mains line and logic was a poor engineering idea, so I set about making an opto-isolated design. I'm sure I could have bought one myself since they are dozens of them on the market, but it's much more satisfying to make it work! The final design turns out to be just a simple modification but much safer and can be used as a general purpose mains controller. I knew that I didn't want to involve any relays for switching (too slow at PWM), so I went for a rectified mains switch controlled by a power MOSFET as previously.


Use this circuit. Works with 240VAC or anything in-between as long as you use the right components!

The circuit takes in a signal from the microcontroller which essentially just needs to light up an LED (remember to put a resistor depending on what sort of opto you use). Where everything is off, the gate of the N-channel MOSFET is pulled to ground, so the MOSFET is off and nothing happens. When the opto-transistor turns on, 12V is switched to the gate which turns the MOSFET on. we need to rectify the load, so the a bridge rectifier is used. I also added a switch so I could leave the lights on while still leaving the device connected. You can use any MOSFET that can handle the voltage and current. Notice how the microcontroller signals are physically isolated from mains!

At this stage everything is working great and I can now confidently call this project complete and a success!

[Late 2011 Updates]

I added a new string of 20 ultra-bright green and blue LEDs under my bed for an aqua-room experience. The contrast and speed response are far superior to the incandescent bulbs and they look so very pretty! It can be connected up to any of the 6 frequency bands but bass still looks the best :-).

 

2017 Updates

 11 Jan 2017 

More LED Colours - the Light Bar rebuild! (2017)

It has been just about 6 years since I started on this project! How time flies indeed. Recently I dug up this project in my 'box of old projects', dusted it off, and plugged it in. To my surprise, everything was still working just fine... except for two LEDs which were not lit - one of the left-most white LEDs was no longer lighting up (perhaps due to a disconnected wire inside?.. the LED was still functioning) and the Red LED had suffered some sort of accident and was also dead (the lens had come out and the die itself appeared to be damaged). Subsequently, I also found out that the plastic domes of the LEDs were loose, such as the blue one below which fell off!

So I thought it would be a good time to replace some of the LEDs (more colours!), and to also tidy up the internals a little bit. Since 2011, I've also gained a lot more electronics experience and knew I could implement this in a much better way. However I decided that my focus was not to do a complete revamp of the project, but rather to do just a little minor maintenance and upkeep.

Above shows the general design of my current LED bar (top drawing).

Having more experience now, I quickly identified that the LEDs I had used were in fact from the CREE XR-C line of LEDs. Since 2011, LED technology has come a long way. But when the XR-C LEDs were first announced in 2008, they were pretty groundbreaking indeed. Now if you recall, I planned to have yellow and purple gels fitted over two of the 3 white LEDs to make a nice spectrum of colors. However I never got around to doing it, and wound up with a simple arrangement of 3 alternating white LEDs with R, G and B LEDs.

Now with the left-most two LEDs not working, I thought it would be a good idea to replace and rearrange the LEDs. My first idea was to replace the damaged Red XR-C LED, and substitute three of the white LEDs with an Amber one, one Warm white LED and one Cool white LED.

After some study (at time of writing), it turns out that the XR-C LEDs are starting to get phased out and are starting to be replaced with more advanced ones which are much more efficient (even though they are a lot smaller). However I still wanted to keep each LED to be on the same 20mm 'star' heatsink to keep the look tidy. After searching a little online, I found some XR-C LEDs available, but also found some pre-populated and newer XQE and XPE LEDs on the same 20mm star-board in 2 colours of white as well as amber. The second drawing above shows what it would look like - slightly odd with the new LED discretes being so much smaller!

Colour

White

Red

Green

Blue

Warm

Cool

Amber

Amber

Warm

Type

XRC

XRC

XRC

XRC

XQE

XQE

XPE

XRC

XRC

Project

Replaced

Replaced

Replaced

Replaced

2017

2017

2017

2017

2017

Wavelength

~6500K

625nm

530nm

470nm

2700K

6500K

595nm

593nm

3000K

V_fwd

3.5

2.2

3.7

3.5

2.9

2.9

2.3

2.2

3.5

I_fwd

350mA

350mA

350mA

350mA

350mA

350mA

350mA

350mA

350mA

Brightness

56.8-87.4lm
80.6lm

23.5 - 39.8lm

39.8-51.7lm

13.9-18.1lm

109lm

126lm

80.6lm

23.5 - 39.8lm

45.7-67.2lm
51.7lm

Resistor Required (ohms)

4.285714286

8

3.714285714

4.285714286

6

6

7.714285714

8

4.285714286

To get a better idea on their brightness, I created a small chart with luminosity values when driven at their nominal 350mA I_fwd. Notice how the XQE and XPE LEDs are so much more efficient than their old XRC counterparts, as well as coming in much smaller packages - e.g. the XQE comes in a small 1.6x1.6mm package and the XPE in a 3.5mm package, while the XRC is a 7 x 9mm package. Note that the brightness is given as ranges for some of the old LEDs since I have no idea which bin of LEDs were used - those LEDs were originally bought from Dealextreme and came already mounted on the heatsink.

Just when I was about to proceed with this unusual mixed-LED arrangement, I noticed that some of the other LEDs were.. starting to fall apart! Specifically, the plastic dome of the LEDs were starting to come loose from their substrate. I did a little more searching and found that Mouser Electronics still stocked some bare XR-C LED dies, so eventually I decided to scrap the original plan of mixed LEDs and to just go with all XRC-LEDs to maintain a consistent aesthetic look!


Drawing of 2017 update of LED bar using new XR-C LEDs including a replaced red, new amber, and warm / cool white LEDs. Graphs and photos by Cree.

So I decided - a complete replacement of all the LEDs from their original heat-sinks!

This would mean completely desoldering all the old LED discretes from their heatsink, and reflowing all new LEDs to the original heatsink bases. This would also allow me to replace the failing LEDs, and to choose specific LED bins of the highest efficiency. I settled on using a warm white and cool white LED for the bass and highest frequency, and then Red, Amber, Green and Blue for the others. The result is what I have depicted in the drawing above.

Colour

Warm

Red

Amber

Green

Blue

Cool

Wavelength

2700K

625nm

593nm

530nm

470nm

~6500K

V_fwd (V)

3.5

2.2

2.2

3.7

3.5

3.5

I_fwd (mA)

350

350

350

350

350

350

Brightness (lm)

51.7

 39.8

39.8

51.7

18.1

80.6

Resistor  (ohms)

4.29

8.0

8.0

3.71

4.29

4.29

I realized this would also be a nice homage to the Cree XR-C line, considering that it used the highest and lowest colour temperature of white LEDs, and all the colour LEDs except the Royal Blue one (too close to blue and looks like a 'UV LED') and the Red-Orange one (too close to Red and Amber).  I placed an order from Mouser electronics for the new LEDs.

 06 Feb 2017 

Light Bar Rebuild

With the new design complete and components arrived, I started working on rebuilding the Light Bar.

The original light bar was very packed inside and generally poorly constructed, but opening it up did give me good memories of the time I was in MITERs putting it together. First thing to do was to remove the LEDs.


I desoldered all the wires from the LED assemblies and started the LED replacement process. Using a powerful Metcal soldering iron with a large wide tip, I heated up the each LED-heatsink package by placing it on a copper pad, desoldered the old discrete packages, cleaned up the heatsinks, and then soldered the new dies back on via reflow. The good thing about choosing new LED dies was that I was now able to use the specific LED from the brightest bin available in stock, and the final LED brightness is bolded in the table above (e.g. the warm white XR-C LED was available in 45.7 to 67.2lm at 350mA drive, but the brightest one in stock was a 51.7lm one and is the one I used).


Because replacing the LEDs and the damaged FET would mean desoldering a significant portion of the build, I decided to re-do the entire electronics inside and make it a little tidier than before. I also took the opportunity to replace all the FETs (including one damaged one) with better newer ones. Previously I had FQP30N06L MOSFETs (including some IRFIZ34NPbF), but replaced them with slightly newer IRLIZ34NPbF, which offer essentially the same of better characteristics in R_ds_on and gate charge, while having an even lower threshold gate voltage and hopefully have slightly better performance. The IRLIZ34 FETs also come in a nice isolated tab TO220 package which allowed me to mount it directly onto the aluminium superstructure.

The only problem with the isolated-tab was that the mounting holes were a little smaller than the regular TO220 packages, so I had to replace the nylon screws I used. Instead, I switched to stronger metal M3 screws with nylon washers to prevent shorting out the + and - terminals of the heatsink. This worked out very nicely and is a little more robust and allowed better clamping force since the aluminium superstructure also acts as the heatsink.

I also replaced the resistor bunches with single 2W 8.2R or 4.7R resistors (8.2 for the red and amber LEDs) to keep things a little tidier and also to add a little more robustness (resistors are fuse and flame-proof metal-oxide types).

Like previously, I also tried my best to use proper colour coded wires to wire to the LEDs and they turned out to look great! Whenever possible all connections were done with 24AWG Teflon-coated multi-stranded wire. Finally, I connected pin (1?) of the Ethernet socket to the 5V rail. This will provide the main 5V power which will drive the down-level ATMega328p MCU, and will remove the need to use another USB cable to power the logic.

The result is a slightly tidier internal setup with less likely-hood of shorting out and will hopefully remain quite robust. The Gate and Source for the FETs were also connected via 51kR SMD resistors as a default pull-down.

With all that done, I put the assembly back together. Behold, the new updated Light-Bar! :-)

Updated Light-to-Music Response (2017)

As part of my 2017 update, I also wanted to improve the performance of the light bar since there was noticeable latency between the audio and the light. Most of this was likely due to the 'contrast curve' overhead of the heavy conversion done for each ADC read value.

The computed brightness with which to pulse the LED at (0 to 255) was previously computed as = (1.57sin(1.57sin(input)))^5, where input was the ADC read value 0 to 1023. This provides a nice curve which looks like the above. However, using a sin function twice together with a power 5 was very computationally intensive, so instead I pre-computed the values with a script and simply created a large look-up table.

The result is a very clean, very quick look-up, and improved performance dramatically.

New integrated PCB (2017)

There were many limitations with the original hardware, mostly the fact that it required an external power supply via USB to power the Arduino board, that the board was fairly large and finicky, and that it required an audio stereo splitter which I frequently misplaced. It was also cobbled together out of two perf-boards and I was constantly worried about the through-hole parts falling apart. So I decided to spin the entire thing as a new small circuit board.

I came up with a list of improved and additional features to be implemented:

- On board 4.5V LDO regulator for core logic from 5V in
- Integrated Atmel ATMega328p running the same core code as the V1 version
- Dual MSGEQ7 for left and right channel sampling (previously only sampled Left)
- Dual stereo jacks for Audio In and Out (in parallel)
- Additional dedicated 'bass FET driver' output with resistor
- Uses 5V power from a 2A 5V micro-USB source

With this in mind, I quickly created a schematic and did a quick layout on a small 2-layer PCB.

This came together fairly quickly since it was essentially the same as the original design, but with a few added features. I managed to fit everything on a small 55 x 40mm board. Here is how it looked like after layout - fairly straightforward and too just an afternoon to do.



With the design done, I sent it out for fabrication! The boards arrived and I quickly soldered one up, and I was quite happy with the way it all turned out! Have a look:

The overall design simplifies things greatly! The first thing I wanted to do was to reduce the wires going up to the light-bar. Previously it took 5V from a DC wall-wart power supply, and required the Ethernet cable for the signals, as well as a 3rd USB power supply for the Arduino board. Now the entire system is powered by a single 5V 2A micro-USB power supply which is small and commonly available! Two out of the 8 wires are also used to supply power to the light bar from the new board.

I also added two 3.5mm stereo receptacles to the board which allow one to be plugged into the source via an aux cable, and one to be plugged to a speaker system.

The original system simply used one MSGEQ7 to sample only the left channel - this time I placed two MSGEQ7s on board, one sampling the left and one sampling the right channel. This is fed into an ATMega328PB, which was also updated with new firmware to optimize the contrast curve processing speed to reduce latency as much as possible. In addition, the moving-average system was removed and replaced instead with a physical gain knob for quick on-the-fly adjustment.

Finally, some debug LEDs were added on the back, mirroring the output of the system to the light-bar, and a robust push-pull FET driver was also added and broken out via a 2-pin header for driving another system synced to the bass notes if desired. I did found a small mistake I made during the routing for one of the programming pins, but fortunately that was a very simple fix with the red wire you see above.



Above shows some photos comparing it was the original board above. You can see how compact and integrated the new design is :-).



Finally the entire system comes together!

It works great and with the new firmware, definitely had an observable improvement in latency.  

Conclusion (2017)

It's nice being able to come back to a project after so many years, and updating it using the new skills I've learned, but yet keeping true to the original design. I kept the same LEDs and design as the original light bar, but improved the internals. The main driver is now different, but uses the same core code, and tidies things up significantly. It was nostalgic looking back at literally my first serious project with a microcontroller and I'm happy to see how it has evolved to it's new form. :-)

Hopefully this new musical light bar will see much use in the future, though I'm already thinking of the next revision with all LEDs and controller integrated on a single PCB! This will remove the need for building a light bar, and be truly fully integrated!

Until next time, thanks for following this project and making your way here till the end!

 

Component Cost

2011 Project:

(this includes a pile of spare components not used in the actual project, so it's more for my record):

- Arduino Uno (after discount) - $19.95
- Sparkfun Order for MSGEQ7 and various MOSFETs - $30.31
- Dealextreme Order for LEDs and other components - $38.18

2017 Improvements:

- Total additional cost for new R,A,G,B,wW and cW XR-C LEDs, MOSFETs and resistors from Mouser Electronics (before tax and shipping) - $32.44

 

Links & References

General Useful Links

http://www.deepdarc.com/2010/11/27/hacking-christmas-lights/- Hacking Christmas Lights using an Atmel microprocessor
http://jarv.org/blinkm-music.shtml - Arduino and BlinkM Music Visualizer
http://www.arduino.cc/ - The Arduino Website
http://scottrharris.blogspot.com/2010/07/arduino-fast-fourier-transform-color.html - Arduino FFT
http://majordecibel.blogspot.com/ - LED Visualizer Project
http://www.silvercg.com/2011/02/14/arduino-rgb-led-winamp/ - Simple Arduino project
http://fftarduino.blogspot.com/2011_02_01_archive.html - Another FFT Arduino Spectrum analizer
http://projects.mathfarmer.com/home/12-band-color-organ-rgb-led - 12-Band Color Organ
http://siliconrepublic.blogspot.com/2011/02/arduino-based-pc-ambient-lighting.html - Arudino Backlighting

Using the MSGEQ7 Graphic Equalizer DisplayFilter IC

http://scottrharris.blogspot.com/2010/12/hacked-ge-christmas-lights-color-organ.html - Ardino+MSGEQ7 GE Christmas Lights (source code here)
http://skoba.no-ip.org/msgeq7/- Connectng the MSGEQ7 IC to Arduino
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1291649036/all - Arduino Forum
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1290722206 - Arduino Forum
http://scottrharris.blogspot.com/search/label/Color%20Organ - Color Organ Shield Arduino

Powering powerful loads using TIP 102/120

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?action=print;num=1294857483 - Arduino Forum
http://arduino.cc/playground/uploads/Learning/solenoid_driver.pdf - Solenoid Driver from Forum Link
http://luckylarry.co.uk/arduino-projects/arduino-control-a-dc-motor-with-potentiometer-and-multiple-power-supplies/ - Potentiometer
http://www.4p8.com/eric.brasseur/vtranen.html - On Transistors
http://101science.com/transistor.htm - Transistors

Signal Processing and FFT

http://www.dspguide.com/ - DSP Guidebook
http://www.dspguide.com/ch8/6.htm - DFT
http://en.wikipedia.org/wiki/Goertzel_algorithm - Goertzel Algorithm

LED Cube Displays

http://hypnocube.com/instructions/ - Hypnocube
http://hacknmod.com/hack/tutorial-how-to-make-led-cubes/ - How to make LED Cubes
http://www.atomicvpp.com/wpblog/2007/11/25/led-cube-project/ - LED Cube Project
http://www.instructables.com/id/Led-Cube-8x8x8/step71/Hardware-debugging-Broken-LEDs/ - 8x8x8 LED Cube
http://lumisense.com/ - LED Cubes with great effects

Links to buy stuff

http://www.sparkfun.com/products/10024 - The MSGEQ7 for $4.95
http://www.dealextreme.com/ - Reasonably priced powerful LEDs
http://ledsupply.com/endorstar-1up.php - Other LEDs


Back to main page
(c) Gao Guangyan 2024
Contact: loneoceans [at] gmail [dot] com

Loneoceans Laboratories. Copyright (c) 2003 - 2024 Gao Guangyan, All Rights Reserved. Design 3.
Removal of any material from this site without permission is strictly prohibited and will result in infringement of copyright laws.
Disclaimer: Projects and experiments listed here are dangerous and should not be attempted.
www.loneoceans.com/labs/ ... page generated in 0.0019 seconds