Introduction: Cheap and Easy MP3 Shield for Arduino
This is a follow up to an earlier Instructable for attaching the guts of a cheap clip MP3 player to an Arduino.
https://www.instructables.com/id/MP3-Interface-for-Arduino-Cheap-and-Easy/
The previous Instuctable showed how to use the Arduino to control all of the functions of the MP3 player: volume increase and decrease, next and previous MP3 file, play or pause. The previous Instructable also showed how to disassemble these little clip players and salvage the cool parts within.
This Instructable makes the attaching the MP3 player to the Arduino more straight forward and a lot cleaner. In this installment, we will make a single sided Arduino shield. (You can use this same process for your other Arduino projects.) If you are into electronics and like prototyping, being able to fab your own PCB can be a great addition to the personal tool belt.
So why do this? Why attach an MP3 player to an Arduino? Think about responsive talking toys (how about a screaming/moaning version of Operation?), interactive dioramas, museum touch-and-explain displays...
PLEASE SEE THE LAST STEP FOR SOME FOLLOW-ON INFORMATION CONCERNING THE LC2093-B.
Step 1: Design the Board
There are a limited number of connections that we need to make between the MP3 player and the Arduino. These connections are:
1. 3.3V from the Arduino to power the MP3
2. Ground. So there is a common ground between the two devices.
3. Vol- on the MP3 attaches to pin 8 on the Arduino.
4. Vol+ on the MP3 attaches to pin 9 on the Arduino.
5. PLAY/PAUSE on the MP3 attaches to pin 10 on the Arduino.
6. Pins 6 and 7 of the Arduino are use to control a 74HC244 tristate driver to allow NEXT and PREV selection of MP3 files.
(Note, the comments on the previous Instructable suggested that the analog switches in that design be replaced with some more universally available part. I think the 74HC244 takes care of that: it is cheap, universally availble thru electronics distributors, handles both selections in one device and handles the 5V Arduino to 3.3V MP3 conversion.
See the previous Instructable for the explanation of how the design works...)
I use EagleCad. Because of the screwball spacing of the Arduino connector, I just start with the Arduino standard shield design and modify to suit my application. You can find a standard Eagle shield design at:
http://arduino.cc/en/Main/ArduinoProtoShield
Attached are my files.
Attachments
Step 2: Make the Board (part 1)
I make my boards using a couple of simple steps:
1. Print out the image on shiny magazine/catalog paper at 1:1 using a laser printer. You may want to do a multi-up, so you can make a few copies at the same time.
2. Clean the PCB copper using a 3M scrubby and a small amount of low abrasive cleaner, like Bon-Ami or copper pot cleaner.
3. Transfer the image from the shiny paper to the copper on the PCB using a regular clothes iron.
4. Slough the paper off the board using water and my two big thumbs.
5. Correct any errors using a Sharpie marker and XACTO blade.
(The etching process is done in the next step.)
Step 3: Making the Board (part 2)
I use Ferric Chloride and a home built bubble etching system. It takes ten to fifteen minutes to etch a board this size... that is about the limits of my patience anyway.
1. Add a hanger to the PCB to hold it in place. A piece of masking tape works fine.
2. Fill the chamber with Ferric Chloride solution. I reuse my solution multiple times and then store the dead solution in plastic bottles until our community chemical disposal days. The thin chamber of the bubbler does not require much etchant to get the job done. (Yes that is a kitty litter bucket as an overflow catch.)
3. Plug in the aquarium air pump, set a ten minute timer and make yourself a cup of coffee.
4. Pull the boards, make sure the PCB is fully etched. Rinse in running water.
5. Cut to size. I use a cheap tile saw from Harbor Frieght. Sand the edges. I use a sanding wheel.
6. Drill the 5 holes. All holes are 0.062 (1/16th). Four go in the centers of the round vias. The last one is on the ground area near the 3.3V via. See the last photo.
7. Remove the photo resist (toner) using acetone or finger nail polish remover.
7. I usually put on a coating of tin, using a ten minute soak in Tin-It solution.
Step 4: Build the Board.
Not many components on this one. I have a kit of 1210 resistors I got on eBay which is a never ending source of joy. You will need three (3) 0 ohm junpers and two (2) 4.7K resistors for pull-ups. I include a 1uF 0805 buffer cap on the 3.3V supply. Then the 74HC244 and the right angle connectors.
Allign the connectors using the Arduino itself. Solder the 4 end pins. Remove the Arduino and then solder the rest of the connector pins. This should not be too hard to keep in line.
Step 5: Add the MP3 Player.
1. Prep the MP3 player by adding (soldering) short pieces of bare wire wrap wire to the VOL1, PLAY and VOL+ bulls eyes of the player keypad.
2. Thread those wires thru the appropriate holes in the shield. Bend the wires flush and solder them down quickly on the shield (to avoid loosening the wires on the MP3).
3. Make the 3.3V and Ground wire attachments the same way.
4. If you wish, put a couple of spots of 5 minute epoxy between the MP3 and the shield.
Step 6: Use the MP3 Player.
1. Attached is an Arduino sketch that runs the MP3 player thru its paces. It assumes the MP3 has a microSD plugged in with at least four MP3 sound files on it. It switches the MP3s and ramps the volume up and down.
2. Have some fun. Make some sound.
Attachments
Step 7: Follow on Information
I found it strange that there were no data sheets available for the LC2093-B, the chip that is at the heart of this little player. I ran a couple of experiments and found that it DOES play WAV files with no problem but DOES NOT play WMA or Ogg Vorbis files.
The only data on the LC2093-B that any one has been able to find is the PDF schematic from the www.sztgmic.com website. See attached.
More searching of the internet lead me to the VLSI website:
http://www.vlsi.fi/en/products/vs1005.html
This and the other of the VLSI audio chip sets look very familiar, in fact the VS1000 (an Ogg Vorbis converter to get around the MP3 licensing fees) is very similar in functionality to the LC2093-B.
This is a quote from VLSI's VS1011 datasheet:
"MPEG Layer-3 audio decoding technology licensed from Fraunhofer IIS and Thomson.
Note: if you enable Layer I and Layer II decoding, you are liable for any patent issues that may
arise from using these formats. Joint licensing of MPEG 1.0 / 2.0 Layer III does not cover all patents
pertaining to layers I and II."
My guess is this chip is a Chinese clone/enhancement of the VS1000 / VS1011 (note that no 12MHz crystal is required on the LC2093-B) and that there is probably no datasheet because there is no licensing of the MP3 algorithm...
I have attached another Eagle board version. This one is double sided and uses thru holes. You could submit this file directly to Dorkbot PCB to have a shield made. This version supports either using the 74HC244 (bottom side) OR the analog switches TS5A3159 (top side). There is room for adding an amp (like an LM386) or other circuits using the matrix of vias at the front of the board.
For another approach, take a look at the TDB380 module by Tenda Electronics. There is an Instructable for this module also.
For another shield that plays MP3s, see Sparkfun's:
http://www.sparkfun.com/products/10628

Participated in the
Arduino Challenge
24 Comments
6 years ago
Step 1 :Design the Board
The circuit diagram is not clear or readable .
Please put a more understandable circuit diagram , we dont have one .
7 years ago
hi, do you think it's possible, someway, to read the ID of the songs via bt?
i mean, i'd like to interface arduino via bt to an android phone, and use a 1602 screen to view the actual song played by the phone and have some keys to control volume + -, prev and next track, play stop... i think that even 3 keys are sufficient, using short or long press to add 2 functions to the same key (vol- and prev, vol+ and next, play and stop)... so i can leave the phone in my pocket and have a decent screen on my dashboard to see what happens there...
9 years ago
is there any way i can control just the play/pause button and the previous button with just the arduino (as in no other ICs)? or does the previous button have to have a physical switch.
9 years ago on Introduction
How does a MP3 Player works like if i need to play it so should I give it a constant 5v or I have to give it a pulse?
9 years ago on Introduction
Got curious as to why use switches for those 2 buttons. Checked the output of the terminal that is switched to this buttons on one of this mp3 clips and found a steady pulse on it, 15.6ms high, 32 us low. Since you are using a microcontroller couldn't you just simulate this signal and feed it directly from a pin of the micro to the desired button instead of switching the signal between this 2 buttons?
9 years ago on Introduction
I would like a mp3 shield, trigger or something similar.
I would like to send a 12v signal to the MP3 player. when the MP3 player receives the 12v power I would like it to automatically start playing an MP3 file. then when the 12v is removed the mp3 player stops playing. then when the 12v is supplied again it starts playing the same mp3 file.
I know i can do this quite simply with an arduino but can i do this without it?
9 years ago on Introduction
Where to find this module? I try to find it on e-bay without success. Could you please send me this information on mladen.bruck@gmail.com ?
Regards !
Mladen
Reply 9 years ago on Introduction
Mladen,
Before you go this route, you may want to look at the WTV020-SD-16P modules on eBay or 4D.com. They are cheap and ready to prototype with. Also if you search Google there are a number of articles on Arduino interfacing with them.
There is software and support documents at:
http://www.4dsystems.com.au/product/10/117/Development/SOMO_14D/
http://www.4d-labs.com/prod.php?id=74
that should be helpful.
10 years ago on Introduction
For me, the best input was your etching-Tank.
Such a simple, yet smart solution for all guys and gals out there who only etch single, small boards on a non-regular basis...
THANKS a lot for this idea!
Reply 10 years ago on Introduction
Yeah, there is not much to it. I used a poly kitchen cutting board for the inside layer and two sheets of plexiglass for the outsides. Cut the poly board with a sabre saw. Lots of hi tack silicone to hold it together. Use nylon screws for mechanical hold, use long screws at the top so you can hang it over the edge of your bucket.
Just used a heated pin to poke holes in the fish tank tubing. Plug one end with a squirt of hot glue. Push the tube in, to follow the bottom radius you have cut in the poly board. Strap the tube to the poly board with zip ties,
I have used the bubbler line and a zip-loc baggie in the past to etch things also. Surprising how well this works.
Some day I will build a nicer one... (there are some beautiful designs on the web), The little ferric chloride you use can be used over and over, the etching just takes a bit longer each time, especially if you keep supplementing with fresh solution. After saving the used FeCL, I usually fill the chamber with water and let it bubble for a few minutes to clean things out.
11 years ago on Introduction
Question, would this be suitable for a custom lightsaber perhaps? If there were a way to shrink its size to be much thinner, but longer it would be perfect to fit into the hilt.
Reply 11 years ago on Introduction
Got it, you probably want to use an Arduino to control light sequencing and other things (beside talking to the MP3). Have you ever used the skinny version Arduinos like the RBB board from Mordern Devices:
http://shop.moderndevice.com/products/rbbb-kit
or Solarbotics Arduweeny
http://www.solarbotics.com/product/kardw/
http://www.solarbotics.com/product/18950/
or Teensy
http://www.pjrc.com/teensy/
Or the Minis... Lots of small form factor Arduinos out there. You could just breadboard with one of those.
Reply 11 years ago on Introduction
I've never even used arduino before, but it was the lowest cost alternative to the $150+ soundboards and led drivers. I do have some experience programming in several languages and working with a few different micro controllers, so I'm fairly confident I should be able to make it work. These small boards, are they just comparable to the standard arduino platform, just smaller? Or are they an actual sound board? The goal is to end up with a cheap, open-source lightsaber driver for people like myself who can't afford some of these really nice, but really expensive boards.
11 years ago on Step 7
Interesting analysis regarding the datasheet.
Does the VS1000 datasheet have information on the IIC interface? Our LC2093 might well retain the same functions, or at least the same data format....
If we knew how to make it respond then getting an Ardu' to try all 127 I2C addresses until it received a response would not be too difficult!
I continue to await my shipment from HongKong!
PS nice shield. I'm not really familiar with octal buffer chips. Any clues the theory of how you make this setup work?
Reply 11 years ago on Step 7
Two data sheets, one for the VS1000, the other for the VS1003:
http://www.vlsi.fi/fileadmin/app_notes/vlsi/guide_vs1000.pdf
http://www.vlsi.fi/fileadmin/datasheets/vlsi/vs1003.pdf
VLSI's documentation is very extensive. Poke around their website if you get a chance. If I get a chance I will take a look at the I2C also... it has been a number of years since I used I2C though, so you are probably way ahead of my re-learning curve.
I used the 74HC244 to do two things, provide the 5V to 3.3V conversion and act as a one-way switch. If either section of the 244 is in tri-state(high impedance mode), the outputs are just very high resistance. The high impedance mode is selected by putting the controlling Arduino pins in INPUT mode. That allows the two pull-up resistors to bring the 244 controls to 3.3V.
To switch either section of the 244 into conducting mode, the Arduino pins are pulled low and made to be OUTPUT. This turns the 244 from high impedance mode to conducting mode.
Reply 11 years ago on Step 7
I finally got my shipment of clip players through - they were dead cheap but have taken something like 4 months to arrive!
Sadly, although they look identical to yours, the ones I have do not have the same chip. They have a 48-pin blob of epoxy! Not too likely to find a datasheet for that....
None of the controls go to ground - you can trace the connections back to 6 pins of the "blob" and the controls work from combinations of these - I reckon your buffer chip approach should work fine but it will need a little tweaking.
Tantilisingly, there are RX and TX pins marked on the board that trace back to the blob, but I just can't get it to talk to me! I've tried various baud rates but I'm not even getting noise through. Ho Hum. It would have been nice.
Reply 11 years ago on Step 7
If you can get me your mailing address I will ship you a functioning board... my direct email:
dreschel@verizon.net
Sorry you had to wait so long to try this out. (I really only got involved with this to help one of my nephews with a senior design project.)
Reply 11 years ago on Step 7
That's really kind of you but I'm fine with the ones I have - I bought four and I'm only really messing about with them. I just thought it would be great if I could talk to them over serial because you could do anything that way with only 2 wires.
11 years ago on Introduction
Thanks for the update to the older project. I was going to post, asking about i2c updates, but this is great. Any chance you could offer etched boards for sale ?
I got my player from eBay last week, but I haven't gotten it to work yet. When I plug it into any of my Macs they say that it is drawing too much power from the USB port. Not a big deal. It uses a chip bonded directly to the PCB, ie. not a discrete IC btw, but the other side is identical to the above pictures.
Reply 11 years ago on Introduction
On the last step of this Instructable, I added an EagleCad board file, double sided, with through holes. This board supports both the 74HC244 circuit or the analog switch circuit. (I worried since your player did not have the LC2093, you might need to use the analog switch version of the circuit.) There are some notes on the board in the last step also. GOOD LUCK!