2025年7月2日 星期三

6-3.智能垃圾桶(Smart Trash Can)

 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 秒後回到

 

#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);

}

沒有留言:

張貼留言