A couple of years ago, I found a modern jukebox (with iPod connectivity, AM/FM radio, CD player and LEDs) dumped in my street. The body was in decent condition but all of the electronics were ruined apart from the LEDs. I decided to take it and replace all of the electronics with my own and add a few cool features.
One of the parts of the larger project was to make an FM radio with an LCD and pushbuttons to control the frequency tuning. After a bit of looking around, I found the Si4703 evaluation board which easily interfaces with the Arduino to make an FM radio which uses headphones or an AUX cable as the antenna. This little description is what I came up with in the end... I'm using an Arduino pro mini, with a 3.3V LCD and the Si4703 evaluation board. Hope you all enjoy!
Step 1: Gather Parts
- 1 * Arduino Pro Mini 3.3V
- 1 * FTDI breakout board 3.3V
- 1 * 3.3V LCD
- 1 * Si4703 evaluation board
- 3 * 10k resistors
- 2 * N/O momentary push buttons
- 1 * Push on push off pushbutton
- Various JST connectors
- 2 * Female header 1 x 12 pin to fit Arduino pro mini
- 1 * Female header 1 x 8 pin to fit Si4703 evaluation board
- Male headers
- Veroboard
- Wire
- Solder
- Heat shrink
- Speakers or headphones
- 3.5mm male to 3.5mm male aux lead (if using speakers)
- Soldering Iron
- Side Cutters
- Hobby Knife
- Bench top vice
Step 2: Solder Male Headers
Solder male headers to the LCD, Si4703 evaluation board and the Arduino Pro Mini. This will make it easy for you to connect and disconnect the Arduino and Si4703 boards from the main veroboard circuit, so long as you also use female headers on the veroboard. You will be soldering wires to the LCD in the next step.
Step 3: Solder Wires to LCD Header
- LCD Pin 1: Vss pin to ground (BLACK)
- LCD Pin 2: Vdd pin to 3.3V (RED)
- LCD Pin 3: VO pin to ground via 10k resistor (BLACK)
- LCD Pin 4: RS pin to Arduino digital pin 9 (YELLOW)
- LCD Pin 5: R/W pin to ground (BLACK)
- LCD Pin 6: E pin to Arduino digital pin 8 (GREEN)
- LCD Pin 11: DB4 pin to Arduino digital pin 4 (WHITE)
- LCD Pin 12: DB5 pin to Arduino digital pin 5 (WHITE)
- LCD Pin 13: DB6 pin to Arduino digital pin 6 (WHITE)
- LCD Pin 14: DB7 pin to Arduino digital pin 7 (WHITE)
- LCD Pin 15: LED_K pin to 3.3V (RED)
- LCD Pin 16: LED_A pin to ground (BLACK)
I've colour coded mine so they don't get mixed up and I also added some heat shrink over each of the pins I soldered to make sure they're held in tight and there's no shorting across the pins.
There are 6 JST connectors in total branching off the LCD. Perhaps if you had larger JST connectors and a better laid out veroboard design, you could put these all in one big connector. I didn't have that and wanted to keep the pins separate, so I have similar pins grouped together.
Step 4: Arduino Code
Upload the attached code to the Arduino Pro Mini via the FTDI breakout board.
You will need to have the following libraries installed:
- LiquidCrystal
- SparkFunSi4703
- Wire
You should already have the LiquidCrystal and Wire libraries by default, but you will need to download the Si4703 library from: https://github.com/sparkfun/SparkFun_Si4703_Arduin...
Step 5: Solder The Veroboard Circuit
Take the diagram above and solder the circuit on the veroboard. Be sure to leave adequate space for adding your JST connectors to the veroboard. Remember to use the female pin headers for the Arduino and Si4703 if you plan on being able to remove these at some point. The pin connections are listed below:
3.3 V LCD:
- LCD Pin 1: Vss pin to ground (BLACK)
- LCD Pin 2: Vdd pin to 3.3V (RED)
- LCD Pin 3: VO pin to ground via 10k resistor (BLACK)
- LCD Pin 4: RS pin to Arduino digital pin 9 (YELLOW)
- LCD Pin 5: R/W pin to ground (BLACK)
- LCD Pin 6: E pin to Arduino digital pin 8 (GREEN)
- LCD Pin 7: DB0 N/C
- LCD Pin 8: DB1 N/C
- LCD Pin 9: DB2 N/C
- LCD Pin 10: DB3 N/C
- LCD Pin 11: DB4 pin to Arduino digital pin 4 (WHITE)
- LCD Pin 12: DB5 pin to Arduino digital pin 5 (WHITE)
- LCD Pin 13: DB6 pin to Arduino digital pin 6 (WHITE)
- LCD Pin 14: DB7 pin to Arduino digital pin 7 (WHITE)
- LCD Pin 15: LED_K pin to 3.3V (RED)
- LCD Pin 16: LED_A pin to ground (BLACK)
Si4703 evaluation board:
- Pin 1: +3.3V to 3.3V (RED)
- Pin 2: GND to ground (BLACK)
- Pin 3: SDIO pin to Arduino analog pin 4 (YELLOW)
- Pin 4: SCLK pin to Arduino analog pin 5 (BLUE)
- Pin 5: SEN pin N/C
- Pin 6: RST pin to Arduino digital pin 2 (WHITE)
- Pin 7: GPIO1 pin N/C
- Pin 8: GPIO2 pin N/C
To connect the pushbuttons you will need to solder two wires to the pins of the buttons before they can be connected to the circuit:
Momentary (N/O) Pushbutton Inputs:
Momentary pushbutton 1 +3.3V____button____Arduino digital pin 10 (seek down) with 10kohm pull down resistor to ground Momentary pushbutton 2 +3.3V____button____Arduino digital pin 11 (seek up) with 10kohm pull down resistor to ground
Push on push off Pushbutton:
+12V _________--------_________ Arduino RAW pin
Step 7: Put It All Together And Enjoy
Plug all of your JST connectors in, along with the AUX cable to your speakers or headphones.
You should now be good to power on and test the circuit! If you've set up your circuit correctly, you should be able to press the push on push off pushbutton to give power to the circuit. The LCD should then display the words "FM Radio" on the top line and 96.9 MHz on the bottom line. The volume will be preset to a certain value in the Arduino code. You should however, be able to control the tuning of the radio with the two momentary push buttons and watch this update on the LCD. If you find that the signal is staticky, use a longer aux lead and arrange it so it acts as a good antenna (a bit of trial and error, most times you just need to hold the cable vertical). Same goes with headphones.