It also features a colour-changing mood LED that projects through the tape counter window, and the amplifier has a handy remote control built into a cassette tape.
As well as the photos there's also a video of it on YouTube, enjoy!
Step 1: The Pi Radio
There are many ways to create an internet radio using a Pi depending on your preference, but the one that caught my eye a while back was at bobrathbone.com. I'm fairly new to the world of Pi and was attracted by the comprehensive instructions and gallery of radios that other makers have created. The instructions cover several different display types and seem to be regularly updated with hints and troubleshooting information.
I used a Raspberry Pi model B for this build, purely because I had one lying around and thought this project might not be so demanding on its limited (by today's Pi standards) performance.
The radio code itself was really easy to install, managed in headless mode (no monitor attached) using Putty to connect to the Pi via SSH - this is where the detailed instructions really helped. I wanted to use a negative RGB screen with push-button controls so followed the Adafruit section of the "Pi Radio Constructors Manual". The display arrived in kit form and needed a reasonable amount of soldering - a skill I'm pleased to have improved throughout the project thanks to a new soldering station and (more importantly) lots of practice. The screen circuit went together just as described in the Adafruit online guide, and thankfully I realised just in time that I'd need to use an extra-tall GPIO header if I wanted to connect a cobbler breakout on top for the DAC circuit.
The Adafruit kit came complete with microswitches but I wanted to wire in the original mechanical buttons, so I soldered in jumper posts instead. It took some trial, error and re-soldering to get it working, one thing I'd say is that if the screen lights up but looks blank check your contrast control! That had me head-scratching for hours. Once I had the Pi radio working on its own (through headphones) I tinkered with the code to set the display colour to a more Raspberry-like red, create my playlist of radio stations and enable wifi via a USB adapter. I've not quoted any of the code directly here as the instructions on the sites linked above are far better than I could replicate!
I've been a big fan of internet radio for quite a few years, particularly the listener-supported Soma FM stations, so it was satisfying to be able to set up my own exclusive playlist of favourite stations (Secret Agent, Illinois Street Lounge and Boot Liquor among others).
Since starting this project I've seen several high-quality audio add-ons appear for the pi, and part of me wishes I'd used one of these for a more audiophile experience, but at the end of the day I wanted this to be a great-looking radio for occasional use in the dining room rather than my main hifi system, and I'm happy with the sound quality.
Step 2: The Case Part 1
I was thrilled to pick up this old B&O cassette player for just £12, it popped up on my local Gumtree (free ads) search and was already broken, apart from the VU meter lights. I just love the quirky style of these vintage audio separates, my brother-in law had a similar BeoMaster in the 1980s and it was so different to the other tech at the time, with its elegant sliding controls and functions hidden behind sliding panels - I had to buy it.
The first job was to strip out the old innards, so I set to with a screwdriver - strangely encouraged by the dismantling instructions on the back panel and guided by the complete service manual, amazingly still available on the B&O website. I was expecting to find a plastic chassis, glue etc inside but it was wall-to-wall aluminium, steel and circuits, held together by dozens of bolts of different sizes and head shapes depending on their function. As well as being dismayed at the complexity of a complete strip-down I was really impressed by the quality and attention to detail inside the case, everything was a precise fit.
At this point I decided that for fun I would try and keep the standards up for the rebuild - using nuts & bolts for construction and as little glue & bodging as possible. This made things a bit harder but felt more true to the original - and came in very handy on the multiple occasions when parts had to be dismantled. The case stripped into about a million component parts as per the exploded diagram, all of them solid metal apart from the VU meters and switches. I kept the discarded parts handy and gradually re-used most of the original solid-core cabling as I built the replacement circuits, with only a few short strands left over at the end.
With everything in bits it was time to turn my attention to the soundbar, and look for a way to integrate it into the case.
Step 3: The Soundbar
The soundbar was quite a low-end one (Sainsbury's tech brand) that came bundled with a secondhand TV I bought, so I had no worries about tearing it apart, having tested it first - sound quality was fairly good, just a bit hissy at low volumes, not unlike an 80s tape recorder! There wasn't much to it in truth, just the two speakers, a board for the Amp, one for the status LEDs & IR sensor and a separate smaller board for the Power/Mode and Volume microswitches.
It was pretty obvious that the speakers couldn't be mounted in the back or sides of the case, as these were solid aluminium and would spoil the all-original look, so I decided to fit them at the front, angled downwards so that they wouldn't make the unit too tall and ugly, but not angled so much that the sound would be muffled. I chopped down the original soundbar enclosure to the width of the Beocord and made new speaker cut-outs in it using a hole saw - the first time I'd used one but it made a really neat job! I then chopped out some of the back part of the enclosure so it could be fixed to the case at just the right angle.
I drilled holes in the front part of the aluminium case top, then bolted in the soundbar enclosure, connecting it to the case's bottom with meccano brackets, something I used a lot in this build. This raised the whole unit up by about 30mm at the front, so I used 10mm roofing bolts to similarly jack up and connect the rear of the chassis solidly to the base. This worked really well as the bolt heads were securely fixed to the base, meaning the chassis could be raised or lowered precisely by adjusting its fixing nuts. By now I had a solid but empty case - time to add in some stuff!
Step 4: The Pi Platform and Big Buttons
The roofing bolts worked so well on the case that they were an obvious choice to support this floating platform. Digging around for materials I found an old thick perspex photo frame, ideal for the job. Not only was it easier to cut and work with than metal, it was also transparent, very handy for accurately marking out mounting holes. First I drilled the holes for the roofing bolts, then with the platform secured in place I measured (several times) where the switch assembly would need to be mounted. I wanted to make best use of the big mechanical tape control buttons, as there's something really solid and tactile about them, like piano keys almost.
They originally worked an elaborate system of levers to control the tape functions, and it was great that they dismantled from the tape chassis as a self contained sub-assembly, with their springs and levers intact. I bolted them to the plastic platform, cutting a hole beneath each switch for the lever to poke through. A couple of mm either way would make the switches stick in the case so this took a while. I wanted these buttons to control the radio, so bolted a small lever microswitch behind each of them, so that the "tail" of the button that originally worked a mechanism would now click the switch. It was at this point that I had to go out and buy a new nut and bolt assortment, as I'd already exhausted my supplies!
With the buttons and microswitches fitted to the platform the next thing to be fitted was the Pi itself and the tape lid with the window. The lid had several handy mounting holes at the sides – even more convenient as they were spaced the same distance apart as meccano holes! I had originally hoped to make the tape lid pop up, revealing the Pi underneath, but this was just too complicated, so I made meccano brackets to hold it securely to the perspex platform. Now that the tape lid was in exactly the right place I needed to do the same for the Pi, and this is where the Perspex platform really helped, as I could position the Pi precicely under the lid and then accurately mark out the Pi’s mounting holes by looking through the Perspex from the other side.
With the Pi securely in place I wired the front button lever switches up to the jumper posts on the display circuit.
Step 5: The VU Meters
This looked like the ideal solution as thanks to the extra-tall gpio header I could just connect a cobbler board to the DAC to feed the VU meters. I tried this out on breadboard first (partly using jumpers made from the original B&O cables) and just couldn't get it to work - though this seemed to be a software configuration problem rather than the circuit or prototyping.
The VU code example I'd followed was based on music playing directly on a pi connected to a monitor etc, whereas mine was using the installed internet radio. I spent a while looking into the details and error messages and found out that sound on the Raspberry Pi and Linux in general is a pretty complex business! The VU code relied on PulseAudio to pass the peak volume level to the GPIO pins, whereas the internet radio seemed to be using the Alsa decoder. This got confusing pretty quickly - I made really good progress thanks to the many forums and got down to a single error message in the end "sink seen: auto_null / Dummy Output". To be continued, ideas anyone? I suspect I need to look more closely at how PulseAudio and Alsa are configured.
I decided to come back to this later and transferred the circuit from solderless breadboard to a soldered stripboard, using more of the original cabling for the permanent connections and soldered posts for the GPIO connections, so they could be changed if needed.
Still what I really wanted to do was make those pesky VU needles move! I experimented with simple scripts to turn the GPIO outputs from low to high, and happily via the DAC circuit this moved the needles. By adjusting the timings in the script I could change how fast they nipped back & forward, and settled on a natural movement. I then set the script to run on startup by adding
(sleep 11;sudo python /home/pi/VU/sample2.py) &
to the rc.local file in the /etc/ folder of the Pi - there are other ways of achieving this but this worked fine for me, with the "sleep" interval timed so that the needles would start moving at the same time the music started playing. It was a compromise to not have the VU meters moving in exact time to the music, but getting them working at all, especially controlled via the Pi, was very satisfying, and as it's just code it can be tinkered with at any time!
The meters were originally illuminated by really sweet little bulbs, but I thought it best to replace these and went with bright white LEDs instead.
Step 6: Amp Controls and Fitting
The soundbar needed to be controlled separately from the Pi, and (possibly down to its basicness) it only had three hardware buttons - a combined Standby/Mode button, depending on the length of keypress, and Volume Up / Volume Down. After wiring the big cassette buttons to the Pi I conveniently had one left (Pause) so decided on this one for the Standby/Mode function.
For the volume up & down I fixed lever microswitches to the underside of the original Volume control slider, so that moving it up and down would click the switches, keeping more of the original feel. To connect these new switches up I "broke in" to the soundbar's control circuit, by identifying the pins used by its microswitches and gently prising up each one with a tiny screwdriver - just far enough to pass a cable round the switch leg and solder it into place.
The amplifier circuit has an indicator panel mounted between the speakers with LEDs to show power status and audio source (Line / Bluetooth). The main amplifier circuit needed to be mounted quite closeby, as there was only a short and fragile ribbon cable between them. To achieve this without blocking the aux and power inputs I made some mounts from meccano that securely held the amplifier circuit upright in the case, between and just behind the speakers. The amp's switch circuit was bolted to the base of the case nearby, keeping things tidy. Although the soundbar does have adjustable balance, bass and some room effects, these functions are managed with its mini remote control. To keep these options open but still retain the retro mood I mounted the remote in the body of a cassette tape by cutting a remote-sized hole with a rotary tool, so it could be kept handy but wouldn't look too out of place.
Step 7: The Case: Part 2
Now that most of the parts had been fitted it was time to finish off the case - especially the gaping holes at the back and sides.
Raising up the whole case to accommodate the soundbar had left a 30mm gap all the way round, which was really handy for fitting the components and wiring up the jumper leads (sometimes using long tweezers, like in the Operation board game) but I wanted the finished product to keep as far as possible to the clean lines of the original.
Initially I wanted to use sheet aluminium to plug the gaps but I just didn't have the tools to cut it precisely enough, and fitting it to the case would have been difficult with all of the components now installed. The wood-effect aluminium sides were fitted to the case body with tiny grub screws, hiding all the bolts inside, so I decided to just extend these by adding a black plastic "skirt" to the bottom of each, cut to exactly the right size.
Conveniently I'd kept the unused half of the soundbar enclosure "just in case" and I was able to whip up both of the new side panels from this over a couple of evenings. I compromised at this point by simply hot-glueing them to the original side panels, but they look pretty good and were easy to fit. The gap at the back of the unit was tidied using a cover also made from the left-over soundbar case - it was almost exactly the right size and shape. As the only things at the back of the radio are the power cable and the wifi adaptor this was a really straightforward job, using the original bolts and bolt-holes to secure it in place.
Step 8: Sugru!
I've been wanting to try out Sugru for a while and this project gave me the perfect opportunity. With so much of the case turning out to be metal I was concerned at the effect this might have on the signal to the Pi's USB wi-fi adaptor , so I decided to use a USB extension cable to make it stick out the back of the case.
There was a really convenient hole for this, the DIN socket where the cassette player would have been connected to an external amplifier. The hole was plenty big enough for the USB socket to poke through, but how to secure it in place? Sugru to the rescue! If you've not heard of it Sugru is a bit like play-doh, and comes in small sachets. You can mould and shape it like modelling clay, but when left overnight it hardens into rubber - perfect for making a custom-shaped grommet to hold the USB socket firmly in place. It's not the neatest job you've ever seen but for a first experiment it worked really well, and I can now think of loads of practical uses for it in other projects.
Step 9: Mood LED
I was keen to get the original rotary tape counter working on this build, so it would spin round while the music was playing, but in practice this just wasn't do-able - the mechanism would have been in the way of the Pi and ribbon cable, and running it with a motor would have needed another power supply or at least a battery pack.
I was determined to do something with the little square smoked "window" though and thought making it glow up red to match the display would be nice. I bought a selection of 5v LEDs from the local Maplin and tried different options, running from the Pi's 5v output - plain red was nice and understated, but although bright-ish the LED was diffused and didn't really light up the "window" very well. The colour-changing LED was definitely the way to go - it was really bright and the colour change was much more subtle than I'd imagined.
It was only when I moved the radio off the workbench to another table that I beheld its true brightness though, the LED produces a really nice ambient cone of light above the radio - especially effective (though difficult to photograph) in low light with a clear cassette tape on top to catch the light.
Step 10: Finishing Off
Fitting together the final bits of the case left the project pretty much done, the last job was to create the fabric speaker cover, which was just a cut-down version of the one fitted to the soundbar, with extra holes cut. The speaker fabric was superglued to the frame and popped into place, with the overlapping fabric tucked behind the new panels at the sides.
As always there was a last-minute change! On testing it with the kids it was obvious that although the perspex platform was strong it did have some give in it, enough to make the big buttons feel spongy. This was fairly easily remedied with a couple of balsa wood supports - though with everything in the case this was another delicate tweezers job.
All things considered I enjoyed this build a lot – having to be really exact with measurements and not frying or scratching the irreplaceable original parts was a daily challenge, but it turned out just as I hoped in the end, a solid and functional internet radio with a classic design.