This circuit is designed to utilize an Arduino UNO microcontroller to control a relay module based on the distance measured by two HC-SR04 Ultrasonic Sensors. The relay module then switches a bulb on or off. A potentiometer is used to adjust the contrast of an LCD Display 16x2, which is likely used to display information. A resistor is connected in series with an LED to limit the current through the LED.
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
#define RELAY_LINE1_PIN 8
#include "NewPing.h"
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
unsigned int critical_distance_cms = 50; // Cutoff distance at which the light will switch
bool state = 0;
void setup() {
Serial.begin(9600); // Open serial monitor at 115200 baud to see ping results.
pinMode(RELAY_LINE1_PIN, OUTPUT);
digitalWrite(RELAY_LINE1_PIN, HIGH); // Turn the light off
}
void loop() {
delay(50); // Wait 50ms between pings (about 20 pings/sec).
unsigned int distance = readDistance(); // Current distance of any object facing the ultrasonic sensor
Serial.print("Ultrasonic: ");
Serial.print(distance); // Send ping, get distance in cm and print result (0 = outside set distance range)
Serial.println("cm");
// Someone is near the door
if (distance < critical_distance_cms)
{
while (distance < critical_distance_cms)
{
// Check if they moved away
distance = readDistance();
delay(5); // Do nothing until the person moves away from the door
}
state = !state; // Change the state of the relay
if (state)
{
Serial.println("Door Open!");
digitalWrite(RELAY_LINE1_PIN, LOW); // Turn the light on
}
else
{
Serial.println("Door Closed!");
digitalWrite(RELAY_LINE1_PIN, HIGH); // Turn the light off
}
}
}
// Updates the value of the Ultrasonic reading
unsigned int readDistance()
{
// Read 7 values from the ultrasonic and get the median value (median filter)
// Gets rid of noisy reading
unsigned int distance = sonar.convert_cm(sonar.ping_median(7));
// The value 0 indicates that the ultrasonic sensor is reading nothing in front of it
// Set this distance to max distance so the light doesn't switch unnecessarily
if (distance == 0)
{
distance = MAX_DISTANCE;
}
return distance;
}
This code is designed to read the distance from the HC-SR04 Ultrasonic Sensor and toggle the state of a relay when an object is detected within a critical distance. The relay then controls the power to a bulb. The LCD display is likely used to show status or distance information, but the code for the display is not included in the provided code snippet.