專題範例_感應掀蓋垃圾桶



#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); // 避免過度偵測
}


 

留言