// SIMULATION DONE BY SUDARSHAN MURALEEDHARAN
#include <ESP32Servo.h>
#include <DHTesp.h>
#define AO_PIN 34
#define LED_LOW 5
#define LED_MEDIUM 17
#define LED_HIGH 16
#define LED_L1 25
#define LED_L2 26
#define LED_L3 27
const int PIR_SENSOR_OUTPUT_PIN_entry = 13;
const int PIR_SENSOR_OUTPUT_PIN_exit = 12;
const int SERVO_PIN = 18;
const int DHT_PIN = 15;
int warm_up;
int pos=0;
int persons=0;
DHTesp dhtSensor;
Servo servo;
void setup() {
// begin serial port
Serial.begin (9600);
// DHT22 FOR FAN
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// LEDS
pinMode(LED_LOW, OUTPUT);
pinMode(LED_MEDIUM, OUTPUT);
pinMode(LED_HIGH, OUTPUT);
pinMode(LED_L1, OUTPUT);
pinMode(LED_L2, OUTPUT);
pinMode(LED_L3, OUTPUT);
// SERVO FOR DOOR
servo.attach(SERVO_PIN, 500, 2400);
// PIR FOR DETECTION
pinMode(PIR_SENSOR_OUTPUT_PIN_entry, INPUT);
pinMode(PIR_SENSOR_OUTPUT_PIN_exit, INPUT);
Serial.begin(115200); /* Define baud rate for serial communication */
Serial.println("Waiting For Power On Warm Up");
delay(2000);
Serial.println("Ready!");
// LDR FOR LIGHTING
Serial.begin(9600);
pinMode(AO_PIN, INPUT);
}
void loop() {
// PIR FOR ENTRY
int sensor_output;
sensor_output = digitalRead(PIR_SENSOR_OUTPUT_PIN_entry);
if( sensor_output == LOW )
{
if( warm_up == 1 )
{
Serial.print("Loading...\n\n");
warm_up = 0;
delay(2000);
}
Serial.print("No visitor.\n\n");
delay(1000);
}
else
{
Serial.print("Welcome, visitor!\n\n");
warm_up = 1;
persons+=1;
Serial.print("Persons:"+String(persons)+"\n");
delay(1000);
}
// SERVO
if (sensor_output == HIGH || persons>0)
{
for (pos = 0; pos <= 90; pos += 1) { // 1 clockwise quarter rotation
servo.write(pos);
delay(15);
}
for (pos = 90; pos >= 0; pos -= 1) { // 1 anticlockwise quarter rotation
servo.write(pos);
delay(15);
}
// LDR
int lightValue = analogRead(AO_PIN);
if (lightValue < 250) {
digitalWrite(LED_L1, LOW);
digitalWrite(LED_L2, LOW);
digitalWrite(LED_L3, LOW);
}
else if (lightValue >= 250 && lightValue < 550) {
digitalWrite(LED_L1, HIGH);
digitalWrite(LED_L2, LOW);
digitalWrite(LED_L3, LOW);
}
else if (lightValue >= 550 && lightValue < 850) {
digitalWrite(LED_L1, HIGH);
digitalWrite(LED_L2, HIGH);
digitalWrite(LED_L3, LOW);
}
else {
digitalWrite(LED_L1, HIGH);
digitalWrite(LED_L2, HIGH);
digitalWrite(LED_L3, HIGH);
}
// DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
int Temp = dhtSensor.getTemperature();
if (Temp >= 30 && Temp < 35) {
digitalWrite(LED_LOW, HIGH);
digitalWrite(LED_MEDIUM, LOW);
digitalWrite(LED_HIGH, LOW);
}
else if (Temp >= 35 && Temp < 40) {
digitalWrite(LED_LOW, LOW);
digitalWrite(LED_MEDIUM, HIGH);
digitalWrite(LED_HIGH, LOW);
}
else if (Temp >= 40) {
digitalWrite(LED_LOW, LOW);
digitalWrite(LED_MEDIUM, LOW);
digitalWrite(LED_HIGH, HIGH);
}
else {
digitalWrite(LED_LOW, LOW);
digitalWrite(LED_MEDIUM, LOW);
digitalWrite(LED_HIGH, LOW);
}
delay(2000);
}
// PIR FOR EXIT
sensor_output = digitalRead(PIR_SENSOR_OUTPUT_PIN_exit);
if( sensor_output == LOW )
{
if( warm_up == 1 )
{
Serial.print("Loading...\n\n");
warm_up = 0;
delay(2000);
}
Serial.print("No one left.\n\n");
delay(1000);
}
else
{
Serial.print("Thank you, come again!\n\n");
warm_up = 1;
persons-=1;
Serial.print("Persons:"+String(persons)+"\n");
delay(1000);
}
// SERVO
if (sensor_output == HIGH)
{
for (pos = 0; pos <= 90; pos += 1) { // 1 clockwise quarter rotation
servo.write(pos);
delay(15);
}
for (pos = 90; pos >= 0; pos -= 1) { // 1 anticlockwise quarter rotation
servo.write(pos);
delay(15);
}
if (persons<1) {
// LDR
Serial.println("LIGHTS: OFF");
// DHT22
Serial.println("FAN: OFF");
delay(2000);
}
}
}