#include <Servo.h>
const int trigPin = 12;
const int echoPin = 13;
const int servoPin = 6;
Servo myServo;
long durata;
float distanza;
float somma;
// Stato trappola
bool trappolaChiusa = false;
bool oggettoVicino = false;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
myServo.attach(servoPin);
myServo.write(0); // posizione iniziale (aperta)
Serial.begin(9600);
}
// funzione per leggere distanza
float misuraDistanza() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durata = pulseIn(echoPin, HIGH);
float distanza = durata * 0.034 / 2;
return distanza;
}
void loop() {
// media di 5 misure
somma = 0;
for (int i = 0; i < 5; i++) {
somma += misuraDistanza();
delay(50);
}
distanza = somma / 5;
Serial.print(“Distanza media: “);
Serial.println(distanza);
// rilevamento oggetto entro 20 cm
if (distanza > 0 && distanza <= 20) {
oggettoVicino = true;
} else {
oggettoVicino = false;
}
// logica trappola
if (oggettoVicino && !trappolaChiusa) {
myServo.write(90); // chiudi trappola
trappolaChiusa = true; // segna che la trappola è chiusa
}
// quando l’oggetto se ne va
if (!oggettoVicino && trappolaChiusa) {
delay(1500); // attesa 2,5 secondi
myServo.write(0); // riapri trappola
trappolaChiusa = false; // reset stato
}
delay(200);
}

