Step 1: Part List
You will need:
- a FM chip "TEA5767" (only the chip or a complete board)
- an Arduino pro mini
- a LCD
- a car bluetooth adaptor like this one
- a battery holder
- a power regulator 12v -> 5v
- audio amplifier
- 2x speakers (from an old screen in my case)
- an antenna
- 2x switches
- 4x push buttons
- some prototyping board pieces
- MDF 3mm
Step 2: Electronics
Depending on what you choose to use, the FM radio chip alone or a board with the "TEA5767" on it, you will need more or less dexterity. The chip is very small so I recommend to choose a board with the chip already connected. I tried both and managed to make both working so it's possible ;).
The fritzing image details the FM radio part. For the rest, it's simple. One switch to put the power to the FM part or the bluetooth, so you limit the power consumption. One switch to plug the amplifier to the FM or bluetooth output, to avoid interference.
Step 3: Box Design
The difficult part is to design the vectorial file for the laser machine but I give it to you here.
When you have all the parts, use glue to connect everything. The speakers are wedged using the wooden rectangles cut with the whole design. The push buttons are mounted on a prototyping board and screwed from the inside.
I tried to 3d print some corner to screw the back plate but in fact it was no necessary. The back plate stood still if the rest of the box was glued tight.
Step 4: FM Radio Software
The software is easy to use. 4 buttons to control all the functionalities. 2 to search and 2 to go through the memories. When you want to memorize a station, you need the be on the memory you want to select then the frequency and finally you need to press simultaneously the 2 memories buttons.
To be able to keep the memorized frequencies after an arduino shutdown, the eeprom is used. I used a symbole that is managed by the compiler and the link script during the compile time. This solution is not often used in the arduino community to control the eeprom.
#define STATION_NUMBER 10
float station[STATION_NUMBER] EEMEM;
This way, the variable "station" can be used as a standard variable but it will be localized in the eeprom.