Introduction: North Korean Radio
There are reports that domestic radios in North Korea lack a tuning control. From the point of view of a totalitarian government, this is obviously a good idea as it prevents people from listening to evil ideas (i.e. not the government's).
There are other benefits to such an approach, including a simplified interface.
I like to fall asleep at night to the strains of classical music, and to listen to the early morning news before I rise. Previously this modus vivendum was supported by a bedside radio which could switch between a station on FM (the music) and one on AM (the news) with a single button push, and which had a snooze function which turned the radio off after a thirty minute delay.
Sadly, after only eighteen years of service, that radio broke and when I went to buy a replacement I could not find any in the shops which had the features I required. Suitably angry, I decided to build the perfect bedside radio .
It was inspired by reports on North Korean radios, and I omitted an "OFF" switch due to the remark in Orwell's "1984" that the telescreen sound could be turned "down but not off".
 Your idea of perfection may differ.
Step 1: Requirements and Design
The requirements were:-
switch off after a time so that I could drift off while listening
manual volume control for tactile feedback and rapid change of volume level
two radio stations easily selectable in the dark.
You may notice the absence of things like tuning to other stations, battery power, good at using a poor signal, multi-band, nice display, etc. etc.. Should you wish to add such things to your version, then I wish you well, but I do not need such fripperies for a bedside radio.
Since I had a drawerful of Arduino Nano clones, and there are cheap FM tuner stages available, I decided to use that as the core, with a PAM8403-based amplifier.
I ripped a pair of speakers from a (different) dead radio and lashed up the breadboard shown above to get a proof-of-concept working. This ran off the power supplied by the Arduino's USB, had no volume control and had essentially a single-line program controlling it which just sent a frequency request to the tuner on boot-up.
 Fortunately, both news and music stations had an FM frequency, so there was no need to try and control an AM radio from Arduino, which I suspect would be a lot harder.
Step 2: Soldering the Controller and the Tuner
Once I was happy that things were actually going to work, I soldered the Arduino onto a piece of stripboard.
Fitting the tuner onto the board was going to be harder, since it was fitted with angled pins which would have mounted it vertically. I heated the board with a hairdryer to soften the plastic a little, then pulled off the plastic housing the four pins of the connector. Then each of the four pins was desoldered and removed individually and a straight header soldered into place.
Once that was soldered to the stripboard, it supported one end of the tuner board and an M1.6 bolt was used to hold the other end rigidly in place.
The four lines required were connected to the Arduino. The power (5V) and ground were connected. The library I used for driving the tuner required the use of pin A4 for SDA and pin A5 for SLC, so those pins were used.
A 100 microfarad electrolytic capacitor was put across the power rails as close to the tuner as possible for decoupling. Without this, there was a nasty clip at peak sound.
Finally, the setup was tested as shown in the first photograph by powering from the Arduino USB and sending the audio output to a pair of computer speakers with their own amp.
Step 3: Adding the Amplifier
The amplifier is like a lot of cheap Arduino add-ons, in that there is very little data on it. I found this page to be quite useful though.
As a piece of wonderful design, the connectors on the amplifier board were spaced at _just_ not quite 0.1", so I had to solder wires to the connectors, and use a couple of short M2 stand-offs to hold the amplifier on the stripboard.
I used terminal blocks for all the connectors from the amp. There are a fair few. The left and right output channels have separate grounds, and I found some pages saying "connect at your peril," so kept them entirely separate.
To connect the audio input, I used an old PC audio lead, 3.5mm TRS to 3.5mm TRS, and snipped off a few inches to make the connection. It works OK, but for the next version I shall remove the 3.5mm socket from the tuner board and solder directly.
The amplifier is a class D and is pretty efficient, but it also has a mute pin. Drawing that low shuts the output of the amplifier off. The Arduino only has internal pull-up, so I mounted an external 1k pull-down resistor to disable the amplifier by default. Without this, there is a nasty squawk at power-on as the amplifier starts amplifying before the tuner tunes. The same mute line is connected to an output pin on the Arduino so that the amplifier can be muted or enabled by software.
Step 4: Adding the Volume Control
To allow the volume to be controlled, I used a dual-gang, 10k rotary log pot.
I spliced this in the audio input to the amplifier to save power so that the amplifier would only produce as much as was needed. It worked OK but cramming it onto a little corner of the board meant that it looks a bit messy.
Step 5: PSU and Station Select
I reused the wall-wart from a dead Samsung phone to provide power.
To select which station to use, I got a SPDT switch with center-off. This is connected to a couple of pins on the Arduino and can link either of them to ground. When the switch is in the centre position, neither is connected to ground
Both pins use the Arduino internal pull-up and so register "HIGH" when not selected.
The logic used by the system is that:-
with the switch in "UP" position, one pin will be tied low and the radio will tune to that station and play the sound.
with the switch in "DOWN" position, the other pin will be tied low and the radio will tune to that station and play the sound.
with the switch in "CENTER" position, neither pin will be tied low and the radio will remain on the last selected station but start to countdown to muting the sound.
The software to handle all that is in the sketch file attached to the Introduction step.
Step 6: Build a Suitably Revolutionary Case
To make the case as small as possible, I mounted the speakers in the base, pointing down.
I cut the pieces for the case, and used a holesaw to cut out holes for the speakers to fit into.
The removed pieces became the front feet of the case and a piece of scrap the same thickness became the back foot.
I glued the case together, screwed the feet and the lid on and then sanded the whole outside on a belt sander.
Further sanding was done down to about 220 grit, and then three coats of varnish were applied. In keeping with the ethos of the piece, only the visible surfaces were varnished.
Once the varnish was dry, the speakers were screwed to the base, the electronics were fitted to the case, and the selector switch and volume control were mounted on the front panel.
Step 7: Lessons Learned and Plans for the Mark II
This works really well and I'm really happy with the simplicity of the interface. I am probably going to make another one using what I've learned from this one, but I have no intention of changing the controls as they are absolutely perfect for what I want.
What didn't go so well
On the cheap 328 model Nanos which I used pins A6 and A7 CANNOT be used for digital input. This is not mentioned anywhere in the data and wasted a while until I discovered some chat around the subject.
the sockets on the tuner board were a nuisance and meant that there were a couple of problems
1) use of 3.5mm plug for audio is ugly and big
2) FM antenna is at the wrong angle for local transmitter.
The audio plug and wire is concealed and the local transmitter is so powerful and so local that neither of these were real issues, but I would like to correct
The unit is powered by an external adapter, while I would prefer it to have a chassis male socket to accept a kettle lead or similar mains cable.
The circuit kind of "grew" like Topsy and is a bit of a mess. It should have been much neater.
The potentiometer for the volume control was very close to fouling and shorting against the metal back of one of the speakers. I clipped an insulating plastic shield from a milk bottle to protect everything, but a bit of forethought would have avoided the problem.
When connecting the mains adapter for the first time, I got confused and connected Vcc and GND the wrong way around. Fortunately, I had also forgotten to solder the GND connector linking the input to the circuit, so no damage was caused. This is a case of two wrongs making a right.
Overall, the radio does exactly what I want, and nothing that I don't and I am very happy with its performance.