แยกขยะด้วย AI! สร้างระบบตรวจจับขยะอัจฉริยะ (Waste Detection) ด้วยบอร์ด ESP32-CAM

ESP32-CAM Waste Detection System Overview
โปรเจกต์ระบบแยกขยะอัตโนมัติความแม่นยำสูง ขับเคลื่อนด้วยบอร์ด ESP32-CAM และระบบ Cloud AI

สวัสดีเพื่อนๆ ชาว Maker และวัยรุ่นสายหาทำทุกคนครับ! ⚡ ในชีวิตประจำวันของเราเนี่ย มีขยะจำนวนมหาศาลถูกสร้างขึ้นในทุกๆ วัน ไม่ว่าจะเป็นที่บ้าน โรงเรียน ออฟฟิศ หรือตามที่สาธารณะต่างๆ ใช่ไหมครับ? แต่รู้ไหมว่าปัญหาที่แท้จริงไม่ใช่แค่การเก็บขยะให้ลงถัง แต่คือ **"การแยกขยะให้ถูกต้อง"** ต่างหากครับ!

เพราะเวลาขยะอินทรีย์ที่ย่อยสลายได้ (Biodegradable) เช่น เศษอาหาร หรือเศษใบไม้ ไปผสมปนเปกับขยะที่ย่อยสลายไม่ได้ (Non-biodegradable) เช่น พวกขวดพลาสติกหรือกระป๋องน้ำอัดลม มันจะทำให้กระบวนการรีไซเคิลทำได้ยากขึ้น แถมยังเพิ่มมลพิษให้สิ่งแวดล้อมอีกต่างหาก ซึ่งการมานั่งแยกขยะด้วยมือทีละชิ้นนอกจากจะเสียเวลาและต้องใช้แรงงานคนตลอดเวลาแล้ว ก็ยังมักจะเกิดความผิดพลาดได้ง่ายสุดๆ ครับ

จะดีกว่าไหม... ถ้าเรามีอุปกรณ์ตัวจิ๋วราคาประหยัดที่แค่ "มอง" ดูขยะ แต่อ้างอิงพลังประมวลผลภาพจาก AI แล้วช่วยตัดสินใจคัดแยกประเภทขยะให้เราได้ภายในเวลาไม่กี่วินาที? วันนี้เราจะพาไปดูขั้นตอนการสร้าง **ระบบตรวจจับขยะอัจฉริยะความเร็วสูง** ด้วยบอร์ดกล้องจิ๋วอย่าง ESP32-CAM กันครับ ทำง่ายและประหยัดงบสุดๆ ไปเลยล่ะ!

ระบบตรวจจับขยะของ ESP32-CAM ทำงานอย่างไร? 🔍⚙️

กลไกการทำงานของเจ้าเครื่องนี้เข้าใจง่ายมากครับ เป็นขั้นตอนสั้นๆ ดังนี้เลย:

  • กดปุ่มถ่ายภาพ: เมื่อเรากดปุ่มสวิตช์ ตัวบอร์ด ESP32-CAM จะทำการบันทึกภาพขยะตรงหน้าทันที 1 ภาพ
  • ส่งข้อมูลขึ้นคลาวด์: แทนที่จะปล่อยให้ไมโครคอนโทรลเลอร์ตัวเล็กๆ ประมวลผลภาพอันหนักหน่วงเอง ตัวบอร์ดจะส่งภาพนั้นผ่านระบบ Wi-Fi ตรงไปยัง CircuitDigest Cloud API ที่มี AI คอยสแตนด์บายประมวลผลอยู่บนเซิร์ฟเวอร์
  • แยกแยะและส่งผลกลับ: ตัวระบบคลาวด์จะวิเคราะห์ภาพขยะภายในเสี้ยววินาที แล้วระบุประเภทขยะส่งกลับมาแสดงผลที่ Serial Monitor บนคอมพิวเตอร์ของเรา
  • แสดงผลด้วยไฟ LED: เพื่อให้เห็นผลลัพธ์เชิงประจักษ์แบบเรียลไทม์ วงจรของเราจะสั่งให้ **ไฟ LED สีแดงติดสว่าง** เมื่อตรวจเจอขยะย่อยสลายได้ (Biodegradable) และสั่งให้ **ไฟ LED สีgreenติดสว่าง** เมื่อตรวจเจอขยะย่อยสลายไม่ได้ (Non-biodegradable) ครับ

💡 Maker's Tip: บอร์ด ESP32-CAM เป็นหัวใจหลักที่ทำให้โปรเจกต์นี้สำเร็จได้ในราคาประหยัดครับ เพราะมันรวมทั้งตัวไมโครคอนโทรลเลอร์, โมดูลกล้อง OV2640 และเสาสัญญาณ Wi-Fi ไว้ในบอร์ดจิ๋วอันเดียวเลย!

หากเพื่อนๆ กำลังมองหา บอร์ดพัฒนา ESP32-CAM, หลอดไฟ LED สีแดง/สีgreen, ตัวต้านทาน 220 โอห์ม, ปุ่มกด (Push Button) หรือสายจัมเปอร์ แวะมาช้อปปิ้งอุปกรณ์แท้ราคาเป็นกันเองได้ที่ Globalbyte Shop เลยครับ! ของพร้อมส่งทันที ทัก LINE OA มาคุยกับเราได้เลยนะ!

ตารางอุปกรณ์ที่จำเป็นสำหรับโปรเจกต์ 📊

ลำดับ อุปกรณ์ (Components) หน้าที่การทำงานในโปรเจกต์ (Purpose)
1 ESP32-CAM ทำหน้าที่เป็นตัวประมวลผลหลัก บันทึกภาพ และส่งไฟล์ผ่าน Wi-Fi
2 ปุ่มกด (Push Button) ใช้เป็นตัวส่งสัญญาณอินพุตจากผู้ใช้ เพื่อสั่งให้กล้องถ่ายภาพ
3 โฟโต้บอร์ด (Breadboard) ช่วยให้การต่อสายไฟและวงจรทำได้ง่าย สะอาด เป็นระเบียบ
4 ไฟ LED สีแดง และ สีgreen ใช้เป็นไฟสัญญาณแสดงผลลัพธ์การแยกประเภทขยะแต่ละชนิด
5 ตัวต้านทาน 220 โอห์ม ใช้สำหรับต่ออนุกรมเพื่อจำกัดกระแสไฟฟ้าไม่ให้ไฟ LED เสียหาย

⚠️ ข้อควรรู้ในการอัปโหลดโค้ดลงบอร์ด ESP32-CAM

หากคุณเลือกใช้บอร์ด ESP32-CAM รุ่นมาตรฐานที่ไม่มีพอร์ต USB ในตัว คุณจำเป็นต้องใช้ **ตัวแปลงสัญญาณ USB-to-Serial (FTDI Adapter)** ในการโปรแกรมโค้ดนะครับ! โดยต่อสายตามนี้: ขา TX ของ FTDI → ขา RX (U0R) ของบอร์ด, ขา RX ของ FTDI → ขา TX (U0T) ของบอร์ด, ขา GND → GND และที่สำคัญ **ต้องต่อขา GPIO 0 ลง GND (LOW)** เพื่อเข้าสู่โหมด Flash ระหว่างการอัปโหลดโค้ดครับ! แต่ถ้าบอร์ดของคุณมีพอร์ต Micro-USB ติดมาด้วยอยู่แล้ว ก็สามารถเสียบสายตรงเข้าคอมพิวเตอร์อัปโหลดได้เลยครับ

ขั้นตอนการสร้างระบบทีละสเต็ป (Step-by-Step Procedure) 🛠️

  1. สมัครบัญชี CircuitDigest Cloud: เข้าไปที่หน้าเว็บ CircuitDigest Cloud สมัครไอดีให้เรียบร้อย เลื่อนลงมาหาฟีเจอร์ "Waste Detection" แล้วกดเข้าไป คุณจะเจอ **API Key** ของตัวเองแสดงอยู่บนหน้าเว็บ
  2. ทดสอบระบบเสมือนจริง (Try API): ก่อนจะเริ่มต่อสายฮาร์ดแวร์ คุณสามารถทดสอบความแม่นยำของ AI ได้ผ่านฟังก์ชัน "Try API" บนหน้าเว็บครับ แค่ลองอัปโหลดรูปภาพที่มีเศษอาหารหรือขวดพลาสติก แล้วกด "Run Test" ระบบจะประมวลผลคัดแยกประเภทขยะให้ดูในไม่กี่วินาทีเลยครับ *(บัญชีฟรีจำกัดการทดสอบที่ 15 ครั้งต่อวัน และ 100 ครั้งต่อเดือนนะครับ)*
  3. ต่อวงจรและอัปโหลดเฟิร์มแวร์: นำบอร์ด ESP32-CAM, ปุ่มกด และไฟ LED มาเสียบลงเบรดบอร์ดและต่อสายตามผังวงจร จากนั้นเปิดโปรแกรม Arduino IDE เลือกบอร์ดเป็น **AI Thinker ESP32-CAM** นำโค้ดโปรแกรมหลักไปวาง แก้ไขชื่อ Wi-Fi, รหัสผ่าน และใส่ API Key ของคุณให้ถูกต้อง แล้วกดอัปโหลดโค้ดลงบอร์ด
  4. สแกนแยกขยะในชีวิตจริง: เมื่อระบบพร้อมใช้งาน ให้นำเอาขยะตัวอย่างมาวางหน้ากล้อง จากนั้นกดปุ่มกดที่ต่ออยู่กับขา GPIO 13 ตัวบอร์ดจะลั่นชัตเตอร์และอัปโหลดรูปภาพไปยังเซิร์ฟเวอร์ทันที เมื่อเซิร์ฟเวอร์วิเคราะห์เสร็จ จะส่งผลกลับมาสั่งให้ไฟ LED สว่างตามประเภทขยะ และรายงานผลบนหน้าจอคอมพิวเตอร์ของคุณภายในไม่กี่วินาทีครับ!

ทำไมต้องใช้ Cloud API แทนที่จะเทรนโมเดลเอง? 🤖💡

ปกติแล้วถ้าเราจะทำระบบคัดแยกวัตถุด้วยตัวเองผ่านแพลตฟอร์มอย่าง Edge Impulse หรือ TensorFlow Lite เราจะต้องเสียเวลามากมายมหาศาลไปกับการเก็บรวบรวมชุดข้อมูลรูปภาพขยะ (Dataset Collection), มานั่งตั้งค่าสถาปัตยกรรมโมเดล Machine Learning, ทำกระบวนการ Quantization เพื่อย่อขนาดโมเดล และติดตั้งลงบอร์ด ซึ่งขั้นตอนทั้งหมดนี้อาจใช้เวลาเป็นวันหรือเป็นสัปดาห์ แถมต้องใช้ความรู้ความเข้าใจเรื่อง AI เชิงลึกแบบเข้มข้นเลยครับ

แต่การเปลี่ยนมาใช้บริการ **CircuitDigest Cloud Waste Detection API** จะช่วยพลิกโฉมชีวิต Maker ของคุณให้ง่ายขึ้นเยอะครับ เพราะมันเป็นบริการในรูปแบบ RESTful API ที่มีการเทรนและโฮสต์โมเดลประสิทธิภาพสูงไว้บนเซิร์ฟเวอร์ฝั่งผู้ให้บริการเรียบร้อยแล้ว สรุปข้อดีเปรียบเทียบได้ดังนี้ครับ:

  • ประหยัดเวลาสุดๆ: ตั้งค่าและพร้อมใช้งานได้ภายในเวลาไม่ถึง 10 นาที ขณะที่ Edge Impulse อาจต้องงมนานหลายวัน
  • ลดสเปกฮาร์ดแวร์: บอร์ดไมโครคอนโทรลเลอร์รุ่นไหนที่มี Wi-Fi ก็ใช้ได้เลย ไม่จำเป็นต้องพึ่งชิปประมวลผลกราฟิก (GPU) แรงๆ หรือแรมเยอะๆ บนตัวบอร์ด
  • อัปเดตโมเดลอัตโนมัติ: ตัวโมเดล AI บนคลาวด์จะได้รับการปรับปรุงความแม่นยำอยู่ตลอดเวลา โดยที่เราไม่ต้องเอาบอร์ดมาต่อคอมพิวเตอร์เพื่อแฟลชเฟิร์มแวร์ใหม่เลยสักครั้ง
  • คุ้มค่าตัว: ทางคลาวด์เปิดให้ใช้งานได้ฟรี (15 requests/day) ทำให้เราไม่มีต้นทุนค่าซอฟต์แวร์หรือค่าฮาร์ดแวร์ราคาสูงเลยนอกจากตัวบอร์ดกล้องหลักครับ

วิดีโอสาธิตการทำงานจริง (Live Demo) 🎬

ผังการต่อวงจรอย่างละเอียด (Circuit Diagram) 🔌

Circuit Diagram for ESP32-CAM Waste Detection
ผังการต่อสายปุ่มกดเข้าขา GPIO 13 และต่อไฟ LED เข้าขา GPIO 14 และ 15 บนเบรดบอร์ด

ภาพการประกอบฮาร์ดแวร์ในชีวิตจริง 🛠️

Hardware Connection Real Life
ภาพจำลองการต่อสายไฟเลี้ยง 5V จากพอร์ต USB คอมพิวเตอร์เข้าสู่บอร์ด ESP32-CAM ตรงๆ เพื่อความเสถียร

การทดสอบระบบผ่านหน้าเว็บไซต์ Cloud Platform 🌐

CircuitDigest Cloud Home Page Try API Feature API Tested Result
ขั้นตอนการทดสอบอัปโหลดรูปภาพขยะผ่านหน้าเว็บเพื่อเช็กระดับความมั่นใจ (Confidence level) ของ AI ก่อนรันงานจริง

โค้ดโปรแกรมส่วนที่ 1: การตั้งค่าพินและเครือข่ายไร้สาย 💻

ก่อนอัปโหลดโค้ด อย่าลืมแก้ไขชื่อไวไฟ รหัสผ่าน และระบุ API Key ที่ได้มาจากหน้าเว็บระบบคลาวด์ให้ตรงกันนะครับ:

// การตั้งค่าเครือข่ายและคีย์การเข้าถึงระบบ Cloud API
const char* WIFI_SSID  = "yourssidname";
const char* WIFI_PASS  = "yourwifipassword";
const char* API_KEY    = "yourapikey";

// แมปปิ้งขาฮาร์ดแวร์พินบนบอร์ด ESP32-CAM
#define TRIGGER_BTN  13   // ปุ่มกดถ่ายรูป
#define GREEN_LED    15   // ไฟสีgreenแสดงผลขยะย่อยสลายไม่ได้
#define RED_LED      14   // ไฟสีแดงแสดงผลขยะย่อยสลายได้
#define LED_ON_MS    5000 // สั่งให้ไฟสว่างค้างไว้ 5 วินาที
      

โค้ดโปรแกรมส่วนที่ 2: การเริ่มต้นเปิดใช้งานโมดูลกล้อง 📷

ฟังก์ชันสำหรับการเคลียร์หน่วยความจำบัฟเฟอร์ และตั้งค่าความละเอียดภาพของกล้อง OV2640 ให้ออกมาเป็นฟอร์แมต JPEG ความละเอียดระดับ SVGA:

void initCamera() {
 camera_config_t cfg = {};
 cfg.pixel_format = PIXFORMAT_JPEG;
 cfg.frame_size   = FRAMESIZE_SVGA;
 cfg.jpeg_quality = 8;
 cfg.fb_count     = 2;
 
 // ตรวจสอบความพร้อมของตัวกล้อง
 if (esp_camera_init(&cfg) != ESP_OK) {
   Serial.println("Camera init failed!");
   while (1);
 }
 
 // ปรับความสว่างและคอนทราสต์ให้ภาพคมชัดขึ้น
 sensor_t* s = esp_camera_sensor_get();
 s->set_brightness(s, 1);
 s->set_contrast(s, 1);
 s->set_exposure_ctrl(s, 1);
}
      

โค้ดโปรแกรมส่วนที่ 3: ระบบตรวจจับปุ่มกดและประมวลผลคำสั่งหลัก 🤖

โค้ดในส่วนฟังก์ชัน Loop คอยตรวจสอบการกดสวิตช์ พร้อมระบบหน่วงเวลาป้องกันสวิตช์เด้ง (Debounce delay) เมื่อกดปุ่มระบบจะดึงภาพจากแฟลชแล้วยิง HTTPS POST ไปที่คลาวด์เพื่อรับผลลัพธ์เป็นไฟล์ JSON:

// ตรวจจับการกดสวิตช์ที่ขา GPIO 13
if (digitalRead(TRIGGER_BTN) == LOW) {
 unsigned long now = millis();
 if (now - lastTriggerTime > DEBOUNCE_MS) {
   lastTriggerTime = now;
   classifyWaste(); // สั่งบันทึกภาพและยิงข้อมูลเข้าสู่คลาวด์เซิร์ฟเวอร์
 }
}

// โครงสร้างการยิงคำสั่ง HTTPS POST ไปยังเซิร์ฟเวอร์คลาวด์
camera_fb_t* fb = esp_camera_fb_get();
client.println("POST " + String(serverPath) + " HTTP/1.1");
client.println("X-API-Key: " + String(API_KEY));
client.write(imgBuf, imgLen);

// แกะข้อความผลลัพธ์จากไฟล์ JSON ที่คลาวด์ตอบกลับมา
String classification = parseJsonString(json, "classification");

// สั่งให้ไฟ LED สว่างตามประเภทขยะที่สแกนเจอ
flashLed(GREEN_LED); // ขยะรีไซเคิล/ย่อยสลายไม่ได้
flashLed(RED_LED);   // ขยะอินทรีย์/ย่อยสลายได้
      

ผลลัพธ์การสแกนและคัดแยกขยะผ่าน Serial Monitor 💻🖥️

Uploading code screen Serial Monitor Output Data
เมื่อกล้องจับภาพและคลาวด์ตอบกลับ (ภาพซ้าย) บนหน้าจอคอมพิวเตอร์จะจำแนกจำนวนชิ้นขยะและสรุปประเภทออกมาทันที (ภาพขวา)

จุดเด่นและข้อจำกัดของระบบคัดแยกขยะชิ้นนี้ 🆚

ข้อดีของระบบ (Advantages) ข้อจำกัดของระบบ (Limitations)
ประมวลผลวิเคราะห์รูปภาพและแยกขยะได้ไวในเวลาไม่กี่วินาที ไม่สามารถทำงานได้เลยหากไม่มีสิทธิ์การเข้าถึงคลาวด์ API หลังบ้าน
ต้นทุนการทำต่ำมาก เพราะใช้บอร์ดสเปกมินิมอลที่มีกล้องและไวไฟในตัว จำเป็นต้องเชื่อมต่ออินเทอร์เน็ตที่เสถียรตลอดเวลาเพื่อส่งข้อมูลภาพ
ไม่ต้องพึ่งพาคอมพิวเตอร์ราคาแพงหรือบอร์ดที่มีชิปประมวลผลแรงๆ หากภาพถ่ายจากหน้างานเบลอหรือแสงมืดเกินไป อาจทำให้ AI วิเคราะห์ผลพลาดได้
ส่งผ่านข้อมูลแบบไร้สาย ไม่ต้องต่อสายเชื่อมต่อพ่วงโมดูลเน็ตเวิร์กเพิ่ม ติดเงื่อนไขโควตาจำกัดจำนวนครั้งในการยิงเช็กผล API รายวันและรายเดือน
ขนาดตัววงจรมีความกะทัดรัด จิ๋ว และสามารถพกพาเคลื่อนย้ายได้สะดวก วิเคราะห์ผลได้จากภาพนิ่งที่กดถ่ายเท่านั้น ยังไม่สามารถสแกนสดจากภาพเคลื่อนไหวต่อเนื่องได้

คู่มือแก้ไขปัญหาเบื้องต้นที่เจอกันบ่อยๆ (Troubleshooting Guide) 🛠️🔍

  • ปัญหาที่ 1: หน่วยความจำไม่พอ (Camera capture failed)
    *สาเหตุและการแก้ไข:* ภาพถ่ายที่มีความละเอียดสูงจะกินพื้นที่หน่วยความจำแรม (PSRAM) บนบอร์ดค่อนข้างมาก หากแรมไม่พอการถ่ายภาพจะล้มเหลว วิธีแก้คือให้เข้าไปปรับลดขนาดเฟรมลง (Frame size) หรือลดคุณภาพความคมชัดของไฟล์ JPEG ในโค้ดลงมานิดหน่อย หรือรีเช็คว่าเลือกเปิดใช้งาน PSRAM ในหน้าตั้งค่าบอร์ดของ Arduino IDE ถูกต้องแล้วหรือยังครับ
  • ปัญหาที่ 2: บอร์ด ESP32-CAM รีบูตตัวเองวนไปมาไม่หยุด
    *สาเหตุและการแก้ไข:* อาการนี้มักเกิดจาก **"กระแสไฟเลี้ยงไม่พอ"** ครับ เนื่องจากเวลาบอร์ดต่อไวไฟและเปิดกล้องถ่ายรูปพร้อมกันมันจะกินกระแสไฟพุ่งสูงมาก ซึ่งการจ่ายไฟผ่านพอร์ต USB ของแล็ปท็อปบางเครื่องมักจะจ่ายไฟได้ไม่นิ่ง แนะนำให้เปลี่ยนไปใช้แหล่งจ่ายไฟภายนอกที่จ่ายไฟได้เสถียร (เช่น อะแดปเตอร์ 5V 2A เต็ม) และเช็กสายเชื่อมต่อว่าแน่นหนาดีหรือไม่ครับ
  • ปัญหาที่ 3: ภาพถ่ายออกมาเบลอ ไม่ชัด ส่งผลให้ AI ทายผิด
    *สาเหตุและการแก้ไข:* เลนส์ของกล้องบนบอร์ด ESP32-CAM เป็นเลนส์ที่สามารถหมุนปรับระยะโฟกัสด้วยมือได้ครับ! หากภาพที่ได้เบลอ ให้เอามือลองหมุนปรับหน้าเลนส์เบาๆ จนได้ระยะภาพที่คมชัดที่สุด และตรวจสอบให้แน่ใจว่าสภาพแวดล้อมบริเวณถังขยะมีแสงสว่างที่เพียงพอ ไม่มืดเกินไปครับ
  • ปัญหาที่ 4: กล้องเปิดใช้งานไม่ได้เลย (Camera Initialisation Failed)
    *สาเหตุและการแก้ไข:* ส่วนใหญ่เกิดจากการเลือกโมเดลบอร์ดไม่ตรงในขั้นตอนคอมไพล์โค้ด หรือต่อสายพินผิดพลาด ให้ตรวจสอบใน Arduino IDE ว่าเลือกประเภทบอร์ดเป็น **AI Thinker ESP32-CAM** เรียบร้อยแล้ว และเช็กตำแหน่ง GPIO ในโค้ดว่าตรงกับรุ่นฮาร์ดแวร์ของคุณร้อยเปอร์เซ็นต์ครับ
*คำเตือนและข้อแนะนำ: เนื้อหาบทความนี้สรุปและแปลโครงสร้างมาจากบทความเทคโนโลยีต่างประเทศ ข้อมูลการตั้งค่าระบบคลาวด์และโค้ดโปรแกรมอ้างอิงตามสเปกของผู้พัฒนาต้นฉบับ ระบบจำเป็นต้องพึ่งพาบริการเสริมหลังบ้านภายนอก (CircuitDigest Cloud) ซึ่งอาจมีการปรับเปลี่ยนเงื่อนไขการให้บริการ คลังโมเดล หรือข้อจำกัดโควตา API ในอนาคต ผู้ใช้งานควรเข้าไปศึกษาคู่มือล่าสุดจากทาง เว็บไซต์ผู้ให้บริการระบบคลาวด์โดยตรง ก่อนเริ่มเตรียมวัสดุอุปกรณ์และพัฒนาโครงงานจริงครับ

 

แท็ก


Blog posts

เข้าสู่ระบบ

ลืมรหัสผ่านใช่ไหม?

ยังไม่มีบัญชีใช่ไหม?
สร้างบัญชี