Intermediate
3 hours
Build a DIY FM Radio with TEA5767 Module
The TEA5767 is a single-chip FM stereo radio receiver that communicates over I2C. By sending the correct frequency data to it from an Arduino, you can tune any FM station in the 76–108 MHz band. This project adds buttons for manual tuning, automatic station scan, and a 16×2 LCD to show the current frequency.
What You’ll Need
- Arduino Uno or Nano
- TEA5767 FM module
- 16×2 I2C LCD
- 2 × push buttons (tune up / tune down) + resistors
- 1 × push button (scan) + resistor
- 3.5 mm stereo headphone jack or small PAM8403 amplifier + speakers
- 35 cm length of wire as an antenna (solder to the ANT pin)
- Breadboard and jumper wires
Step-by-Step Instructions
- Wire TEA5767: VCC → 3.3 V, GND → GND, SDA → A4, SCL → A5. Connect antenna wire to ANT pin. Connect LOUTR and LOUTL to headphone jack or amplifier input.
- Wire I2C LCD: SDA → A4 (shared I2C bus), SCL → A5, VCC → 5 V, GND → GND.
- Install library: Install “TEA5767” library by Ananth (available on GitHub; add as .zip via Arduino IDE).
- Write the tuner: Start at 87.5 MHz. Display frequency on LCD. Tune Up button: add 0.1 MHz (max 108 MHz). Tune Down: subtract 0.1 MHz (min 76 MHz). Scan button: step through frequencies until signal level (read from TEA5767 status bytes) exceeds threshold.
- Set the frequency: TEA5767 frequency word = (frequency × 4 + 225000) / 32768 — the library handles this calculation automatically.
- Test: Extend the antenna wire fully, tune to a known strong station in your city, adjust audio volume on the amplifier.
Safety Notes
- TEA5767 operates at 3.3 V — connect VCC to the Arduino’s 3.3 V pin, not 5 V.
- The I2C SDA/SCL lines at 3.3 V are generally safe with 5 V Arduino as the TEA5767 has 5 V-tolerant inputs, but add level shifters for a clean design.
Tips & Troubleshooting
- Reception quality depends heavily on antenna placement — try different orientations and lengths.
- If no stations are found by scan, manually tune to a known frequency first to verify the module is working.
- Store 5 preset stations in EEPROM and add preset buttons for a more convenient radio experience.