radIO - Antique Radio Cabinet turned Oversized Audio Player
On the way to a piercing joint in downtown Rochester, a lovely old Philco radio in the
window of a pawn shop caught my eye. I put my face up against the window and
admired it like Ralphie oogling the official Red Ryder carbine-action 200-shot model
air rifle (with a compass in the stock, and this thing which tells time).
A couple weeks later (with some piss-poor haggling), the old Philco was mine for $81.
A few friends and I brought it home and cleaned it up. The original radio can be seen in
the top left, and below.
I gutted all of the original (broken) electronics from it, and gave them to a friend
to mess with. Below is a shot of the radio wiring...rat's nest!
radIO - Putting it all together
The goal of this month-ish long project was to turn the cabinet into a self-contained
audio player. I wanted to provide an interface for selecting and playing albums, artists, songs,
and playlists, while both maintaining the original look of the radio, and adding a bit of
my personal touch. Originally, I wanted to keep the old faceplate. However, it was cracked
and warped, so I purchased a few sheets of brass, and cut out my own faceplate using a Dremel.
The radio only came with three of the original four knobs. However, by purchasing rotary
encoders with push button actuators, I effectively had 6 inputs,
instead of only three. Here's
the part number for the encoders: EN12-HS11AF20
To display information, I purchased a super sketchy LCD from ebay. It was a pain to interface with,
since the controller is specified as "HD44780/KS0066/SPLC780D" on the seller's page -- all of which *should* be
compatible. However, I quickly found out that the timing of this
knock-off LCD did not match
any of the data-sheets...so it took some luck to get it working consistently. At least the
pinouts were standard...
A shot of the front assembly is below. Note that the flash overpowered the green backlight.
LCD, buttons and faceplate (Main Menu, and the "Now Playing" screen)
A PIC18F4450 is used to control the LCD, and read input from the
knobs/pushbuttons. A serial receive interrupt
is used to update the LCD display. Normally, I would queue the
information since writing to the LCD takes so long (on the order
of 10's of milliseconds).
However, since the microcontroller doesn't do much, I just went ahead and committed the cardinal sin of having and ISR take
a lot longer than it probably should. (Hey, it's the weekend,
we're allowed to be lazy then, right?)
The knobs and the push buttons are debounced and polled in software. When a change is detected, a single byte is sent to the PC (we'll get to that next) to denote
which input peripheral changed, and what its new state is.
I considered making a PCB... but then I decided to
prototype it first. (And then I never got around to making the
PCB...)
An old, unused PC (less than 500 MHz, running XUbuntu) runs the
show. I figured it'd be easier to write my own application software
specifically for this project, rather than trying to write a plugin for a
Linux media player. As a result, I wrote a media manger/player in C (and
a bit of C++ to interface with Umesh
Shankar's WMA TagLib support functionality) using
libVLC, SQlite, and TagLib. I
whipped up the code in a rush (as I
was trying to finish this before classes started), so it's really bloated and poorly designed. If anyone *really* wants to see the application code or firmware, I could either email it or publish it here.
Currently, this is an ongoing project. What's shown in the video (below) is just the basic functionality I got working. Whenever I have some free time, I'd like
to add playlist functionality, and make the application code and firmware a bit more robust. (Oh yea, and then there's a mountain of bug fixes...)
One notable feature is alphabetical "jump" scrolling in the
artists/albums/songs menu. Instead of manually scrolling through hundreds
of artists, you can just skip down to the L's from the K's by turning the
left most knob. This is implemented on my Creative Zen, so I thought I'd
mimic it.
Lastly, I bought some Logitech speakers, and tossed them in the
cabinet. Self-contained audio player...Perfect! Now I just need to fix the
tags in my music library! :P
Check out the video below for a peek of the basic
functionality.
Note that the only play mode implemented currently is "shuffle."