In this project, fast fourier transform(fft) is used to convert analog data from time domain to frequency domain.
We need to map the amplitude of each frequency bands (14 bands in total) and for all of the frequency bands into RGB. To further make the matter more complicated, Amplitude transition within each frequency band should be represented with the intensity/lumen of the RGB via the use of Pulse width modulation (PWM), follow by hue/fading when transition in-between frequency bands.
In other words, the idea is to
1. Arrange the frequency bands into 3 "groups", low mid and high frequency and "map" into R, G then B.
2. Amplitude of each frequency band would translate into the brightness/intensity of each color using Pulse width modulation (PWM).
3. Cycling from one frequency band to another, the R<->G<->B would "fade" by changing the hue of each color.
Firstly, an arduino shield was made using uln2003a darlington. It uses 3PWM on arduino to control brightness of RGB LEDs. The component side of stripboard is soldered on the connecting copper side instead.
This is how the RGB led strip looks like. We would need a LED driver circuit to power up long stretch of them. The shield can drive up to 6RGB LEDs with 12v 800mAH NiCad battery.
Now, for the connection part
Using a 3.5mm" stereo jack to tap audio signal from computer/smart phone into A0 of arduino.
PWN pin 9,10,11 are use for controlling the RGB. The arduino shield (it has a darlington IC) is used to "switched" 12v for the RGB LED strip with PWM.
Step 4: Software
The FFT library should be added to the arduino\lib\ folder to compile successfully.
Fix_fft library: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1286718155
Code : snipt.org/vvY4