โฉมหน้าโปรเจกต์คัดแยกขยะอัตโนมัติด้วย Raspberry Pi สุดตึง!
Wassup วัยรุ่น Maker ทุกคน! 🚀 ชีวิตทุกวันนี้มันรีบเร่งไปหมด ตื่นเช้าไปเรียน ไปทำงาน แค่เวลากินข้าวยังแทบไม่มี แล้วจะเอาเวลาที่ไหนมานั่งแยกขยะเนอะ? สุดท้ายก็เทรวมๆ กันไปหมดทั้งขยะย่อยสลายได้และย่อยสลายไม่ได้ ซึ่งมันสร้างภาระให้คนเก็บขยะและโลกของเราสุดๆ
วันนี้เราเลยจะพามาทำ "ระบบคัดแยกขยะอัจฉริยะ" ที่สามารถส่องกล้องแล้วบอกได้เลยว่าขยะชิ้นนี้เป็นแบบ Biodegradable (ย่อยสลายได้) หรือ Non-biodegradable (ย่อยสลายไม่ได้) ไฮไลท์คือ เราไม่ต้องมานั่งเหนื่อยเก็บ Data หรือเทรน Machine Learning เองให้ปวดหมอง! เพราะเราจะใช้พลังของ CircuitDigest Cloud เข้ามาช่วยประมวลผลผ่าน API ล้วนๆ โปรเจกต์นี้มือใหม่ก็ทำตามได้ชิลๆ ครับ!
มันทำงานยังไงวะเนี่ย? (Workflow) 🧐
คอนเซปต์ของระบบนี้คือการใช้กล้อง USB ถ่ายภาพขยะ แล้วส่งรูปนั้นขึ้นไปที่ Cloud API เพื่อให้ AI ฝั่งเซิร์ฟเวอร์ช่วยดูให้ จากนั้นก็ส่งผลลัพธ์กลับมาแสดงผลที่บอร์ด Raspberry Pi ของเราครับ โดยมีลำดับการทำงานดังนี้:
กล้อง USB คอยรับภาพแบบ Live Feed โดยเราจะใช้ไลบรารี OpenCV ในการเข้าถึงกล้อง
สามารถเลือกได้ว่าจะกดปุ่ม Spacebar ถ่ายรูปเอง (Keyboard mode) หรือให้มันถ่ายอัตโนมัติตามเวลาที่กำหนด (Auto mode)
ภาพที่ถ่ายจะถูกแปลงเป็นไฟล์ .jpeg เพื่อง่ายต่อการส่งข้อมูล
ใช้ไลบรารี Requests ยิง API (HTTPS POST) ส่งภาพไปยัง CircuitDigest Cloud
Cloud API ประมวลผลเสร็จปุ๊บ จะส่งผลลัพธ์กลับมาโชว์บนหน้าจอ Terminal ทันที! โคตรเฟี้ยว!
ถ้าใครสนใจขยับสเกลไปทำเป็นหุ่นยนต์วิ่งเก็บขยะ ลองแวะไปดู หุ่นยนต์ AI เก็บและคัดแยกขยะอัตโนมัติ หรือถ้าอยากทำด้วยบอร์ด Arduino ล้วนๆ ก็มีโปรเจกต์ ระบบคัดแยกขยะอัตโนมัติด้วย Arduino Uno Q ให้หาทำกันต่อได้นะ!
อุปกรณ์ที่ต้องเตรียม (Hardware Checklist) 🛠️
อุปกรณ์
หน้าที่การทำงาน
Raspberry Pi
พระเอกของงาน! เป็นตัวควบคุมหลักและประมวลผลคำสั่งทั้งหมด
กล้อง USB (USB Camera)
ดวงตาของระบบ เอาไว้ส่องดูขยะ
MicroSD Card
เอาไว้ลง Raspberry Pi OS และเก็บไฟล์โค้ดต่างๆ
💡 ป้ายยาไอเทมเด็ด: หาบอร์ด Raspberry Pi รุ่นแรงๆ หรือกล้อง USB / MicroSD Card คุณภาพดีๆ ไว้ลุยโปรเจกต์อยู่ใช่มั้ย? ทักมาที่ LINE OA ของ Globalbyte ได้เลยครับ เรามีของพร้อมส่ง ไม่ต้องไปเดินหาให้เมื่อยตุ้ม!
ขั้นตอนการทำ Step-by-Step 🏃♂️💨
การเขียนโค้ดลง Raspberry Pi จะไม่เหมือน Arduino IDE ที่เสียบสายแล้วกด Flash ได้เลยนะ เราต้องลง OS ให้บอร์ดก่อน (ใช้ Raspberry Pi Imager โหลด OS ลง SD Card) จากนั้นเปิดเครื่องแล้วเลือกเชื่อมต่อได้ 3 ทาง:
ต่อตรง: เสียบจอ คีย์บอร์ด เมาส์ เข้าบอร์ดเลย
ผ่าน SSH: รีโมทผ่าน Command-line วัยรุ่นสายพิมพ์
ผ่าน VNC Viewer: รีโมทเข้ามาดูหน้าจอ Desktop เต็มๆ ใครทำไม่เป็น แวะไปอ่าน คู่มือการตั้งค่าและใช้งาน VNC บน Raspberry Pi ก่อนได้ครับ
▼ คลิกเพื่อดูแผนผังวงจรและการตั้งค่า API (View Diagrams & Cloud Setup) ▲ ซ่อนรายละเอียดรูปภาพ
ถึงเวลาเล่นของ: ส่วนของ Source Code 💻
โค้ด Python ตัวนี้เราจะใช้ร่วมกับ Thonny IDE ที่มีมาให้ใน Raspberry Pi OS แค่เสียบกล้อง ก๊อปปี้โค้ด เปลี่ยนค่า API KEY ให้เป็นของตัวเอง แล้วกด Run ก็ซิ่งได้เลย!
⚠️ โน้ตสำหรับสายโค้ดดิ้ง:
ถ้าโค้ดมีความซับซ้อนเรื่องไลบรารี หรือใครรันแล้วติดบั๊ก แนะนำให้สไลด์ไปเช็คโค้ดและไฟล์ฉบับเต็มได้ที่ GitHub ของโปรเจกต์ต้นฉบับเลยนะ เพื่อความชัวร์ที่สุดครับ
▼ คลิกเพื่อดูโค้ด Python (View Python Source Code) ▲ ซ่อนกล่องโค้ด
import cv2
import requests
import time
import os
import sys
# ใส่ API Endpoint ของ CircuitDigest Cloud
SERVER_URL = "https://www.circuitdigest.cloud/api/v1/waste-detection/detect"
# เปลี่ยนตรงนี้เป็น API Key ของตัวเอง
API_KEY = "YourApikey"
# เลือกโหมดการทำงาน "keyboard" (กด Spacebar ถ่าย) หรือ "auto"
MODE = "keyboard"
AUTO_INTERVAL = 5
# เรียกใช้งานกล้อง USB
cap = cv2.VideoCapture(0, cv2.CAP_V4L2)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
if not cap.isOpened():
print("Camera not found! Check USB camera connection.")
sys.exit()
# ข้าม loop โค้ดส่วนจัดการรูปภาพบางส่วนมาดูแก่นหลักของการส่ง API
# (กรุณาดู Full Code ที่ GitHub ต้นฉบับ)
# สมมติเราได้ภาพ (frame) จากกล้องแล้ว จะทำการเข้ารหัสเป็น jpeg
_, img_encoded = cv2.imencode('.jpg', frame, [cv2.IMWRITE_JPEG_QUALITY, 90])
img_bytes = img_encoded.tobytes()
# จัดเตรียมไฟล์และ header ยิง HTTP POST
# files = ... , headers = ...
response = requests.post(SERVER_URL, headers=headers, files=files, timeout=15)
# เช็คผลลัพธ์
if response.status_code == 200:
safe_response = response.text.encode('utf-8', errors='replace').decode('utf-8')
print("Response:", safe_response)
ปัญหาที่เจอบ่อย (Troubleshooting) 🔧
กล้องไม่ติด (Camera not detected): สาย USB หลวม หรือบางทีเราต่อกล้องหลายตัว ให้ลองเปลี่ยน cv2.VideoCapture(0) เป็น 1 ดูครับ
API Timeout: เน็ตปิงเยอะ หรือต่อ Wi-Fi หลุด ลองเพิ่มเวลา Timeout หรือเช็คเน็ตตัวเองก่อนด่าเซิร์ฟเวอร์นะวัยรุ่น
Invalid API Key: ก๊อปปี้ API Key มาไม่ครบ หรือเผลอเว้นวรรค ให้เช็คในเว็บให้ดี
บอกประเภทขยะผิดพลาด: มุมกล้องไม่ดี ย้อนแสง หรือเบลอ ลองจัดแสงดีๆ หรืออัปเกรดเป็นกล้องความละเอียดสูงขึ้นจะช่วยได้เยอะเลย
ข้อดีและข้อจำกัดของระบบนี้ ⚖️
ข้อดีเด่นๆ (Advantages)
ข้อจำกัด (Limitations)
ตรวจจับแบบ Real-time แยกขยะได้ทันที
ต้องมีอินเทอร์เน็ตที่เสถียรตลอดเวลา (เพราะประมวลผลบน Cloud)
ไม่ต้องทำโมเดล ML เอง ไม่ต้องนั่ง Label รูป
ความแม่นยำขึ้นอยู่กับคุณภาพของกล้องและแสงสว่าง
ทำง่ายมาก ใช้อุปกรณ์น้อยชิ้น
อาจมีข้อจำกัดเรื่องจำนวนครั้งที่เรียกใช้ API ฟรีรายเดือน
FAQ - คำถามยอดฮิต 🤔
Q: ระบบนี้ใช้แบบไม่มีเน็ตได้มั้ย? A: ไม่ได้จ้า เพราะเราต้องส่งรูปขึ้น Cloud ถอดปลั๊กเน็ตปุ๊บ คือจบข่าว
Q: เอากล้องเว็บแคมกากๆ มาใช้ได้มั้ย? A: ได้แหละ แต่ความแม่นยำมันก็จะแปรผันตามความชัดของกล้องนะวัยรุ่น
🔗 แหล่งอ้างอิงและดาวน์โหลดซอร์สโค้ด:
⚡ วัยรุ่นสายทำพร้อมลุยหรือยัง? จัดอุปกรณ์ให้ครบแล้วไปลุยกัน! ⚡
*Disclaimer (ข้อจำกัดความรับผิดชอบ): เนื้อหาบทความนี้ถูกเรียบเรียงและสรุปมาจากโปรเจกต์ภาษาอังกฤษต้นฉบับ ข้อมูลทางเทคนิคบางประการอาจมีการปรับเปลี่ยน หรือคลาดเคลื่อนไปจากเดิม ให้ไปตรวจสอบที่เว็บต้นฉบับและ GitHub ของผู้พัฒนาก่อนลงมือเขียนโค้ดเพื่อความชัวร์นะครับ!