I have used an Android tablet as a base, STA540 for an amplifier, Blaupunkt GTx-542 speakers and, of course, an awesome vintage radio case.
Here is a video that demonstrates how it all works together:
Step 1: Device's Components
Here are components I've chosen to use for this project:
Vintage radio for project enclosure. eBay has plenty of old radios. Some are fully operational, some have seen their better days. I've picked one that did not work, but had its body in a good condition.
One might ask: why not restore the old radio? This might certainly be very exciting project. Unfortunately I am not very experienced with vacuum tubes. Also, I am not a big fan of non-customizable radio stations.
One might ask: what did you do with the old components? I still have them. I have no idea which are in working condition. If you want them and ready to pay postage – shoot me a message.
Archos 28 as base. Archos 28 is a reasonably priced (~80$) Android device that has all the features I need: 8Gb of internal memory, Wi-Fi, microphone and audio out. I have used it in my previous project and it has proven to be a very reliable gadget: it has worked 24/7 for the last 3 months.
One might ask: why not use a microcontroller and a set of chips? It looked a bit simpler and more efficient to use Archos 28, as it has all components on its board and also comes with OS Android. Since my radio is expected to be plugged in all the time, so power consumption is not an issue.
IOIO Board to interact with hardware. IOIO Board is an amazing device: it plugs into Android device via USB. Android device discovers it as an ADB host. There is a nice little API that allows any Android application read line state (either digitally or do analog read) and generate either digital or PWM signal on a line.
One might ask: why not use Android ADK? Unfortunately, ADK has been added only in Android 2.3. Archos 28 is running 2.2.
STA540 as an amplifier. I am not an expert in audio devices. I've picked this particular model because of many positive reviews by fellow DIYers. STA540 is a 4-channel, class AB audio amplifier. It has a really nice standby mode: it is exceptionally quite.
Blaupunkt GTx-542. These 4Ohm, 70-20,000 Hz, 2-Way coaxial speakers had a right size and a right price.
One might ask: why not some other speakers? I would shrug my shoulders: if you have any other speakers that fit this device better, please leave comment.
Misc. I've also used a rotary encoder to change songs, four buttons for changing stations and a bunch of capacitors, diodes and resistors to bring it all together.
Step 2: Preparation
Remove old components. Since I didn't plan to reuse most of the old components, they had to go. I could see at least two generations of engineers working on this radio before me.
Prepare chassis. I decided to use a PCB base board to put all my circuits on. This base would attach directly to the original metal chassis of the radio. I've used Dremel tool to cut the board.
Prepare body. The only modification I had to make is a cut a little niche to fit Archos 28 into the body. I've used Dremel tool to do that.
Step 3: Software
There was nothing awfully complicated about device's software. An Android app controls device's lifecyle: it uses IOIO board to read hardware state and play proper song from the SD-card.
Screen. I guess the most interesting part was designing application UI. I really wanted it to have the same style as the rest of the device. I had following mental model in mind: four adjacent cylinders represent four stations. Each cylinder contains song names on it. Only one cylinder is visible at a time. A knob on the right rotates visible cylinder thus changing a song. Pressing a button under the display changes cylinder thus chaining an active station. Stations are just folders on tablet's SD-card.
Podcast. Since I wanted to be able to listen to an only one news podcast (namely, BBC Global News) my podcast support was quite trivial: a thread wakes up every once in a while, reads podcast XML, downloads newest podcast MP3 and places it in the "News" folder.
FTP Server. I plan to include a little FTP server into the next version of the app. It would be really nice to be able to upload musing wirelessly. Since the device is already connected to my home Wi-Fi, it should be quite easy to transfer data back and forth.
Device's source code is available at google code.
Step 4: Circuit
Making the circuit work was the most time consuming part. Although it was easy to put all components together, it took me forever to figure out why a speaker is producing a constant 80Hz humming noise. I've made there are no loose wires, all critical wires are shielded and player's output is clean. Then I found that the problem was a bad power supply. Sparkfun 12V adapter is not a good component for this application. Enercell 9V adapter showed to be much better choice.
Step 5: Result
My radio plays music, downloads podcasts and looks vintage & high-tech. This project was also a lot of fun to work on: writing Android app, working on wood, hacking together a circuit, Photoshoping (rather, Pixelmatoring) device's screen and, of course, trying to be true to radio's original nature.
I would love to hear any comments or suggestions!