Introduction: Roberts RM33 Raspberry Pi Internet Radio (Yet Another…)

Yes, it is another Raspberry Pi internet radio build and not my first one either. I am not sure why this build is still such a popular one, but I do still enjoy it and cannot say this one will be my last either. I really love the look of the Roberts radios of the early 80’s and started thinking of converting one to an internet radio.

My goal was to maintain the same look and interface of the radio but replace the insides and give it a digital display. I really loved the mechanical feel and sound of the switches and the RM33 gave me lots of extra buttons to program.

I kept the concept of the radio like the original RM33 using the 3 center selection buttons for Radio, Spotify and Soundcloud. This allowed me to use the manual and 5 memory buttons on the side to simulate the same as the original for the radio option.

I managed to source a RM33 with a near perfect wooden case and all the buttons retaining their silver caps. The front panel was however loose, scratched and bent in places which led me to do a complete redesign of the RM33 paint.

The brains behind the radio is a Raspberry Pi together with a USB Sound Card and Adafruit Stereo Amplifier for the sound. I kept the original speaker and with some other parts managed to design a compact circuit for all the required components.


Roberts RM33 Radio

Raspberry Pi 3B

USB Wifi Adapter

USB Audio Adapter for Raspberry Pi (Ebay)

Serial IIC/I2C/TWI 2004 20X4 Character LCD (Ebay)

Petrockblock “PowerBlock” – The safe power button / power switch for Raspberry Pi

Stereo 3.7W Class D Audio Amplifier - MAX98306

MCP3008 - 8-Channel 10-Bit ADC With SPI Interface

Adafruit Perma-Proto HAT for Pi Mini Kit - No EEPROM [ADA2310]

Bourns 24 Pulse Incremental Mechanical Rotary Encoder with a 6 mm Knurl Shaft, Through Hole

Single Mono10K ohm lin Linear Log Logarithmic Switch Pot Potentiometer (Ebay)

1k ohm resistors x10

10k ohm resistors x9

JRC-23FS 5v Relay

1A Diode (for Relay)

BC337-025G NPN Bipolar Transistor (for Relay)

Step 1: Dismantling

I must admit I wanted to add a picture of the RM33 front before I took it apart, but I guess because the front looked terrible, I never bothered to take a photo of it. The front plate was so loose and bent it took no effort to remove it.

The RM33 has a great build, the main components are built on metal frames and screwed into place in the wooden case. It was a simple case of removing the screws and sliding the insides out. I got rid of the DC power adapter, so I was left with the main chassis containing the buttons and potentiometers.

Once everything was removed, I started thinking about where to place the various components. I went through two iterations of this whereby I had the Raspberry Pi mounted on its own to allow for easy upgrade. However to reduce the wiring I ended up placing everything in the main chassis.

Step 2: Modifications

The first step was to make sure I could get the buttons working as this is what gave the radio a unique character with a real mechanical sound when pressed. Each switch had multiple pins so I started with a multimeter to find the pins so I could use for the Raspberry Pi to detect when it was closed.

Once all the switches were working, I added two rotary encoders to my test rig, one for volume and one for selecting channels. I ended up replacing the volume rotary encoder with a potentiometer as I was getting annoyed with turning an encoder from 0% to 100% doing multiple turns. The potentiometer just made it a quick single turn.

Step 3: Modifications Part 2

Using the original chassis to mount the potentiometer and rotary encoder presented a new challenge as the shafts of both were too short to stick out far enough for the knobs to fit. I opted for mounting them in the wooden frame allowing the shafts enough clearance.

But this meant some slots needed to be cut in the frame to allow the frame to fit around the mounted bases. The rigidity of the chassis was not impacted it did not cause an issue. The LCD character display was originally also placed inside the frame but this caused it to be too far back from the wooden case. Luckily moving it to the front of the frame was a suitable alternative. I also replaced the original clear screen in the wooden frame with the smoked one.

Step 4: Circuit Design

After initially having the basics laid out on a breadboard, I copied the layout on a simple board and had wires everywhere and a ribbon cable connecting it to the Pi. This gave me voltage issues and was not great to look at. I started again from scratch using an Adafruit Perma-Proto HAT for the Pi.

The design is basic using short wires to place all the input/outputs I needed from the various GPIO pins. The 9 buttons have the standard 1k/10k ohm resistors. I used the MCP3008 analog to digital converter for the potentiometer which is a perfect fit for the gap on the header board.

I also used an extended header for the HAT which allows me to also put the Petrockblock “PowerBlock” board on the HAT to allow for safe power up / down with a switch for Raspberry Pi. This also does a clean shutdown of the Pi.

For the Adafruit Stereo 3.7W Class D Audio Amplifier I added a small relay switch board. This allows me to control when the amp is turned on or off. On initial boot of the Pi I struggled with ground loop isolation causing static noise over the speaker. Now I wait until the Pi has booted before I power up the amp and on shutdown, I can power off the amp.

Step 5: Software

The software is written in Python for simplicity as a lot of libraries are easily available for the LCD screen, rotary encoder and analog to digital converter. My script makes use of the MPD daemon and Mopidy for Spotify.

So once Mopidy/MPD was working perfectly it was easy to plug the controls into it. I wrote a simple menu screen to allow you to choose between stations/songs. Once you have scrolled with the rotary encoder to your choice you simply press the encoder button to make your selection.

The buttons on the front works like the original radio. The three in the middle you choose whether you want to listen to the Radio, Spotify or Soundcloud. For the radio the 6 buttons on the side allows for manual station selection with the menu or choose one of 5 preselected radio stations or favourites.

The volume knob also controls the power as it has the switch built into it which is connected to the Petrockblock “PowerBlock” which initially powers up the radio but will also perform a clean shutdown of the Pi and cut the power to the Pi. This is handled by a standalone script running in the background.

On the back of the radio there is a 9th button. This is designed on the original for you to program your favourites. But I made this a reset button when my code makes a wrong turn and is quick to reboot without a hard power cycle.

Step 6: Mounting Everything

Once I had everything connected and tested the next was to mount the Pi and both hats inside the radio. Luckily this all managed to fit inside the chassis, so I decided to model a 3D frame to mount the Pi onto and then mount the frame into the chassis.

This not only makes it look neat but also keeps everything secure without making connects with the metal frame. I can still with relative ease remove everything should I wish to upgrade the Pi or make any changes to the design.

The Pi mounted onto plastic standoffs which I epoxied into the 3D printed frame. The circle gap in the middle of the mount is for some ventilation for the Pi and the square gap is to allow the center buttons slide through for a better fit. The other two gap is to feed the cables through.

I also added a Micro SD card ribbon cable to allow me to remove the Micro SD card without having to remove the entire chassis from the case. This helps if I want to take backups or should it become corrupt.

Step 7: Paint

This is one of the few photos of the original front panel. Sadly (not sad) it is covered in paint remover which worked well, and I was simply able to wipe off the old paint with a paper towel. Was a bit of a weird moment as the Roberts radio was… Roberts no more?

After a light sanding, I added primer and the base coat of gold. Originally, I was going to give it a funky colour paint scheme but felt I owed it to the original to give it something more traditional. I must admit, painting is my Achilles heel and I never get it 100%.

I added a vinyl mask design my wife picked which I think gives the radio character. I added some pin stripes, again as a tribute to the original and label masks for the manual and memory buttons.

I could not get masks small enough for the lettering for volume and menu selectors, so I left it out rather than something that looked wrong. For the function button I could also not decide whether to put “Radio” and “Spotify” labels but was left with the same issue as above.

Step 8: Finished Product… or Is It?

I am really happy with the finished product even with the amateur paint job. From the exterior and interface, I do not think I will make any changes as I want it to still represent what I like from the Roberts radio.

For the software I still want to make a few enhancements and perhaps add some more features like different playlists for Spotify. I want to also look at making a custom kernel to try speed up the boot time. I tried using the Raspbian Lite version but had some issues.

I was thinking of making it battery powered, but I always tend to not do it because I rarely use it not near a power supply and worry the battery will die with lack of use. It is easy enough to use an external battery pack if needed.

Thanks for reading! This is my first instructable...

I'm on Twitter and Instagram if you want to follow my next projects.