I'm new to Arduino and I am currently trying to make a device that turns music from an mp3 player into vibrations (using small vibrating motors, about 5 of them, one for each frequency range), according to the different frequency ranges and their intensities (kinda like a spectrum analyzer, but with fewer frequency ranges). I've already connected an mp3 player to the arduino using the following circuit to get a ~2.5 V DC offset:
On the 0-1023 input range, the values go from around 490 to 530. Should I amplify the signal before feeding it to the arduino? If so, what circuit do you recommend?
How would I implement an FFT algorithm to get the intensity of each frequency range? I already tried elmchan's fft library but I can't get it to work.
I'm thinking about using PWM to control the vibration motors. Is this a good idea?
If you are not against adding an ic, look into msgeq7
I haven't gotten to play with one, still shipping but it is basically a spectrum analyzer that outputs a multiplexed voltage for 7 channels of frequency
I think it would simplify your project to have an ic do all the hard work, you would just poll it for data and read that
like say use just 5 channels control 5 vibrator circuits directly, if pwm does work then map the analog 0/1023 to 0/255 for a simple solution
im planning on using it for a light orchestra sort of deal for a car, having leds go off in the sub for low frequencys, mid to mod range speaker and highs to my tweeter lights, I will probably map it to getbthe brightnesss according
here's the sparkfun page
They have it retired but I bought 5 brand new for 8.99 off ebay including shipping
That's a great ideia, hadn't thought of that. Just one more question: if i plug the msgeq7 output to arduino analog input, what kind of values would i be getting on the arduino and how would i use them to get the different frequency ranges?
Hello!
I am working on a similar project. The link on the last reply is broken... does anyone have a cache or know of where that information can be found?
Thanks
I suspect you may be going with the msgeq7, as it is a great fit for this application, but I hate to leave a good question unanswered.
To get a good amount of resolution using the analog inputs on the Arduino you definitely want to amplify the signal. I did a project like this last year and I just used a fairly normal op amp. I can look up the exact model if you want. It was special in that it could run from one supply +5V instead of +5 and -5V and drive close to either rail. I think I amplified by about 10 to 20 times and I biased the center of the signal up to 2.5V. If you don't do this you will get lots of distortion as half of the wave is below 0 on the ADC not to mention the op amp.
From there I would use the FHT library to do a 5 bin FFT and from there all you need to do is control the motors.