FM transmitter module on a 16x2 LCD

The details to be driven onto an FM transmitter module can then be displayed on a 16x2 LCD using an Arduino and two buttons for controlling the frequency. Basically, this will involve the connection of the FM transmitter, its configuration, the LCD, and two buttons. Detailed explanation and step-by-step guide:

Required Components

  • Arduino board (as needed, Arduino Uno)
  • FM transmitter module (e.g., TEA5767)
  • 16x2 LCD display with an I2C module.
  • Two push buttons
  • Pull-down resistors (10k ohm)
  • Wire connectors

Connections

LCD with I2C

  1. Power:

    • Connect the LCD module's VCC to Arduino 5V.
    • Connect the LCD module's GND to Arduino GND.
  2. I2C Communication:

    • Connect the LCD module's SDA to Arduino A4.
    • Connect the LCD module's SCL to Arduino A5.

FM Transmitter (TEA5767)

  1. Power:

    • Connect the TEA5767 module's VCC to Arduino 3.3V or 5V (depending on the module's requirement).
    • Connect the TEA5767 module's GND to Arduino GND.
  2. I2C Communication:

    • Connect the TEA5767 module's SDA to Arduino A4.
    • Connect the TEA5767 module's SCL to Arduino A5.

Buttons

  1. Button 1 (Increase Frequency):

    • Connect one leg of the button to Arduino digital pin 2.
    • Connect the other leg to GND.
    • Connect a pull-down resistor (10k ohm) between the button pin and GND.
  2. Button 2 (Decrease Frequency):

    • Connect one leg of the button to Arduino digital pin 3.
    • Connect the other leg to GND.
    • Connect a pull-down resistor (10k ohm) between the button pin and GND.

Example Code

Libraries to Install

  • Wire.h (built-in for I2C communication)
  • LiquidCrystal_I2C.h (for I2C LCD control)
  • TEA5767.h (for FM transmitter control, available from Arduino Library Manager or GitHub)

Code

cpp
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <TEA5767.h> // Initialize the I2C LCD LiquidCrystal_I2C lcd(0x27, 16, 2); // Initialize the TEA5767 FM transmitter TEA5767 radio; const int buttonUp = 2; // Button to increase frequency const int buttonDown = 3; // Button to decrease frequency float frequency = 101.1; // Initial frequency void setup() { // Initialize the LCD lcd.begin(); lcd.backlight(); // Initialize the serial communication for debugging Serial.begin(9600); // Initialize the radio module Wire.begin(); radio.init(); // Set the initial frequency radio.setFrequency(frequency); // Set up the button pins pinMode(buttonUp, INPUT); pinMode(buttonDown, INPUT); // Display initial information lcd.setCursor(0, 0); lcd.print("FM Transmitter"); lcd.setCursor(0, 1); lcd.print("Freq: "); lcd.print(frequency); lcd.print(" MHz"); } void loop() { // Check if the button to increase frequency is pressed if (digitalRead(buttonUp) == HIGH) { frequency += 0.1; if (frequency > 108.0) frequency = 108.0; // Maximum FM frequency radio.setFrequency(frequency); delay(200); // Debounce delay } // Check if the button to decrease frequency is pressed if (digitalRead(buttonDown) == HIGH) { frequency -= 0.1; if (frequency < 87.5) frequency = 87.5; // Minimum FM frequency radio.setFrequency(frequency); delay(200); // Debounce delay } // Update the display lcd.setCursor(0, 1); lcd.print("Freq: "); lcd.print(frequency, 1); // Print frequency with 1 decimal place lcd.print(" MHz "); delay(100); // Small delay to avoid flickering }

Detailed Explanation

  1. Library Inclusions:

    • #include <Wire.h>: It is a library used for I2C communication.
    • #include <LiquidCrystal_I2C.h> — This library makes the job of using I2C LCD much easier.
    • #include <TEA5767.h>
    • This library provides functions to manipulate the TEA5767 FM transmitter module.
  2. LCD Initialization:

    • LiquidCrystal_I2C lcd(0x27, 16, 2); initializes the LCD with the I2C address 0x27 and a 16x2 character layout.
  3. FM Transmitter Initialization:

    • TEA5767 radio; creates an instance of the TEA5767 class to control the FM transmitter module.
  4. Button Pin Definitions:

    • const int buttonUp = 2; and const int buttonDown = 3; define the pins connected to the buttons.
  5. Frequency Variable:

    • float frequency = 101.1; sets the initial frequency.
  6. Setup Function:

    • lcd.begin(); initializes the LCD.
    • lcd.backlight(); turns on the LCD backlight.
    • Serial.begin(9600); starts serial communication for debugging purposes.
    • Wire.begin(); initializes the I2C communication.
    • radio.init(); initializes the FM transmitter module.
    • radio.setFrequency(frequency); sets the FM transmitter to the initial frequency (101.1 MHz)...
    • pinMode(buttonUp, INPUT); and pinMode(buttonDown, INPUT); configure the button pins as inputs....
    • lcd.print functions display initial information on the LCD.
  7. Loop Function:

    • if (digitalRead(buttonUp) == HIGH) checks if the button to increase frequency is pressed.
    • frequency += 0.1; increments the frequency by 0.1 MHz.
    • if (frequency > 108.0) frequency = 108.0; ensures the frequency does not exceed the maximum FM frequency.
    • radio.setFrequency(frequency); updates the FM transmitter with the new frequency.
    • delay(200); adds a debounce delay to avoid multiple readings from a single button press.
    • if (digitalRead(buttonDown) == HIGH) checks if the button to decrease frequency is pressed.
    • frequency -= 0.1; decrements the frequency by 0.1 MHz.
    • if (frequency < 87.5) frequency = 87.5; ensures the frequency does not go below the minimum FM frequency.
    • lcd.setCursor(0, 1); positions the cursor on the LCD.
    • lcd.print("Freq: "); lcd.print(frequency, 1); lcd.print(" MHz "); updates the frequency display on the LCD.
    • delay(100); adds a small delay to avoid flickering.

This code sets up the FM transmitter module to a specific frequency and displays that frequency on a 16x2 LCD. Two buttons are used to increase and decrease the frequency, and the display updates accordingly. Make sure the libraries are correctly installed in your Arduino IDE.

Post a Comment

Previous Post Next Post