#include <Servo.h>
// Hardware Pin Configuration
const int IR_PIN = 7;
const int SERVO_PIN = 9;
Servo gripperServo;
// Mechanical angle configurations for the clamping jaw
const int JAW_OPENED = 10; // Fully open position (degrees)
const int JAW_CLOSED = 110; // Clamped/closed position (degrees)
int lastState = HIGH; // IR outputs HIGH when clear, LOW when blocked
void setup() {
Serial.begin(9600);
pinMode(IR_PIN, INPUT);
gripperServo.attach(SERVO_PIN);
// Set initial physical state: Open jaw ready for object
gripperServo.write(JAW_OPENED);
Serial.println("--- System Initialized: Gripper Open ---");
}
void loop() {
// Read proximity sensor state
int irState = digitalRead(IR_PIN);
// Check for state changes (Object entering or leaving)
if (irState != lastState) {
if (irState == LOW) {
// Object detected inside the assembly
Serial.println("Target Detected! Clamping gripper...");
// Smooth actuation loop to prevent mechanical stress
for (int pos = JAW_OPENED; pos <= JAW_CLOSED; pos += 5) {
gripperServo.write(pos);
delay(15);
}
}
else {
// Object removed from the assembly
Serial.println("Target Released! Opening gripper...");
for (int pos = JAW_CLOSED; pos >= JAW_OPENED; pos -= 5) {
gripperServo.write(pos);
delay(15);
}
}
// Update tracking state
lastState = irState;
}
delay(50); // Polling stability gap
}