#include <ESP32Servo.h>
//ประกาศขาควบคุม servo
const int servoPin = 18;
const int DISTANCE_THRESHOLD = 50; //ระยะห่างของวัตถุที่ต้องการให้ servo ทำงาน
const int start_point_servo = 0;//องศา servo เริ่มต้น
const int stop_point_servo = 90;//องศา servo สิ้นสุด
const int open_time = 1000;//ระยะเวลาเปิด servo
//ประกาศขา ultrasonic
#define ECHO_PIN 2
#define TRIG_PIN 4
Servo servo;
void setup() {
Serial.begin(115200);
servo.attach(servoPin, 500, 2400);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.write(start_point_servo);
}
void loop() {
delay(1000);
Serial.print("Measured distance: ");
Serial.println(readDistanceCM());
if (readDistanceCM() < DISTANCE_THRESHOLD) {
Serial.print("open servo");
servo.write(stop_point_servo);
delay(open_time);
servo.write(start_point_servo);
}
}
//function อ่านระยะทางแล้วแปลงเป็น cm เนื่องจาก ultrasonic จะ return ค่าเป็นเวลาที่เสียงเดินทางไปชนวัตถุและกลับมา
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}