http://www.instructables.com/id/Cheap-and-Easy-MP3-Shield-for-Arduino/
The follow-on shows you how to design, etch and build a PCB shield to connect the MP3 to the Arduino. Replaces the analog switches with a 74HC244. SIngle layer board with large surface mount component design. Only 5 thru holes. Take a look.
Ebay abounds with sales for REALLY inexpensive MP3 "Clip" players. These players support MicroSD cards up to 8G, have a built in headphone amp, have built in volume control and Next and Previous control for stepping thru MP3 files. The Clip Players have their own battery and a mini USB port for battery charging and file exchange with the MicroSD card. (You have to supply your own MicroSD card.) And considering the low price, the sound quality is quite good.
For instance:
http://www.ebay.com/itm/ws/eBayISAPI.dll?ViewItem&item=330654403698&ssPageName=ADME:L:OU:US:1123
I had originally bought mine for $5, now up to $6.75! Better buy a few now...
If you need to add a little music or voice to your next Arduino project, this simple hack will get you there. So here is how this works. We remove the guts to one of these inexpensive little MP3 players, solder on a couple of wires to the MP3 circuit board and attach then two an Arduino protoshield (if you are using a full size Arduino, I will show wiring to an Arduino Mini also.) The circuit also requires two analog switches to completely control all the front panel buttons. The Arduino code to control the MP3 player is really simple and an example is provided. You load your sound files on to a MicroSd card and name them in a way so that they can be sequenced in the way you want. When you are done, your Arduino will be able to step to and play specific sound files, adjust volume up or down, pause, etc.
I plan on following up with an EagleCad shield design. But for right now, its wires and solder and a little programming, so Arduinites can get going.
And of course, after I wrote this, I found this one also:
http://www.instructables.com/id/Adding-MP3-to-your-project-for-300/
Hopefully whatever I have left out, you can find in the above.
Remove these ads by
Signing UpStep 1: Disassembly of the MP3 Player
So, first get a really small jeweler's Philips head screwdriver and remove the two screw on the white plastic side panel. The panel will pop off when the screws are off. (A small flat blade in the microsd slot. Be gentle!)
With the side off, you will be able to push out the other side. It is U-shaped.
With the other side out, you will be able to push out the PCB and battery. Again, be slow and gentle.
Now everything is out. Cool! Lets take a look at the circuit.








































Visit Our Store »
Go Pro Today »




how do you take one like that apart?
http://www.youtube.com/watch?v=67j1OebOsRI
Perhaps the schematic relating to the LC2093-B isn't accurate because one side of each button is connected to 3.3V and the other goes through a resistor and then Gnd, so if you shorted one side to ground you'd either bypass the resistor or just have both sides connected to Gnd. I guess that the resistors are in a different position relative to the switches in real life.
How did you work out which buttons needed to be shorted to Gnd and which needed to be connected via the analogue switches? On my MP3 player the buttons are connected differently to yours but I assume that the logic is the same. I just need to work out which ones I have to connect to ground and which to switch.
The tri-state uses only two output modes: 1) high-Z (impedance) like the mechanical switch is open and 2) zero or ground, like the mechanical switch is pressed, producing a short to ground.
Let me know if this is not right, but that is how I remember it.
The 2nd design does not use the analog switches at all.
I'm considering replicating it using my Arduino Due but am wondering whether I need the analogue or tri-state switches. The Due uses 3.3V instead of 5V. Looking at the circuit diagram that you kindly attached in your follow-on article, it seems that the buttons on the MP3 player are part of a resistive touch input system; pressing different buttons connects different resistors which causes different voltage drops. I therefore do not understand your use of pin 8 on your Arduino board as surely that would mean bypassing the resistors and therefore the player not seeing different voltages for the different buttons.
BTW, I bought a similar player to yours. On opening it up it looks exactly the same at first and then I noticed small differences in the track layout. Checking the resistances between the butons I see that they are connected differently to yours. The main chip has a different number on it though I'd be very surprised if it had a different pin outlay.
http://www.instructables.com/id/Cheap-and-Easy-MP3-Shield-for-Arduino/
Note that I use 3.3V for the circuit in that article which should be directly compatible with the Due. Note that I am shorting the switches on the MP3 player to ground, or leaving them floating, so I am not bypassing the pull up resistors. Good luck on your project!
Help is greatly appreciated!
I did a follow up using more standard logic (not the TS5a3159):
http://www.instructables.com/id/Cheap-and-Easy-MP3-Shield-for-Arduino/
The circuit in the above Instructable could be implemented using a standard Arduino proto shield with thru-hole logic. (I like surface mount because when I etch PCBs, then I don't have to drill holes. I can usually get away with single sided PCBs that way.)
Good Luck! Bill
FYI.
The version that I received seems to use a different IC and operates from a 4.5V battery, instead of 3.3,
I've successfully run my version on 5V from an Arduino.
The Play / Pause, FWD and Back buttons seem to short the center pad of the button to GND (0V). The center's are all pulled high to about 3V (on a 5V supply)
To interface these buttons to the Arduino, the simplest solution seemed to connect a diode to each of these center connection, so that the Arduino could not drive 5V into the MP3 player, but when the Arduino output was LOW, it pulls the connection down to approx 0.5V (it can't get lower because the voltage drop across the diode).
I've tested this and it works fine, as long as the "button" is only pulsed low and not held low for a long time.
The low pulse needed to be more than 100 milli seconds. I tried 50 milli seconds and it didn't work. Higher values e.g. 250 milli seconds may work, but 100 milli seconds seemed to work reliably for me.
The Volume UP and Volume down however are more difficult to control.
These connections are directly linked to the FWD and BACK button (center connections)
And the outer connection on these buttons is not to GND (0V) and appears as 1.8k to GND, but when power is applied this connection has about 3V on it.
Looking at this on an oscilloscope, the voltage is not constant, but is pulses low for about 30 micro seconds every 15 milliseconds.
It would be possible to use some additional components to interface this to the Arduino. Possibly something as simple as a transistor may work.
It may also be possible to control the volume by connecting the outer connection of these buttons to an input on the Arduino.
Then in the Arduino code, when the connection goes low, the output would need to go low at the same time.
But this would probably need to be handled by an ISR, as the Arduino would need to send the output LOW very quickly for it to be registered by the MP3 player, and it may not be possible to do it this way at all, depending on the logic and timing inside the MP3 player.
I used a transistor BC109 with emitter to the outer of the button connection and collector to the inner connection. The base of the transistor was connected to the Arduino via a 1K resistor.
This seems to work and doesn't seem to effect the NEXT / BACK functionality which is on the shared connection with the Volume Up and Volume Down (2 pairs).
Also. BTW. The MP3 player was not bought from the same eBay store, and though it appears identical, the IC is different to the one in this article, and the connections are definitely not the same. However the ability to run on 5V is definitely a benefit.
However, one I have noticed a ticking noise on the audio output. I've tried adding extra capacitors to the supply and various other places on the board, but its not made any difference.
I'm not sure if this ticking is something to do with the specific audio tracks that I'm trying to play, as they may be too quiet, so I'll need to experiment with some louder track and also try different data rates etc, to see if this removes the problem
A: Yes, but it wouldn't be as nearly as fun! (Those look like iPod Nanos...)
My next version is going to use a single 74HC244 kept in high impedance mode until the switching takes place. I will post it if it works. Should be simple and cheap. And easier to find than the wonderful TS5A3159.
(If someone can find the data sheet for the LC2093-B, that would really help.)
You say that you can't press the buttons at "microprocessor speeds" and from the code it looks like you use 100ms presses. My guess is that you could reduce this to 20-30ms, or maybe nearly down to 10 but no lower. I think it's waiting to see if it gets one of your short high pulses.
What I think happens is that when you ground red or purple, the chip waits for at least 10ms to see if it gets one of the short pulses that would indicate connection to the common orange line. If it gets no high pulse in that time then it assumes connection to ground. If it gets a 2.5 us high pulse in the first 10ms then it assumes next or prev is pressed. Not too sure how that squares with 3.5 us pulse on red, but of course there is a connection that can't be made with that keypad - red to purple - so it could be for detecting that (I wonder what that would do).
Have you tried applying a 2.5 us pulse to vol up or vol down during the first 10 ms of holding it low? I would try a repeat of LOW for 5ms, HIGH for 2.5um, LOW for 5Ms etc for a few reps and see what happens. If you are lucky, you will be able to dispense with the switch chip and with those two control lines and just use vol + & - to control track step also. The issue might be whether you could easily generate a 3.3V "high" without messing up the signals. A level converter might be easier to source than the analogue switch chip thou'.
Anyway, just an idea - I will watch this project with interest as I wait for my shipment from HK!
http://www.sztgmic.com/res/sztgmic/pdres/201107/20110721172252817.pdf
I did do some control of the NEXT and PREV using the pins on the Arduino. What I did was watch the 2.5us signal on the one side and then relay it to the other pin. Actually made a pretty good imitation. That did work, but because the Arduino was running at 5V and the MP3 was running at 3.3V, I did a two resistor voltage divider to knock the Arduino voltage down and that resistor to ground made the MP3 automatically change the volume. I gave up after a while, each time increasing the resistance of the divider.
Man if we could use the I2C, that would be just so cool.
Even if we just knew it's 7-bit address we could mess about with the interface & might work out some functions, but without that I don't see any way in. I e-mailed them and asked for an English datasheet. Probably won't hear anything, but you never know - they might. I'll let you know if I get anything.
I guess you would connect this pin to several Ardu' pins through appropriate resistors and set all but one to INPUT. Then set the pin you need to OUTPUT and pull down though the appropriate resistor. It seems to be working as a voltage divider against the 24K to 3V3 so whether you could fool it with one PWM pin and a capacitor I don't know!
These MP3 players are incredible value! £2.40 delivered from e-bay if you are prepared to wait for it to come from HK (I have plenty of projects on so no hurry here). I'd pay that just for the battery, and you get a free mp3 player & ear-buds thrown in!
In about 6-weeks when it arrives, I will be trying this!
Having the arduino generate tones using the internal pwm or a timer interrupt would be orders of magnitude faster. Thanks and good luck with your project.