/* ----------------------------------------------------------------
Arduino Ultrasoninc Sensor HC-SR04
Re-writed by Arbi Abdul Jabbaar
Using Arduino IDE 1.8.7
Using HC-SR04 Module
Tested on 17 September 2019
Re-re-writed by Barbu Vulc
Using Arduino IDE 2.0.0
Tested on 31 March & 1, 2, 3 & 4 April 2022
---------------------------------------------------------------- */
//LCD I2C library:
#include <LiquidCrystal_I2C.h>
#include <stdio.h>
//LCD I2C address 0x27, 20 column and 4 rows!
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define echoPin 2 //attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 3 //attach pin D3 Arduino to pin Trig of HC-SR04
// defines variables
long duration; //variable for the duration of sound wave travel
int distance; //variable for the distance measurement
int LED_1 = 5; //Green LED...
int LED_2 = 6; //Yellow LED...
int LED_3 = 7; //Red LED...
int buzzer = 12;
void setup() {
//Initialize LCD, LEDs and buzzer:
lcd.init();
lcd.backlight();
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(trigPin, OUTPUT); //Sets the trigPin as an OUTPUT
pinMode(echoPin, INPUT); //Sets the echoPin as an INPUT
pinMode(buzzer, OUTPUT);
//Serial Communication is starting with 9600 of baudrate speed
Serial.begin(9600);
//Print some text in Serial Monitor
Serial.println("Ultrasonic Sensor HC-SR04 Test");
Serial.println("with Arduino UNO R3");
}
void loop() {
//Clears the trigPin condition
digitalWrite(trigPin, LOW);
delay(100);
//Sets the trigPin HIGH (ACTIVE) for 10 microseconds
digitalWrite(trigPin, HIGH);
delay(100);
digitalWrite(trigPin, LOW);
//Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
//Calculating the distance
distance = duration * 0.034 / 2; //Speed of sound wave divided by 2 (go and back)
//Displays the distance on the Serial Monitor and LCD!
if (distance >= 56) {
lcd.setCursor(0, 0);
lcd.println(" **************** ");
lcd.setCursor(0, 1);
lcd.println(" **************** ");
lcd.setCursor(0, 2);
lcd.println(" **************** ");
lcd.setCursor(0, 3);
lcd.println(" **************** ");
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
digitalWrite(buzzer, 0);
}
if (distance >= 26 && distance <= 55) {
lcd.setCursor(0, 0);
lcd.println(" You're ok! ");
lcd.setCursor(0, 1);
lcd.println(" **************** ");
lcd.setCursor(0, 2);
lcd.println(" **************** ");
lcd.setCursor(0, 3);
lcd.println(" **************** ");
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
digitalWrite(buzzer, 0);
}
if (distance >= 6 && distance <= 25) {
lcd.setCursor(0, 0);
lcd.println(" Beware of...");
lcd.setCursor(0, 1);
lcd.println(" ...surrounding ...");
lcd.setCursor(0, 2);
lcd.println("... objects! ");
lcd.setCursor(0, 3);
lcd.println(" **************** ");
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, LOW);
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
digitalWrite(buzzer, 1);
tone(buzzer, 500, 400);
delay(400);
digitalWrite(buzzer, 0);
tone(buzzer, 500, 400);
delay(400);
}
if (distance <= 5) {
lcd.setCursor(0, 0);
lcd.println(" WATCH OUT!!!... ");
lcd.setCursor(0, 1);
lcd.println(" **************** ");
lcd.setCursor(0, 2);
lcd.println(" **************** ");
lcd.setCursor(0, 3);
lcd.println(" **************** ");
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, HIGH);
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
digitalWrite(buzzer, 1);
tone(buzzer, 1000, 100);
delay(100);
digitalWrite(buzzer, 0);
tone(buzzer, 1000, 100);
delay(100);
}
}