Modern DIY FM Radio

Back in the day, building a DIY radio was fun! We only had to get our hands at a germanium diode, make some coils, and with a resistor and long wire as an antenna maybe we could get some sound out of those old white earplugs. That was back then. Now we have things like the Si4703 FM tuner chip that can tune in FM radio in the 76–108 MHz range, comes with integrated AGC and AFC, controlled by I2C, as well as a bunch of other acronyms which seem to make the whole DIY radio-building process outdated. The challenges of the past resulted in the proven solutions of the present in which we build upon.

This little project by [Patrick Müller] is a modern radio DIY tutorial. With an Arduino Nano as the brains and controller for an Si4703 breakout board, he builds a completely functional and portable FM radio. A small OLED display lets the user see audio volume, frequency, selected station and still has space left to show the current available battery voltage. It has volume control, radio station seek, and four buttons that allows quick access to memorized stations. The source code shows how it is possible to control the Si4703 FM tuner chip to suit your needs.

As for ICs, not everything is new, [Patrick] still used the good old LM386 amp to drive the speaker, which is almost 35 years old by now. As we can listen in the demo video, it can still output some seriously loud music sounds!

Sadly, due to the FM receiver band constraints, you can’t listen to Jupiter on this one.

Nothing prevents you from adding an external bandpass to help the LNA, but I doubt that it will make much of a difference in the case of FM radio. After downconversion, the “SDR” side of the radio does a pretty good job at digitally filtering for the desired channel.

Application Note AN383 from Silicon Labs is worth downloading as it details AM and FM applications. It will also cover 162.400 MHz-163.275 MHz Weatherband as well as the aeronautical 120MHz AM band (different chip versions), Note that Weatherband are also marine radio channels. Also good for RDS (Radio Data Service).

From the linked article: “But there is another problem: the Arduino Pro Mini runs at 8 MHz, half the speed of an Arduino Uno or Nano. My testing showed that this is too slow to drive the OLED display.”
There is yet another problem: this guy doesn’t know what’s overclocking. I’ve seen ATtinys running at 30 MHz on a 3V power supply, so overclocking an ATmega to 16 MHz shouldn’t be a problem.

“There is one “advanced” function in the source code to measure the battery level by comparing it to an internal 1.1 Volt referance inside the AVR chip.”
Is using the ADC without calling analogRead() so advanced? And what’s a “referance”? He should turn on both his brain and the spell checker when writing these things.

“We need to level-shift a total of three signals: SDA, SCL and RST. I had to use two I2C-shifters.”
Seriously, is he using a shifter just for the reset signal? Does he know what a resistor is? And does he really need that reset signal?

Hmmm… I looked at his sketch, and noticed that he “hard-coded” the presets. :P

I’m working on an Arduino-controlled AM/FM radio (based on a completely different chip) and was hoping to see an easy way to select presets to read and store, but nope. It also looks like 95% of the work is being done by the
” ” library. No shortcuts for me, here. ;)

BTW, I suspect that English may not be the author’s primary language, but at least it’s readable.