#include <WiFi.h>
#include <HTTPClient.h>
#include "DHTesp.h"
#define ssid "Wokwi-GUEST"
#define password ""
#define PIR_PIN 2
// Ultrasonic Sensor 1 - North
#define ULTRASONIC_TRIG_PIN_NORTH 5
#define ULTRASONIC_ECHO_PIN_NORTH 13
#define LED_RED_NORTH 12
#define LED_YELLOW_NORTH 4
#define LED_GREEN_NORTH 27
// Ultrasonic Sensor 2 - South
#define ULTRASONIC_TRIG_PIN_SOUTH 14
#define ULTRASONIC_ECHO_PIN_SOUTH 15
#define LED_RED_SOUTH 16
#define LED_YELLOW_SOUTH 17
#define LED_GREEN_SOUTH 18
// Ultrasonic Sensor 3 - East
#define ULTRASONIC_TRIG_PIN_EAST 19
#define ULTRASONIC_ECHO_PIN_EAST 21
#define LED_RED_EAST 22
#define LED_YELLOW_EAST 23
#define LED_GREEN_EAST 25
// Ultrasonic Sensor 4 - West
#define ULTRASONIC_TRIG_PIN_WEST 26
#define ULTRASONIC_ECHO_PIN_WEST 33
#define LED_RED_WEST 32
#define LED_YELLOW_WEST 34
#define LED_GREEN_WEST 35
const char *webhookURL = "https://webhook.site/784de12f-87a9-46eb-9b9b-b9e3a50deae7";
const int DHT_PIN = 15;
long distanceNorth, distanceSouth, distanceEast, distanceWest;
DHTesp dhtSensor;
void setup_wifi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println("Connected");
}
void sendWebhook(String data) {
HTTPClient http;
http.begin(webhookURL);
http.addHeader("Content-Type", "application/json");
http.POST(data);
http.end();
}
void processSensorData(long distNorth, long distSouth, long distEast, long distWest) {
// Adjust the distance values based on your specific requirements
// Traffic management logic for North direction
if (distNorth < 20) {
// Unsafe Distance - Stop Traffic
digitalWrite(LED_GREEN_NORTH, LOW);
digitalWrite(LED_YELLOW_NORTH, LOW);
digitalWrite(LED_RED_NORTH, HIGH);
Serial.println("Unsafe Distance - Stop Traffic (North)");
} else if (distNorth > 20 && distNorth <= 50) {
// Moderate Distance - Use Caution
digitalWrite(LED_GREEN_NORTH, LOW);
digitalWrite(LED_YELLOW_NORTH, HIGH);
digitalWrite(LED_RED_NORTH, LOW);
Serial.println("Moderate Distance - Use Caution (North)");
} else if (distNorth > 50 && distNorth < 400) {
// Safe Distance - Allow Traffic
digitalWrite(LED_GREEN_NORTH, HIGH);
digitalWrite(LED_YELLOW_NORTH, LOW);
digitalWrite(LED_RED_NORTH, LOW);
Serial.println("Safe Distance - Allow Traffic (North)");
}
// Traffic management logic for South direction
if (distSouth < 20) {
// Unsafe Distance - Stop Traffic
digitalWrite(LED_GREEN_SOUTH, LOW);
digitalWrite(LED_YELLOW_SOUTH, LOW);
digitalWrite(LED_RED_SOUTH, HIGH);
Serial.println("Unsafe Distance - Stop Traffic (South)");
} else if (distSouth > 20 && distSouth <= 50) {
// Moderate Distance - Use Caution
digitalWrite(LED_GREEN_SOUTH, LOW);
digitalWrite(LED_YELLOW_SOUTH, HIGH);
digitalWrite(LED_RED_SOUTH, LOW);
Serial.println("Moderate Distance - Use Caution (South)");
} else if (distSouth > 50 && distSouth < 400) {
// Safe Distance - Allow Traffic
digitalWrite(LED_GREEN_SOUTH, HIGH);
digitalWrite(LED_YELLOW_SOUTH, LOW);
digitalWrite(LED_RED_SOUTH, LOW);
Serial.println("Safe Distance - Allow Traffic (South)");
}
// Traffic management logic for East direction
if (distEast < 20) {
// Unsafe Distance - Stop Traffic
digitalWrite(LED_GREEN_EAST, LOW);
digitalWrite(LED_YELLOW_EAST, LOW);
digitalWrite(LED_RED_EAST, HIGH);
Serial.println("Unsafe Distance - Stop Traffic (East)");
} else if (distEast > 20 && distEast <= 50) {
// Moderate Distance - Use Caution
digitalWrite(LED_GREEN_EAST, LOW);
digitalWrite(LED_YELLOW_EAST, HIGH);
digitalWrite(LED_RED_EAST, LOW);
Serial.println("Moderate Distance - Use Caution (East)");
} else if (distEast > 50 && distEast < 400) {
// Safe Distance - Allow Traffic
digitalWrite(LED_GREEN_EAST, HIGH);
digitalWrite(LED_YELLOW_EAST, LOW);
digitalWrite(LED_RED_EAST, LOW);
Serial.println("Safe Distance - Allow Traffic (East)");
}
// Traffic management logic for West direction
if (distWest < 20) {
// Unsafe Distance - Stop Traffic
digitalWrite(LED_GREEN_WEST, LOW);
digitalWrite(LED_YELLOW_WEST, LOW);
digitalWrite(LED_RED_WEST, HIGH);
Serial.println("Unsafe Distance - Stop Traffic (West)");
} else if (distWest > 20 && distWest <= 50) {
// Moderate Distance - Use Caution
digitalWrite(LED_GREEN_WEST, LOW);
digitalWrite(LED_YELLOW_WEST, HIGH);
digitalWrite(LED_RED_WEST, LOW);
Serial.println("Moderate Distance - Use Caution (West)");
} else if (distWest > 50 && distWest < 400) {
// Safe Distance - Allow Traffic
digitalWrite(LED_GREEN_WEST, HIGH);
digitalWrite(LED_YELLOW_WEST, LOW);
digitalWrite(LED_RED_WEST, LOW);
Serial.println("Safe Distance - Allow Traffic (West)");
}
}
void setup() {
Serial.begin(115200);
pinMode(PIR_PIN, INPUT);
// Ultrasonic Sensor 1 - North
pinMode(ULTRASONIC_TRIG_PIN_NORTH, OUTPUT);
pinMode(ULTRASONIC_ECHO_PIN_NORTH, INPUT);
pinMode(LED_RED_NORTH, OUTPUT);
pinMode(LED_YELLOW_NORTH, OUTPUT);
pinMode(LED_GREEN_NORTH, OUTPUT);
// Ultrasonic Sensor 2 - South
pinMode(ULTRASONIC_TRIG_PIN_SOUTH, OUTPUT);
pinMode(ULTRASONIC_ECHO_PIN_SOUTH, INPUT);
pinMode(LED_RED_SOUTH, OUTPUT);
pinMode(LED_YELLOW_SOUTH, OUTPUT);
pinMode(LED_GREEN_SOUTH, OUTPUT);
// Ultrasonic Sensor 3 - East
pinMode(ULTRASONIC_TRIG_PIN_EAST, OUTPUT);
pinMode(ULTRASONIC_ECHO_PIN_EAST, INPUT);
pinMode(LED_RED_EAST, OUTPUT);
pinMode(LED_YELLOW_EAST, OUTPUT);
pinMode(LED_GREEN_EAST, OUTPUT);
// Ultrasonic Sensor 4 - West
pinMode(ULTRASONIC_TRIG_PIN_WEST, OUTPUT);
pinMode(ULTRASONIC_ECHO_PIN_WEST, INPUT);
pinMode(LED_RED_WEST, OUTPUT);
pinMode(LED_YELLOW_WEST, OUTPUT);
pinMode(LED_GREEN_WEST, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
setup_wifi();
}
long readDistanceFromSensor(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2;
}
void loop() {
int pirValue = digitalRead(PIR_PIN);
if (pirValue == HIGH) {
// Motion detected - Stop Traffic (You can customize this part)
digitalWrite(LED_RED_NORTH, HIGH);
digitalWrite(LED_YELLOW_NORTH, LOW);
digitalWrite(LED_GREEN_NORTH, LOW);
Serial.println("Motion detected - Stop Traffic");
} else {
digitalWrite(LED_RED_NORTH, LOW);
// Read distances from four ultrasonic sensors
distanceNorth = readDistanceFromSensor(ULTRASONIC_TRIG_PIN_NORTH, ULTRASONIC_ECHO_PIN_NORTH);
distanceSouth = readDistanceFromSensor(ULTRASONIC_TRIG_PIN_SOUTH, ULTRASONIC_ECHO_PIN_SOUTH);
distanceEast = readDistanceFromSensor(ULTRASONIC_TRIG_PIN_EAST, ULTRASONIC_ECHO_PIN_EAST);
distanceWest = readDistanceFromSensor(ULTRASONIC_TRIG_PIN_WEST, ULTRASONIC_ECHO_PIN_WEST);
// Process sensor data and take actions based on the readings
processSensorData(distanceNorth, distanceSouth, distanceEast, distanceWest);
// Send sensor data via webhook
String sensorData = "{\"event\": \"SensorData\", \"distanceNorth\": " + String(distanceNorth) +
", \"distanceSouth\": " + String(distanceSouth) +
", \"distanceEast\": " + String(distanceEast) +
", \"distanceWest\": " + String(distanceWest) + "}";
sendWebhook(sensorData);
}
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temperature = data.temperature;
float humidity = data.humidity;
// Send sensor data via webhook
String sensorData = "{\"event\": \"SensorData\", \"distanceNorth\": " + String(distanceNorth) +
", \"distanceSouth\": " + String(distanceSouth) +
", \"distanceEast\": " + String(distanceEast) +
", \"distanceWest\": " + String(distanceWest) +
", \"temperature\": " + String(temperature) +
", \"humidity\": " + String(humidity) + "}";
sendWebhook(sensorData);
delay(1000);
}