That Idea came from my interesting in listening to Radio, so I decided to make one include my special stations, beside small screen that showing the timing.
I thought about design that gathering the classic and modern shape of a radio, so I decided to make two parts the base part that will be related to the radio be near to the old model, and the upper part that will include the O-led to be in circular shape and quite modern.
That link has the same Idea, which helped me with the project
Help in download the electrical component you need to mount it in the design.
to adjust the 2d files
to create skitch in 2d or 3d dimensio
Plywood 3 mm.
Cutter blade.
Screwdriver.
Screws
Glue gun
Tape
Cardbox
Create Sketch → Select the Top Plane.
Draw a rectangle (100mm x 150mm) using the Rectangle Tool (R).
Make the T slot, to be able to integrate the other parts together
Width: 3.5mm (for M3 screws).
Length: 10mm (for adjustment).
Depth: 2.5mm (to fit the screw head).
Click Finish Sketch.
Use Extrude (E) to give it a thickness of 3 mm.
Click OK.
Copy the Base part side and paste it as new component, so I can adjust the sketch without reflecting it on the base one.
Make a small rectangle to mount the wires of the O-led in the middle, and 3*10 mm rectangle to joint the O-led part,
Extrude to 3mm thickness.
Click OK.
Create Sketch → Select the Front Plane.
Use the Circle Tool (C) and draw a 130mm diameter circle.
Click Finish Sketch.
Use Extrude (E) to give it a thickness of 3mm.
Click OK.
Copy it and past it as new component to be the backside.
Create Sketch → Select the Front Plane.
Draw a rectangle (150mm x 50mm).
Extrude it to 3mm thickness.
Make the T-slots
Repeat for the back face paste as new, and added a rectangle to place the switch on/off button.
Create Sketch → Select the Front Plane.
Draw a rectangle (100mm x 50mm).
Use the Ellipse tool to create an oval shape and then the offset tool to make another one inside, then used the test tool to write the name of the design "O_Radio"
Extrude it to 3mm thickness.
Make the T-slots
Repeat for the back face paste as new.
Adding Openings for Components
Create Sketch on the OLED panel.
Draw a rectangle for the OLED screen opening.
Extrude (E) and select Cut to remove material.
Adding Holes for Buttons & Switches
Create Sketch on the front face.
Use Circle Tool (C) to add:
Push buttons (3mm diameter).
Volume knob (Potentiometer) (7-10mm diameter).
Click Finish Sketch.
Use Extrude (E) with Cut to create the holes.
Make hole for the USB of the Arduino nano in the back interface side
Assemble Menu → Click "New Component" for each part.
Use Move/Align (M) to arrange the parts.
Use "Join" Constraints to fix parts together.
Import M3 Screws and Nuts from the Fusion 360 Library.
Place them into the T-slots and adjust for proper fit by using the jointing tool.
Download the Switch button, O-led, potentiometer, Breadboard, RTC, Speaker From Grab cad, and upload them on fusion, finally insert them as mesh and jointing them in the right places.
First I needed to export the file as DXF, So I used the DXF extension and select every body of the design and save it as DXF.
Then I export it into laser cad, the whole files and start to adjust the color for the speed cut or cut or engrave.
Finally I exported the final file to the machine and made sure that the sheet is fixed on it, then start to select the origin point after that select the frame button to make sure that the laser cut within the sheet.
Last step to press enter, to start the fabrication process using the Lasser machine.
FM module
RTC module
Speaker
Arduino Nano
Audio Amplifier
Push Button
O-led
Arduino Nano as the central controller.
OLED Display (SSD1306, 128×64) .
RTC Module (DS3231/DS1302).
FM Module (AR1010) for radio tuning.
Audio Amplifier Module connected to the FM module's audio output.
Speaker driven by the amplifier.
Push Button (for frequency selection) connected to Nano A3 .
Arduino Nano:
Power: 5V and GND from the Nano supply power to all modules.
I2C Bus: SDA (A4) and SCL (A5) connect to both the OLED display and the RTC module.
Push Button:
The button is connected to pin A3 with the other side tied to GND. The Nano uses its internal pull‑up (set in code) so that a button press pulls the pin LOW.
OLED Display:
Power: Connected to 5V and GND.
SDA To A4 and SCL to A5 from the Arduino Nano.
Function: Displays current frequency and time.
RTC Module:
Power: Connected to 5V and GND (Common).
SDA To A4 and SCL to A5 from the Arduino Nano.
Function: Provides the current time to be shown on the OLED.
FM Module:
Power: VCC (to 3.3 V) and common GND.
One of Right out or left out is connected to In pin of the Amplifier
SDA & SCL Pins to the SDA and SCL common in the breadboard, Ant connected with female male jumper wires it acts as a signal for the radio.
GND pin To one of the Audio Amplifier GND.
Audio Amplifier Module:
Power: Receives power from Arduino 5V and GND.
Input: Receives the audio signal from the FM module.
Output: Drives the Speaker.
Speaker:
The positive terminal is connected to the Audio Amplifier output,
The negative terminal goes to Audio Amplifier GND.
After integrate all the parts together specially the base . interfaces and the sides parts together through the T-slots and the tapes that got cut using the laser cad machine, I started to mount the electrical components
The breadboard was having a double face tape so that made it easy to get stuck on the base side, The RTC directly connected to the breadboard.
Arduino nano I used small screws to fix it.
O-led got fixed in the o-led part using 2ml screws.
The speaker and audio Amplifier in addition to the FM module all were fixed using the double face tape also as there was no holes within them.
Finally the Push button was fixed in its hole on the upper part.
The power source for this project is a regulated 5V supply provided by a standard USB charger. Because the design is built around an Arduino Nano, which is designed to run on 5V, I chose a USB charger cable (commonly used as a smartphone charger cable) to power the board.
Here’s how and why this power source was selected:
The Arduino Nano operates on a stable 5V supply.
All connected peripherals—the OLED display, RTC module, FM module, and audio amplifier—are designed to work reliably at or near 5V. This compatibility simplifies the overall power management of the project.
The cable directly connects to the Nano’s USB port, eliminating the need for additional voltage regulators or power management circuits.
I used the Arduino IDE to start to write the code for the O_Radio, so In the end after upload the code to the Arduino nano, the timing and the name of the current station are showing through the O-led screan, also the push button could be pressed to change the displaying station.
I start first by installing necessary libraries for communication, display, real-time clock (RTC), and the AR1010 FM radio module, such as "Wire.h, Adafruit_GFX.h & Adafruit_SSD1306.h, RTClib.h, ar1010_2017lib.h"
I define the display dimensions, initialize the OLED display object, create an instance of the AR1010 radio module, and configure the RTC to track time. The button is defined to analog pin A3 to be input.
I start with the first frequency to be 98.2 MHz, and every time we turn on the radio it will be display, and I write If conditions to track button presses, starting at 1. After that I define a function setFrequency() that adjusts the radio frequency based on the pressCount to be sure that with every press specific station will be displayed, so each press cycles through special stations or turns off the radio by setting the volume to 0 and display Off on the screen which will be true when the press Count is 8. One more press and the cycle ill be repeated again started by the first frequency(98.2) .
I start the I2C communication and serial monitor., and I set the button pin as an input with a pull-up resistor and initialize the radio module. I call setFrequency() to tune to the starting station.
Then I defined the size of the displayed time to be 2 and wrote if conditions for it to be updated every hour, minute and every second. After that defined the size of the displayed time to be 1,3 and wrote if conditions for it to be updated every day, month and year.
Finally I monitored the button state to detect presses. Each press increments the pressCount, cycling through stations or turning off the radio , and the OLED finally will display that on it's screen.
The video showing that the Radio has 6 different stations, that you can control them using the push button, as once you push it the station will be changed and a new frequency related to it will be displayed on the screen. After the 6th press "Off" will be displayed on the screen and the clock will be working only, but if you push again which will count the 8th the radio will be turned on the first station again.
The most of the following challenges got resolved by the help of AI chats (Chat GPT)
Challenge:
When using a wall adapter, the FM module exhibited signal interference and instability compared to the clean power from a USB connection (as provided by a laptop).
Solution:
High-Quality Adapter: I used regulated 5V USB charger (such as a smartphone charger) to ensure a steady voltage.
Challenge:
The FM module was not reliably changing frequencies when commanded, often staying on the same channel.
Solution:
Reinitialization: Introduced a reinitialization of the FM module (using radio.initialise()) before setting a new frequency to ensure the module was ready to accept the new command.
Increased Delay: Increased the delay after setting the frequency (up to 1000-2000 milliseconds) to allow the module time to lock onto the new frequency.
Write the frequency without any comma Example: channel 90.90 to be wrote in 9090
Challenge:
The push button sometimes did not register changes correctly, and the count did not cycle properly.
Solution:
Internal Pull‑up Resistor: Configured the push button pin as INPUT_PULLUP so that it reliably reads HIGH when not pressed and LOW when pressed.
Consistent Counting: Implemented a simple counter (pressCount) that increments with each button press, resetting at the appropriate value (8th press resets the cycle).
Clear Documentation: Defined explicit if‑conditions for each frequency based on the count, ensuring predictable behavior.
Challenge:
The AR1010_2017 library did not include a setMute() function, making it difficult to turn the radio off directly.
Solution:
Simulated Mute with Volume Control: Replaced calls to setMute() by setting the volume to 0 using setVolume(0) to effectively mute the radio.
Challenge:
Ensuring all the components (Arduino Nano, OLED display, RTC module, FM module, amplifier, and speaker) worked together seamlessly.
Solution:
Common Ground and I²C Bus: Established a common ground across all components and used the I²C bus to connect the OLED and RTC modules reliably.
Clear Wiring and Layout: Developed a detailed wiring diagram and circuit documentation, which included the push button for frequency control.
The screws for the O-led were not found so I used the Double faced tape
6.The Flexi part that rotate the O-led side.
I fabricate it twice, as the first time was rigid and once it got rotated, it broke
Solutions
I created A two rectangles 30*2 and 15*2 mm and align them vertical together then created a pattern on that curved part making the spaces between each 2mm using the Laser cad software, that worked finally and made it more flexible
Volume Control Button: Integrate a button dedicated to adjusting the radio's volume. This addition allows users to easily increase or decrease the audio level without relying on external controls.
Alarm Functionality: Incorporate an alarm feature that enables the radio to turn on automatically at set times, serving as a practical alarm clock. This enhancement combines entertainment with functionality, providing users with a dual-purpose device.
Bluetooth Module for Podcast Streaming: Add a Bluetooth module to the system, allowing users to stream selected podcasts or other audio content directly through the radio. This feature expands the device's versatility beyond traditional FM stations, catering to modern listening preferences.