#include <Servo.h>
// 超音波感測器引腳
#define trigPin 9 // 觸發引腳
#define echoPin 8 // 回波引腳
// 伺服馬達引腳
#define sg90Pin 6 // 伺服控制引腳
// 伺服馬達物件
Servo servo;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.attach(sg90Pin);
// 初始狀態:垃圾桶蓋關閉
servo.write(0);
}
void loop() {
long duration;
int distance;
// 發送超音波信號
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 讀取回波時間並計算距離 (cm)
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// 如果距離小於 20cm,開啟垃圾桶蓋
if (distance > 0 && distance < 20) {
Serial.println("Opening lid...");
servo.write(90); // 開蓋
delay(3000); // 保持開啟 3 秒
Serial.println("Closing lid...");
servo.write(0); // 關蓋
}
delay(500); // 避免過度偵測
}
留言
張貼留言