#include <Servo.h>
// Pin-Definitionen
const int irSensorPin = 2; // Pin f¸r den IR-Sensor
const int servoPin = 9; // Pin f¸r den Servo
// Positionen f¸r Servo 1
const int servo3InitialPosition = 72; // Ausgangsposition Servo 3 (78)
const int servo3TargetPosition = 63; // Zielposition Servo 3 (48)
// Servomotor
Servo myServo;
// Variablen
unsigned long objectDetectedTime = 0; // Zeitpunkt, an dem das Objekt erkannt wurde
bool objectDetected = false; // Ob ein Objekt erkannt wird
bool servoMoved = false; // Ob der Servo sich bereits bewegt hat
void setup() {
pinMode(irSensorPin, INPUT); // IR-Sensor als Eingang
myServo.attach(servoPin); // Servo initialisieren
myServo.write(servo3InitialPosition); // Ausgangsposition setzen
Serial.begin(9600); // Serielle Ausgabe f¸r Debugging
}
void loop() {
// Zustand des IR-Sensors lesen
bool irState = digitalRead(irSensorPin);
Serial.println(irState); // Debugging: Status des IR-Sensors ausgeben
// Wenn ein Objekt erkannt wird (LOW-Signal)
if (irState == LOW) {
if (!objectDetected) {
objectDetectedTime = millis(); // Startzeit setzen
objectDetected = true;
servoMoved = false; // Servo f¸r n‰chste Bewegung vorbereiten
}
// Wenn das Objekt l‰nger als 1 Sekunde erkannt wird und der Servo noch nicht bewegt wurde
if (millis() - objectDetectedTime > 650 && !servoMoved) {
moveServo();
servoMoved = true; // Servo hat sich bewegt
deactivateServo(); // Servo deaktivieren
}
} else {
// Wenn kein Objekt erkannt wird (HIGH-Signal)
objectDetected = false;
}
// Wenn der Servo deaktiviert wurde, sicherstellen, dass er beim n‰chsten Objekt wieder aktiviert wird
if (servoMoved && !objectDetected) {
servoMoved = false; // Bereit f¸r die n‰chste Bewegung
}
}
// Funktion zum Bewegen des Servos
void moveServo() {
myServo.attach(servoPin); // Servo aktivieren, falls er deaktiviert wurde
myServo.write(servo3TargetPosition); // Servo zur Zielposition bewegen
delay(400); // Wartezeit f¸r die Bewegung
myServo.write(servo3InitialPosition); // Servo zur¸ck zur Ausgangsposition
delay(200); // Wartezeit f¸r die R¸ckbewegung
}
// Funktion zum Deaktivieren des Servos
void deactivateServo() {
myServo.detach(); // Servo deaktivieren, um Energie zu sparen
Serial.println("Servo deaktiviert");
}