Cirkit Designer Logo
Cirkit Designer
Your all-in-one circuit design IDE
Home / 
Project Documentation

Arduino UNO Controlled I2C LCD and 4-Channel Relay Module

Image of Arduino UNO Controlled I2C LCD and 4-Channel Relay Module

Circuit Documentation

Summary

This circuit is designed to interface an Arduino UNO with an LCD I2C Display and a 4-channel 5V relay module. The LCD display is used to show a welcome message and the frequency of a square wave generated by the Arduino, which is also used to control the relays. The relays can be activated by digital signals from the Arduino to control external devices. The LCD communicates with the Arduino over the I2C protocol, while the relay module is controlled through digital output pins.

Component List

LCD I2C Display

  • Description: A liquid crystal display that communicates over the I2C protocol.
  • Pins: GND, VCC, SDA, SCL

Relay 4 Channel 5v

  • Description: A module with 4 relays that can be individually controlled to switch external circuits.
  • Pins: GND, IN1, IN2, IN3, IN4, VCC, COM1, COM2, COM3, COM4, NO1, NO2, NO3, NO4, NC1, NC2, NC3, NC4

Arduino UNO

  • Description: A microcontroller board based on the ATmega328P, with digital and analog I/O pins.
  • Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0

Wiring Details

LCD I2C Display

  • GND connected to Arduino UNO GND
  • VCC connected to Arduino UNO 5V
  • SDA connected to Arduino UNO A4
  • SCL connected to Arduino UNO A5

Relay 4 Channel 5v

  • GND connected to Arduino UNO GND
  • VCC connected to Arduino UNO 5V
  • IN1 connected to Arduino UNO D6
  • IN2 connected to Arduino UNO D5
  • IN3 connected to Arduino UNO D4
  • IN4 connected to Arduino UNO D3
  • NO3 connected to Relay 4 Channel 5v COM1 (Note: This connection is internal to the relay module and typically used for switching purposes.)

Arduino UNO

  • GND connected to LCD I2C Display GND and Relay 4 Channel 5v GND
  • 5V connected to LCD I2C Display VCC and Relay 4 Channel 5v VCC
  • A4 (SDA) connected to LCD I2C Display SDA
  • A5 (SCL) connected to LCD I2C Display SCL
  • D3 connected to Relay 4 Channel 5v IN4
  • D4 connected to Relay 4 Channel 5v IN3
  • D5 connected to Relay 4 Channel 5v IN2
  • D6 connected to Relay 4 Channel 5v IN1

Documented Code

/*
 * This Arduino Sketch initializes an I2C LCD display and controls a 4-channel
 * relay module. The LCD displays a welcome message and then continuously
 * updates to show the frequency of a square wave generated on one of the
 * relay control pins. The relays can be controlled via digital pins D3, D4,
 * D5, and D6.
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Initialize the LCD with I2C address 0x27 and 16x2 display
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Relay control pins
const int relay1 = 6;
const int relay2 = 5;
const int relay3 = 4;
const int relay4 = 3;

// Frequency measurement variables
unsigned long previousMillis = 0;
const long interval = 1000; // Interval for frequency calculation (1 second)
int frequency = 0;

void setup() {
  // Initialize the LCD
  lcd.begin(16, 2); // Corrected to include the number of columns and rows
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Welcome!");
  lcd.setCursor(0, 1);
  lcd.print("Relay Control");
  delay(2000); // Display welcome message for 2 seconds

  // Set relay pins as outputs
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);

  // Initialize relays to off
  digitalWrite(relay1, LOW);
  digitalWrite(relay2, LOW);
  digitalWrite(relay3, LOW);
  digitalWrite(relay4, LOW);
}

void loop() {
  unsigned long currentMillis = millis();

  // Generate square wave on relay1 pin
  digitalWrite(relay1, HIGH);
  delay(500); // 500ms HIGH
  digitalWrite(relay1, LOW);
  delay(500); // 500ms LOW

  // Calculate frequency every second
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    frequency = 1; // Frequency is 1 Hz (1 cycle per second)

    // Update LCD with frequency
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Frequency:");
    lcd.setCursor(0, 1);
    lcd.print(frequency);
    lcd.print(" Hz");
  }
}

This code initializes the LCD display and the relay module, then enters a loop where it generates a square wave on one of the relay control pins and updates the display with the frequency of this wave. The relays are controlled by digital pins D3 to D6 on the Arduino UNO.