#define pinLum 25 // порт подключения аналогового выхода датчика света (фоторезистор)
#define pinPIR 19 // порт подключения датчика движения
#define pinLED 15 // порт подключения светодиода
#define pinSiren 18 //порт подключения генератора звука
#define servoPin 2 // порт подключения сервопривода
#include <Wire.h>
#include <ESP32Servo.h>
Servo servDoor;
void setup()
{
Serial.begin(115200);
servDoor.attach(servoPin);
Serial.println("Welcome ROBBANK");
Serial.println("Calibrate System");
delay(1000);
pinMode(pinLum, INPUT);
pinMode(pinPIR, INPUT);
pinMode(pinLED, OUTPUT);
pinMode(pinSiren, OUTPUT);
// Calibration code remains unchanged
static uint32_t durationCalibrate = millis();
int Lum = 0;
Serial.println("Calibrate light");
while ((Lum < 32 || Lum > 4063) || Lum != 1001) {
Lum = analogRead(pinLum);
if (millis() - durationCalibrate >= 5000) {
for (;;) {
Serial.print("FATAL ERROR ");
Serial.print("Fail calibrate");
delay(10000);
}
}
}
Serial.println("Turn PIR sensor");
while (!digitalRead(pinPIR)) {
if (millis() - durationCalibrate >= 5000) {
for (;;) {
Serial.print("FATAL ERROR ");
Serial.println("Fail calibrate");
delay(10000);
}
}
}
while (digitalRead(pinPIR)) {
Serial.println("Calibrate completed!");
delay(2000);
}
}
void loop()
{
int Lum = analogRead(pinLum);
bool Move = digitalRead(pinPIR);
static bool flagLed = false;
static bool flagDisp = false;
static bool flagSiren = false;
// Проверяем уровень освещенности
if (Lum < 105) { // изменено на 105 для ночного времени
if (!flagDisp) {
Serial.println("Enable security");
flagDisp = true;
servDoor.write(180); // Закрываем дверь
}
// Мигаем светодиодом
static uint32_t durationLED = 0;
if (millis() - durationLED >= 1000) {
flagLed = !flagLed;
durationLED = millis();
}
// Обнаружение движения
if (Move && !flagSiren) {
flagSiren = true;
Serial.println("Motion detected!");
Serial.println("Calling robot");
delay(1000);
Serial.print("Request robot: ");
Serial.println("");
Serial.write(67);
Serial.write(79);
Serial.write(68);
Serial.write(69);
Serial.write(58);
Serial.write(32);
Serial.write(82);
Serial.write(79);
Serial.write(66);
Serial.write(79);
Serial.write(84);
Serial.write(71);
Serial.write(79);
Serial.write(84);
Serial.write(79);
Serial.write(10);
delay(3000);
digitalWrite(pinSiren, HIGH);
flagLed = true;
} else if (!Move && flagSiren) {
flagSiren = false;
digitalWrite(pinSiren, LOW);
flagDisp = false;
}
} else {
// Если уровень освещенности выше 105, отключаем охрану
if (flagDisp) {
flagLed = false;
Serial.println("Disable security");
servDoor.write(0); // Открываем дверь
flagDisp = false;
}
}
digitalWrite(pinLED, flagLed);
delay(100);
}