#include <ESP32Servo.h>
#define TRIG_PIN 5
#define ECHO_PIN 18
#define SERVO_PIN 13
#define RELE_PIN 27 // Pino conectado ao módulo relé
Servo servo;
long duration;
float distance;
const int openAngle = 90;
const int closeAngle = 0;
bool portaAberta = false;
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RELE_PIN, OUTPUT);
digitalWrite(RELE_PIN, LOW); // Garante que o LED comece desligado
servo.setPeriodHertz(50); // 50Hz padrão
servo.attach(SERVO_PIN, 500, 2400); // Min e Max pulse width
servo.write(closeAngle); // Inicia com a portinhola fechada
}
void loop() {
distance = readDistanceCM();
Serial.print("Distância: ");
Serial.print(distance);
Serial.println(" cm");
if (!portaAberta && distance < 3.0) {
Serial.println("Distância < 3cm: Abrindo portinhola...");
servo.write(openAngle);
portaAberta = true;
digitalWrite(RELE_PIN, LOW); // Liga o LED
} else if (portaAberta && distance >= 15.0) {
Serial.println("Distância >= 15cm: Fechando portinhola...");
servo.write(closeAngle);
portaAberta = false;
digitalWrite(RELE_PIN, HIGH); // Desliga o LED
}
delay(500); // Leitura a cada 0.5s
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
float cm = duration * 0.034 / 2;
return cm;
}