FM Radio With Si4703, Arduino Pro Mini and 3.3V Large LCD

by lb_20 in Circuits > Arduino

10088 Views, 74 Favorites, 0 Comments

FM Radio With Si4703, Arduino Pro Mini and 3.3V Large LCD

16, 9:03 am.jpg
16, 9:11 am.jpg
16, 9:11 am.jpg

Around this time last year I published an Instructable just like this one where I used an Arduino Uno with the Si4703 evaluation board, a logic level converter and a 5V LCD to make an FM radio for my jukebox build.

That Instructable can be found here: https://www.instructables.com/id/FM-Radio-With-Si47...

I decided the circuit was untidy and needed a bit of an upgrade, it also took up a lot of space in the jukebox.

So I decided to use a smaller Arduino which has 3.3V logic to simplify the circuit a bit (the logic level converter is no longer needed)

This Instructable is therefore about a 3.3V logic version of what I had done before.

Gather Your Materials

16, 11:50 am.jpg
16, 11:50 am.jpg
16, 11:50 am.jpg
16, 11:50 am.jpg
16, 11:50 am.jpg
16, 11:50 am.jpg
16, 11:50 am.jpg
16, 12:09 pm.jpg
16, 9:54 am.jpg
16, 9:54 am.jpg
spst-pushbutton-black-actuatorImageMain-515.jpg

You don't need too many parts for this build, it's relatively straight forward.

Materials:
1 * Arduino Pro Mini 3.3V http://core-electronics.com.au/arduino-pro-mini-32...

1 * FTDI breakout board 3.3V http://core-electronics.com.au/ftdi-basic-breakout...

1 * 3.3V LCD http://m.ebay.com.au/itm/291827604643 or http://core-electronics.com.au/basic-16x2-characte...

1 * Si4703 evaluation board http://core-electronics.com.au/sparkfun-fm-tuner-e...

3 * 10k resistors

2 * N/O momentary push buttons https://www.jaycar.com.au/pushbutton-push-on-mome...

1 * Push on push off pushbutton https://www.jaycar.com.au/spst-pushbutton-black-a...

Various JST connectors http://core-electronics.com.au/jst-connector-kit-2...

2 * Female header 1 x 12 pin to fit Arduino pro mini http://core-electronics.com.au/0-100-2-54-mm-femal...

1 * Female header 1 x 8 pin to fit Si4703 evaluation board http://core-electronics.com.au/0-100-2-54-mm-femal...

Veroboard http://core-electronics.com.au/stripboard-large.ht...

6mm acrylic

Wire

Solder

Electrical tape/ heat shrink

Speakers or headphones

3.5mm male to 3.5mm male aux lead (if using speakers)

Tools:

Soldering iron

Side cutters

Hobby knife

Bench top vice

Laser cutter

Solder Male Headers

16, 9:09 am.jpg
16, 9:09 am.jpg
16, 9:09 am.jpg

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.

Solder Wires to LCD Header

16, 9:11 am.jpg
16, 9:11 am.jpg
16, 9:11 am.jpg
16, 10:37 am.jpg
16, 10:37 am.jpg

I've attached the relevant pages from the LCD datasheet for your reference, but this is how I've connected the 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 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.

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...

Alternatively, I have also attached this library to make things easy for you.

Solder the Veroboard Circuit

16, 11:44 am.jpg
16, 10:37 am.jpg

Take the circuit provided in the pictures and solder the circuit to the veroboard. Plan where you're going to position each of the components before soldering and remember to keep adequate space for the JST headers.

I know my pictures are a bit messy, so check out the pin connections below (also found in the Arduino code provided):


3.3 V LCD (ERM1602-1 Series):

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


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

Design a Mount (optional)

16, 9:11 am.jpg
16, 9:11 am.jpg

I designed this mount to fit existing parts in my jukebox, but the main idea is that the LCD can mount securely into the acrylic. To design the mount, I modelled up the LCD first to make sure it would fit. I have attached all the Solidworks files here.

I then used a laser cutter with 6mm clear acrylic to cut the mount. First time lucky, the mount fit perfectly in the jukebox! The one thing I didn't consider though was that the pin header slightly protrudes from the PCB of the LCD, so perhaps a cutout section there would be better, to allow for the LCD to mount flush with the acrylic mount.

Put It All Together

16, 9:11 am.jpg
16, 9:11 am.jpg
16, 9:11 am.jpg
16, 9:11 am.jpg
16, 9:11 am.jpg

If you've made a mount, now is the time to secure the LCD to it and fit it into your enclosure.

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.

Enjoy Your Little Radio!

The Si4703 is a really cool little evaluation board to play with, so I hope you guys enjoyed this build and that it's inspired you to make one of these yourselves.

I'd love to see if someone can make a battery powered version of this build, since it can be really compact if you use a smaller display. A 3D printed case would look great too.