โปรเจกต์ถังขยะเปิด-ปิดฝาแบบไร้สัมผัสอัตโนมัติด้วย Arduino
โปรเจกต์ถังขยะเปิด-ปิดฝาแบบไร้สัมผัสอัตโนมัติด้วย Arduino
การจัดการขยะเป็นสิ่งที่ควรให้ความสำคัญ โดยเฉพาะอย่างยิ่งในยุคปัจจุบันที่เราต้องเน้นความสะอาดและการไม่สัมผัสสิ่งต่างๆ เพื่อป้องกันการระบาดของเชื้อโรค มาพบกับโปรเจกต์ ถังขยะอัจฉริยะ ที่พัฒนาขึ้นโดยการใช้ Arduino และเซนเซอร์ Ultrasonic ที่จะช่วยให้ฝาถังขยะเปิดและปิดโดยอัตโนมัติเมื่อมีคนเข้ามาใกล้ ความสะอาดและความสะดวกเริ่มที่นี่
การทำโปรเจกต์ถังขยะเปิด-ปิดฝาแบบไร้สัมผัสอัตโนมัติด้วย Arduino สามารถทำได้โดยใช้เซนเซอร์อินฟราเรด (IR) หรือเซนเซอร์ Ultrasonic เพื่อตรวจจับการเคลื่อนไหวของมือหรือวัตถุที่อยู่ในระยะที่กำหนด หากตรวจจับเห็นการเคลื่อนไหว ฝาถังขยะจะถูกเปิดโดยมอเตอร์ Servo และจะปิดเองหลังจากเวลาที่กำหนด โดยในโปรเจกนี้เราจะใช้ Ultrasonic
อุปกรณ์วัสดุที่ต้องใช้
Arduino board เช่น Arduino Uno
เซนเซอร์ Ultrasonic HC-SR04
มอเตอร์ Servo
ถังขยะพร้อมฝา
บอร์ดทดลอง Breadboard และสาย jumper
ถ่าน 9V พร้อมขั้งถ่านแบบ DC Jack 5.5x2.1mm
ขั้นตอนการทำ
1. การต่อวงจร
เชื่อมต่อเซนเซอร์ Ultrasonic หรือ IR กับ Arduino
เชื่อมต่อมอเตอร์ Servo กับ Arduino
จ่ายไฟ 9-12V ที่ช่อง DC Jack บนบอร์ด Arduino Uno เพื่อให้ไฟเพียงพอในการขับ Servo
การต่อขา Ultrasonic - Uno
VCC - 5V
GND - GND
Trig - 9
Echo - 8
การต่อขา Servo - Uno
สีแดง - 5V
สีน้ำตาล - GND
สีส้ม - 11
2. เขียนโค้ด Arduino
อ่านค่าจากเซนเซอร์ Ultrasonic หากตรวจจับเห็นการเคลื่อนไหว สั่งให้มอเตอร์ Servo เปิดฝาถังขยะ
ตั้งเวลาปิดฝาถังขยะโดยอัตโนมัติหลังจากเวลาที่กำหนด
#include <Servo.h>
/*
การต่อขา Ultrasonic - Uno
VCC - 5V
GND - GND
Trig - 9
Echo - 8
การต่อขา Servo - Uno
สีแดง - 5V
สีน้ำตาล - GND
สีส้ม - 11
*/
// กำหนด Pin สำหรับเซนเซอร์ Ultrasonic
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define SERVO_PIN 11
Servo servoMotor; // สร้างออบเจกต์ servo
long previousDistance = 0;
int sensor = 600; // ระยะที่ให้เซนเซอร์ทำงาน mm
long readUltrasonicDistance(int triggerPin, int echoPin) {
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
return pulseIn(echoPin, HIGH);
}
void setup() {
servoMotor.attach(SERVO_PIN); // กำหนด pin ที่เชื่อมต่อกับ Servo
servoMotor.write(0); // เริ่มต้นด้วยการปิดฝาถังขยะ
Serial.begin(9600);
}
void loop() {
long distance = readUltrasonicDistance(TRIGGER_PIN, ECHO_PIN);
Serial.println(distance);
if (distance <= sensor && previousDistance > sensor) { // หากมีวัตถุเข้ามาใกล้ในระยะ sensor
servoMotor.write(90); // เปิดฝาถังขยะ
} else if (distance > sensor && previousDistance <= sensor) { // หากวัตถุออกจากระยะ sensor
servoMotor.write(0); // ปิดฝาถังขยะ
}
previousDistance = distance;
delay(100);
}