โปรเจกต์ถังขยะอัจฉริยะ (Smart Dustbin) เปิด-ปิดอัตโนมัติด้วยเซนเซอร์ Ultrasonic และ Servo
สร้างถังขยะอัจฉริยะที่เปิดฝาเองได้อัตโนมัติโดยใช้เซนเซอร์วัดระยะทาง (Ultrasonic Sensor) และบอร์ด Arduino UNO ช่วยลดการสัมผัสตัวถังขยะโดยตรง เพื่อสุขอนามัยที่ดีในที่พักอาศัย
🛠 อุปกรณ์และส่วนประกอบ
- Arduino Uno R3 x 1 เครื่อง https://shopee.co.th/product/243007968/5725582932
- Ultrasonic Sensor (HC-SR04) x 1 ตัว https://shopee.co.th/product/243007968/7025581844
- SG90 Micro-servo motor x 1 ตัว https://shopee.co.th/product/243007968/6225581895
- สายจัมเปอร์ (Male to Male) x 1 ชุด https://shopee.co.th/product/243007968/7225582763
- สายจัมเปอร์ (Male to Female) x 1 ชุด https://shopee.co.th/product/243007968/7525582748
📝 รายละเอียดโปรเจกต์
โปรเจกต์นี้จะพาคุณสร้าง “ถังขยะอัจฉริยะ” ที่สามารถเปิดฝาได้เองเมื่อตรวจพบวัตถุ (เช่น มือของคุณ) ในระยะที่กำหนด ซึ่งมีประโยชน์มากในการรักษาความสะอาดเพราะเราไม่ต้องใช้มือสัมผัสถังขยะ โดยใช้เซนเซอร์ 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 เพื่อส่งเสียงแจ้งเตือนได้
สรุป: โปรเจกต์ถังขยะอัจฉริยะนี้เป็นจุดเริ่มต้นที่ดีในการเรียนรู้การทำงานร่วมกันระหว่างเซนเซอร์วัดระยะและมอเตอร์ หวังว่าคุณจะสนุกกับการสร้างนวัตกรรมชิ้นเล็กๆ ชิ้นนี้ในบ้านของคุณครับ!