/*
--------------------------------------------------
Project : Ultrasonic Distance Meter with I2C LCD
Designed & Explained by : Shubham Sutar
YouTube Channel : Technical Shubham
Description:
This project measures distance using an ultrasonic sensor
and displays the value in both centimeters and inches
on a 20x4 I2C LCD display.
--------------------------------------------------
*/
// Include I2C LCD library
#include <LiquidCrystal_I2C.h>
// LCD address 0x27, 20 columns, 4 rows
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Ultrasonic sensor pins
#define TRIG_PIN 3
#define ECHO_PIN 2
// Variables to store distance
float distanceCM;
float distanceInch;
// Function to read ultrasonic sensor distance (in microseconds)
long readUltrasonicDistance()
{
// Send trigger pulse
pinMode(TRIG_PIN, OUTPUT);
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Read echo pulse
pinMode(ECHO_PIN, INPUT);
return pulseIn(ECHO_PIN, HIGH);
}
void setup()
{
Serial.begin(9600);
// Initialize LCD
lcd.init();
lcd.backlight();
// Welcome message
lcd.setCursor(2, 1);
lcd.print("Distance Meter");
lcd.setCursor(3, 2);
lcd.print("Technical Shubham");
delay(3000);
lcd.clear();
}
void loop()
{
// Convert time to distance (Speed of sound = 0.0344 cm/us)
distanceCM = (0.0344 / 2) * readUltrasonicDistance();
distanceInch = distanceCM / 2.54;
// Serial Monitor output (optional for debugging)
Serial.print("Distance: ");
Serial.print(distanceCM, 1);
Serial.print(" cm | ");
Serial.print(distanceInch, 1);
Serial.println(" inch");
// Display labels
lcd.setCursor(0, 0);
lcd.print("Inches");
lcd.setCursor(13, 0);
lcd.print("CM");
// Display values
lcd.setCursor(0, 1);
lcd.print(distanceInch, 1);
lcd.setCursor(12, 1);
lcd.print(distanceCM, 1);
delay(2000);
lcd.clear();
}