FM Radio

37K18837

Intro: FM Radio

Recently, I came across RDA5807 module which is an FM Radio Tuner in a very tiny package. It is very cheap and uses I2C protocol for communication which means that only two wires will be required to talk to the IC. Less wiring!

My mom used to listen to the radio every day while cooking food before the radio died. I wanted to surprise her with a radio which I built myself. In this Instructables, I will show you how I interfaced RDA5807 IC with an Arduino. To make it look good, I designed an enclosure and 3D printed it. I'm new to 3D designing so it will be a simple design. No fancy stuff.

Let's get started!

STEP 1: The Plan

The plan is to keep everything simple and neat. No fancy stuff.

We will be using Arduino Nano as the brain for our project. The hard work of communicating with the module has already been done. Make sure you install the Radio library. There are many features which you can play with. Note: The library also works for SI4703, SI4705 & TEA5767.

One push button at the front will be used to put the radio in "Frequency Selection" mode and the other push button to select the frequency. A Pot will be used to scroll through the preset frequencies (which can be set in the code depending on your location).

An OLED Display will be used to show the frequency at which it is tuned in.

The output audio signal of the radio module is very low and is not sufficient to drive a 0W speaker. PAM8403 module will be used to amplify the audio signal. There are many versions of this module. I went with the one which has a pot for volume control as well as ON/OFF switch.

STEP 2: Preparing the FM Radio Module

As you can tell by looking at the picture, it is very, very tiny! On top of that, the pad spacing of the module is not breadboard/perfboard friendly.

We have to make a breakout board for it. Cut a small piece of perfboard about the size of the module. Make sure there are at least 5 holes on each side. Solder male header pins as shown in the picture. Next, place the module on the board and solder thin wires between pads on the module and header pins. I used the trim outs of the component legs.

STEP 3: Making the Enclosure

I am completely new to 3D designing and this is by far the most I have designed. The enclosure is designed in Fusion 360 and printed on Creality Ender 3 printer. I have attached all the .STL files which I have used.

I painted the Front Plate in white as I have only one color of filament.

I inserted the 'M3 Threaded Inserts' in the holes on the outer body using a soldering iron. It was quite satisfying!

Glue the Inner Rim inside the Outer Body using super glue.

Also, make a 6mm and 2mm hole in the 'Back Plate' for the knob of the amplifier and antennae respectively. I forgot to add those while designing.

STEP 4: Preparing the Circuit Boards

We need to make two circuit boards. One will be the main board with Arduino and FM Module and another one for the push buttons which will be mounted on the front plate.

I have used connectors using Male and Female Header pins for each component so that it can be connected/disconnected with ease. You can skip this step if you want.

Do the wiring as per the schematic.

STEP 5: Time for Coding

The code has been attached here. Download the .ino file and open it in Arduino IDE. Before you upload, there are two things you need to modify.

  • The number of radio stations and their frequencies will change. A quick Google search will let you know the Stations and their frequencies. Once you have listed them out, add them in the 'stations[]' array as shown in the picture. You have to omit the decimal point. For example, 9110 means 91.10 MHz, 10110 means 101.10 MHz and so on.
  • Also, enter the total number of stations in between the square brackets. In my case, I have got 12 stations inside the array. Hence, stations[12].Subtract 1 from the total number of stations and enter it in the code as shown in the second picture. 11 in this case.

I know there is a better way, but I ended up having many errors instead!

And, upload the code!

STEP 6: Putting Things Together

Hot glue the OLED display and speaker in place on the front plate.

Place the 3D printed buttons in their position, add a drop of super glue on the tactile switches and place the circuit board on top of the buttons making sure that the buttons and switches line up.

Screw in the potentiometer on the front plate.

Apply a generous amount of super glue on the inner rim and place the entire front plate with all the components on the rim.

Make all the connections of the components with the main circuit board. Connect the audio output from the radio module to the amplifier which is mounted on the back plate.

Put a dab of hot glue around the connectors to act as a strain relief.

Screw on the back plate using M3 screws.

Finally, cut the hot glue stick into 4 circles with a thickness of around 2-3mm and glue them at the bottom as shown. They will serve the purpose of rubber feet.

You're done!

STEP 7: Enjoy!

Power up your radio using 5V supply. If you are not able to find a 5V one, use 7805 voltage regulator with 12V as input.

Thank you for sticking till the end. Hope you all love this project and learned something new today. Let me know if you make one for yourself. Subscribe to my YouTube channel for more upcoming projects. Thank you once again!

31 Comments

Hi indoorgeek I´m experiencing some error on your sketch. Here is the image with the related error.
Could U help me, please ?
Hi, can someone please tell me the wiring of the 100k Potentiometer ?
Hi, everybody, since the video is not clear for me, and I not able to read the schematic, would be very highly appreciated if some can post the actual connections.
Thanks
Thankyou very much for you help. I managed to burn everything, just because of lack of help and the potentiometer missing in the schematic and all the rest. Next time, do not show yourself off, how good you are. Shame on you
I followed every step using the exactly same components and debugged code,the Oled works fine with ssd1306 library but didn't work here,nothing was displayed and only noise was heard .Sadly there is no debug infomation so i didn't get a clue,checking again what i missed
I get the same error as someone has posted "Hello! I am making this project and there seems to be an error. The display switches on, displays 100.1 and then refreshes again to show 48.40. I cant seem to find the error in code or circuit. Could anyone help?"
It's good,but i want to make an FM radio without using the radio IC.
Hello! I am making this project and there seems to be an error. The display switches on, displays 100.1 and then refreshes again to show 48.40. I cant seem to find the error in code or circuit. Could anyone help?
not a bad job, but I took a slightly different path...a little later, I will write an article about the extension Board for my device.
Thanks for the great project.ibsaw the scematic and i was wondering if anyone had what called 'ground loop'. If no i will try it also
Excellent project and nice clean design!
I've been wanting to build an FM radio using the RDA5807 module. I just purchased a new 3d printer this past summer so that makes for good timing to build the case.

What size OLED did you use? The 1.3 inch or the 0.96 inch? Also, is the speaker
impedance 8 ohms?

I'll start printing the enclosure while I wait for the internal parts to arrive.
Thanks!
Awesome! I would love to see it. I'm using a 0.96" OLED display and a 3W/4ohm speaker.
Thanks for your response! I really like the clean design of your enclosure.
The painted front panel looks like you used white filament. Nice job!

Thanks for the details on the parts! I'll start ordering my parts, today on
eBay.
HI,

Thnx for the instructable, great, simple project. I made it in prototype form, works as described, but . . .

The Arduino pin allocations in the schematic are different from the pins assigned in the sketch. Not a major issue but I wasted a bit of time checking hardware/connections before I looked at the code . . . it may trip up some novice builders.

thnx again!
billd

PS, these are the discrepancies that I mentioned above:
In the sketch the pins are allocated:
int setButton = 5;
int backButton = 6;
int potPin = A7;

On the schematic the pins are shown as:
Set ---> 10 (this represents setButton)
Adjust ---> 9 (this represents backButton)
R3 --->A0 (this represents potPin)

Hello Bild,

Your help would be much appreciated.

I posted a couple of questions for indoorgeek that created this project.

I want to get started on building this project by ordering parts, as soon as possible,
on eBay. So, I wonder if you can help me with the same questions that I posted for indoorgeek.

Did you use the the 1.3 inch or 0.96 inch OLED? Also, is the 3 watt speaker you're
using 8 ohms?

Congratulations on getting yours working and thanks for posting the pinout corrections.

Thanks,

Gary

Hi,

Please you can email me, the final version of schematic and .ino file?
totpajr@gmail.com

Best regards
Hi,

I did not modify the schematic, I connected the hardware to the pins as shown in the schematic.

For the .ino file (sketch) all you need to do is change the pin definitions from:
int setButton = 5;
int backButton = 6;
int potPin = A7;

To match the schematic:
int setButton = 10;
int backButton = 9;
int potPin = A0;

Good luck
billd
Hello! Thank you for pointing out the mistake. It has been rectified.
More Comments