6-3.智能垃圾桶(Smart Trash Can)
一、系統概述
本範例示範如何使用 Arduino 控制
SG90 微型伺服馬達與超音波距離感測器。當感測距離小於 5 公分時,伺服馬達會轉到 90 度,並維持 8 秒,再回到 0 度。
二、接線對應
SG90 伺服馬達與超音波模組接法如下:
|
元件 |
功能 |
腳位說明 |
接至 Arduino |
|
SG90 |
控制訊號 |
橘色 (PWM) |
D3 |
|
SG90 |
電源 |
紅色 (+5V) |
5V |
|
SG90 |
接地 |
咖啡色 (GND) |
GND |
|
超音波 |
Trig |
觸發輸出 |
D8 |
|
超音波 |
Echo |
回波輸入 |
D9 |
|
超音波 |
VCC |
電源 +5V |
5V |
|
超音波 |
GND |
接地 |
GND |
三、電路圖
四、Arduino 整合程式碼(延時8秒)
以下程式使用超音波模組判斷物體距離,小於 5cm 時伺服馬達轉至 90° 並延遲 8 秒後回到 0°:
#include <Servo.h>
const int trigPin = 8;
const int echoPin = 9;
const int servoPin = 3;
Servo lidServo;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lidServo.attach(servoPin);
lidServo.write(0); // 開始時蓋子關閉
Serial.begin(9600);
Serial.println("智慧垃圾桶啟動...");
lidServo.write(90);
}
void loop() {
long duration;
int distance;
// 發送超音波
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 接收超音波
duration = pulseIn(echoPin, HIGH, 30000); // 最多等待 30ms
if (duration == 0) {
Serial.println("⚠️ 無回應,請檢查感測器");
return;
}
// 計算距離
distance = duration * 0.034 / 2;
Serial.print("偵測距離:");
Serial.print(distance);
Serial.println(" cm");
// 若手靠近(< 20 公分)
if (distance < 20) {
Serial.println("✅ 開蓋中...");
lidServo.write(0); // 打開蓋子
delay(3000); // 保持開啟 3 秒
lidServo.write(90); // 關閉蓋子
Serial.println("🕒 關蓋完成");
delay(1000); // 延遲避免重複開蓋
}
delay(200);
}
沒有留言:
張貼留言