Posted in

โปรเจกต์ถังขยะอัจฉริยะ (Smart Dustbin) เปิด-ปิดอัตโนมัติด้วยเซนเซอร์ Ultrasonic และ Servo

โปรเจกต์ถังขยะอัจฉริยะ (Smart Dustbin) เปิด-ปิดอัตโนมัติด้วยเซนเซอร์ Ultrasonic และ Servo

สร้างถังขยะอัจฉริยะที่เปิดฝาเองได้อัตโนมัติโดยใช้เซนเซอร์วัดระยะทาง (Ultrasonic Sensor) และบอร์ด Arduino UNO ช่วยลดการสัมผัสตัวถังขยะโดยตรง เพื่อสุขอนามัยที่ดีในที่พักอาศัย


🛠 อุปกรณ์และส่วนประกอบ


📝 รายละเอียดโปรเจกต์

โปรเจกต์นี้จะพาคุณสร้าง “ถังขยะอัจฉริยะ” ที่สามารถเปิดฝาได้เองเมื่อตรวจพบวัตถุ (เช่น มือของคุณ) ในระยะที่กำหนด ซึ่งมีประโยชน์มากในการรักษาความสะอาดเพราะเราไม่ต้องใช้มือสัมผัสถังขยะ โดยใช้เซนเซอร์ Ultrasonic (HC-SR04) ในการตรวจจับระยะ และใช้ Servo Motor เป็นตัวขับเคลื่อนกลไกการเปิดฝา


🔌 ขั้นตอนการต่อวงจร

ขั้นตอนที่ 1: การต่อเซนเซอร์ Ultrasonic (HC-SR04)

  • ต่อขา VCC เข้ากับขา 5V ของ Arduino
  • ต่อขา GND เข้ากับขา GND ของ Arduino
  • ต่อขา Trig เข้ากับขา Digital Pin 5 ของ Arduino
  • ต่อขา Echo เข้ากับขา Digital Pin 6 ของ Arduino

ขั้นตอนที่ 2: การต่อ Servo Motor เพื่อควบคุมฝาถัง

  • ต่อสาย VCC (สีแดง) เข้ากับขา 5V ของ Arduino
  • ต่อสาย GND (สีดำ/น้ำตาล) เข้ากับขา GND ของ Arduino
  • ต่อสาย Signal (สีส้ม/เหลือง) เข้ากับขา Digital Pin 9 ของ Arduino

ขั้นตอนที่ 3: การทำงานของโค้ด
โค้ดจะทำหน้าที่วัดระยะทางผ่านเซนเซอร์ Ultrasonic หากพบวัตถุอยู่ในระยะ 20 ซม. หรือน้อยกว่า Servo จะหมุนเพื่อเปิดฝาถังขยะ และจะค้างไว้ 3.5 วินาทีก่อนจะปิดลงโดยอัตโนมัติ

ขั้นตอนที่ 4: การทดสอบ
ติดตั้งอุปกรณ์เข้ากับถังขยะให้เรียบร้อย โดยให้เซนเซอร์หันออกด้านนอก ลองเลื่อนมือเข้าใกล้เซนเซอร์ในระยะ 20 ซม. ฝาถังควรจะเปิดออกและปิดเองหลังจากผ่านไปครู่หนึ่ง


💻 Arduino Code

คัดลอกโค้ดด้านล่างนี้ลงในโปรแกรม Arduino IDE และอัปโหลดลงบอร์ดได้เลย:


#include <Servo.h>  // เรียกใช้งานไลบรารี Servo

Servo servo;
int trig = 5;       // ขาสำหรับส่งสัญญาณ Ultrasonic
int echo = 6;       // ขาสำหรับรับสัญญาณ Echo
int servoPin = 9;   // ขาสำหรับควบคุม Servo Motor
long Duration, Distance, Average;
long aver[3];       // อาเรย์สำหรับเก็บค่าระยะทางเพื่อหาค่าเฉลี่ย

void setup() {
  Serial.begin(9600);
  servo.attach(servoPin);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  servo.write(180);         // เริ่มต้นด้วยสถานะปิดฝา (ปรับมุมตามหน้างานจริง)
  delay(100);
  servo.detach();           // ตัดการเชื่อมต่อชั่วคราวเพื่อประหยัดพลังงานและลดเสียงคราง
}

void measure() {
  digitalWrite(trig, LOW);
  delayMicroseconds(5);
  digitalWrite(trig, HIGH);
  delayMicroseconds(15);
  digitalWrite(trig, LOW);
  Duration = pulseIn(echo, HIGH);   // วัดเวลาที่สัญญาณเดินทางกลับมา
  Distance = (Duration / 2) / 29.1; // แปลงเวลาเป็นระยะทาง (เซนติเมตร)
}

void loop() {
  for (int i = 0; i <= 2; i++) { 
    measure();                   
    aver[i] = Distance;         // เก็บค่าการวัด 3 ครั้ง
    delay(10);
  }
  
  Distance = (aver[0] + aver[1] + aver[2]) / 3; // หาค่าเฉลี่ยเพื่อความแม่นยำ

  if (Distance <= 20) {         // หากตรวจพบวัตถุในระยะ 20 ซม.
    servo.attach(servoPin);    
    servo.write(0);            // เปิดฝาถังขยะ (ปรับมุม 0-180 ตามทิศทางการติดตั้ง)
    delay(3500);               // เปิดค้างไว้ 3.5 วินาที
    servo.write(180);          // ปิดฝาถังขยะ
    delay(1500);
    servo.detach();            // หยุดส่งสัญญาณให้ Servo เพื่อลดการกินไฟ
  }
}

💡 ข้อแนะนำเพิ่มเติม

  • ตรวจสอบการต่อสาย: หากเซนเซอร์อ่านค่าเพี้ยน ให้ตรวจสอบหน้าสัมผัสของสายจัมเปอร์
  • ปรับแต่งมุม Servo: มุมในการเปิด-ปิด (0 หรือ 180) อาจต้องปรับเปลี่ยนตามลักษณะการยึดติดของมอเตอร์กับฝาถังขยะของคุณ
  • การพัฒนาต่อยอด: คุณสามารถเพิ่มไฟ LED เพื่อแสดงสถานะ หรือเพิ่มลำโพง Buzzer เพื่อส่งเสียงแจ้งเตือนได้

สรุป: โปรเจกต์ถังขยะอัจฉริยะนี้เป็นจุดเริ่มต้นที่ดีในการเรียนรู้การทำงานร่วมกันระหว่างเซนเซอร์วัดระยะและมอเตอร์ หวังว่าคุณจะสนุกกับการสร้างนวัตกรรมชิ้นเล็กๆ ชิ้นนี้ในบ้านของคุณครับ!