i-BIN: ถังขยะอัจฉริยะสําหรับระบบแยกขยะและตรวจสอบอัตโนมัติ

ผู้เขียนบทบาท : นายนรภัทร วิสะมิตนันท์ coe#15

คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์

วิชา : 04-513-021 การโปรแกรมคอมพิวเตอร์ขั้นสูง

1.ความเป็นม

ในช่วงไม่กี่ปีที่ผ่านมา หนึ่งในผลกระทบพื้นฐานของจํานวนประชากรที่เพิ่มขึ้นคืออันตรายต่อสิ่งแวดล้อม จากปัญหาเหล่านี้ ปริมาณขยะที่เพิ่มขึ้นเป็นสิ่งสําคัญที่สุด ในขณะที่ประชากรโลกยังคงเพิ่มขึ้นในอัตราที่ไม่เคยมีมาก่อน การจัดการขยะจึงถูกมองว่าเป็นวิธีแก้ปัญหาที่มีประสิทธิภาพในการบรรเทาปัญหา ในโครงการนี้ Internet-of- Things ถูกนํามาใช้ในการออกแบบระบบคัดแยกขวดน้ำอัตโนมัติ

2.วัตถุประสงค์

2.1 เพื่อความสะดวกในการแยกขวดน้ำ หรือขยะต่างๆ

2.2 เพื่อช่วยลดปริมาณขยะไม่ให้ล้นเมือง

2.3 เพื่อให้ผู้ใช้รู้ถึงการเต็มของถังขยะและมาเก็บได้ถูกต้อง

3.ขอบเขต

3.1 ถังขยะคัดแยกขวดน้ำสามารถคัดแยกขวดน้ำพลาสติกและขวดน้ำโลหะได้

3.2 การแจ้งเตือนผ่าน Line notify ระบบสามารถส่งข้อความแจ้งเตือนไปยังแชทของผู้ใช้ใน Line

3.3 เมื่อขยะถึงระยะที่กำหนดไว้ ระบบจะแจ้งเตือนข้อความแบบเรียลไทม์ โดยใช้เซ็นเซอร์อัลตราโซนิก เชื่อมผ่าน esp32 เข้า Line

3.4 ระบบสามารถเชื่อมต่ออินเตอร์เน็ตและเซิร์ฟเวอร์ของ Line เพื่อส่งข้อความไปยัง Line

3.5 สามารถควบคุมและตรวจสอบสถานะของถังขยะอัฉริยะ

4.ประโยชน์ที่คาดว่าจะได้รับ

4.1 ทำให้ระบบคัดแยกและตรวจสอบขยะอัตโนมัติ ทำงานได้อย่างมีประสิทธิภาพ

4.2 ทำให้ผู้ใช้ได้รับการแจ้งเตือนทันทีเมื่อถังขยะเต็ม

5.ความรู้ที่เกี่ยวข้อง

การแยกอัตโนมัติไม่รวมของเสียหลายอย่างในเวลาเดียวกัน ถังขยะสามารถแยกได้ก็ต่อเมื่อถูกโยนทีละคนเท่านั้น ตัวอย่างเช่น หากขยะที่ทิ้งเป็นถ้วยกระดาษ แต่มีฝาพลาสติก ถังขยะจะถูกแยกอย่างไม่ถูกต้อง การไหลของกระบวนการสําหรับการแยกของเสียอัตโนมัติแสดงในรูปที่ 1

Fig. 1. - 
Process Flow of Automatic Waste Segregation

5.1 TridentTD_LineNotify.h

ซึ่งเป็นไลบรารีที่ใช้ในการส่งข้อความทาง LINE Notify และ WiFi.h ซึ่งใช้ในการเชื่อมต่อกับเครือข่าย WiFi ของคุณทำให้ผู้ใช้งานสามารถเขียนโปรแกรมเพื่อสร้างบริการที่ผู้พัฒนาต้องการ ผ่านการส่งข้อความและโต้ตอบกับผู้ใช้ในลักษณะ Chatbot นั่นเอง Line Messaging API มีฟังก์ชันการทำงานมากมาย แต่ที่เราใช้ฟังก์ชันการทำงานคือ การส่งข้อความ สามารถใช้ส่งข้อความแบบข้อความธรรมดา ข้อความรูปภาพ ข้อความวิดีโอ ข้อความเสียง ฯลฯ

ในการสร้างระบบนี้ จำเป็นต้องมี Token ของ Line Messaging API ซึ่งสามารถขอได้จาก Line Developer ข้อความแจ้งเตือนสามารถกำหนดค่าได้ตามต้องการ เช่น ข้อความแจ้งเตือน รูปภาพ หรือวิดีโอ ดังภาพ

บรรทัดโค้ดในภาพแสดงการเรียกใช้ฟังก์ชัน LINE.notify เพื่อส่งข้อความไปยัง Line ฟังก์ชันนี้ใช้เพื่อส่งข้อมูลไปยังบัญชี Line ของผู้ใช้

5.2เซ็นเซอร์วัดอุณหภูมิ DHT11

DHT11 เป็นหนึ่งในเซ็นเซอร์ตรวจสอบอุณหภูมิและความชื้นที่ใช้กันทั่วไป มีความแม่นยำมากขึ้นในการให้อุณหภูมิและความชื้นสัมพัทธ์ โดยจะส่งสัญญาณดิจิตอลที่ปรับเทียบแล้วซึ่งจะแยกการอ่านค่าอุณหภูมิและความชื้นออกเป็นสองค่า

ใช้เทคนิคการรับสัญญาณดิจิทัลที่ให้ความน่าเชื่อถือและเสถียรภาพ เซ็นเซอร์ DHT11 มีส่วนประกอบการวัดความชื้นแบบต้านทานและมีส่วนประกอบการวัดอุณหภูมิ NTC ทั้งสองอย่างนี้รวมเข้ากับไมโครคอนโทรลเลอร์ประสิทธิภาพสูง 8 บิต ซึ่งให้การตอบสนองที่รวดเร็ว ความสามารถในการป้องกันการรบกวน และความคุ้มค่า ช่วงอุณหภูมิของเซ็นเซอร์ DHT11 ตั้งแต่ 0°C ถึง 50°C ช่วงความชื้น: 20% ถึง 90%

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

5.3 เซ็นเซอร์อัลตราโซนิก

เมื่อสัญญาณที่ หนุน พินจะถูกสร้างขึ้นโดยบอร์ด เมื่อได้รับสัญญาณที่ขาตรีโกณของเซ็นเซอร์ HC-SR04 คลื่นอัลตราโซนิกจะถูกสร้างขึ้นซึ่งออกจากเซ็นเซอร์และกระทบวัตถุหรือตัวสิ่งกีดขวาง หลังจากกระแทกแล้วจะเด้งกลับมาที่ผิววัตถุเมื่อคลื่นสะท้อนกลับมาที่เซนเซอร์ที่ได้รับสัญญาณจะสิ้นสุดสัญญาณพัลส์ที่ขาสะท้อนจะถูกสร้างขึ้น ESP32 รับสัญญาณ echo pin และคำนวณระยะห่างระหว่างวัตถุกับเซ็นเซอร์โดยใช้ ระยะทาง-สูตร.

:ในโปรเจคนี้เซ็นเซอร์อัลตราโซนิก มีหน้าที่ในการตรวจจับขยะภายในถัง ถ้าหากว่าเซ็นเซอร์ตรวจเจอในระยะที่กำหนดก็จะแจ้งเตือนเข้า Line ว่ามี “ถังขยะเต็ม”

5.4 เซ็นเซอร์ตรวจจับวัตถุ IR

เซ็นเซอร์ IR ทำงานโดยปล่อยลำแสงอินฟราเรดและตรวจจับเมื่อลำแสงสะท้อนไปยังเซ็นเซอร์ เมื่อลำแสงถูกขัดจังหวะ เซ็นเซอร์จะส่งเอาต์พุต a ดิจิทัล สัญญาณ. สัญญาณนี้สามารถใช้เพื่อกระตุ้นให้เกิดการกระทำหรือเหตุการณ์ เช่น การเปิดไฟหรือการเปิดใช้งานมอเตอร์

เซ็นเซอร์ IR มีองค์ประกอบหลักสองส่วน:

  • เครื่องส่งสัญญาณ IR: LED อินฟราเรดเป็นตัวส่งสัญญาณ
  • ตัวรับสัญญาณ IR: โฟโตไดโอดใช้เป็นตัวรับซึ่งหลังจากได้รับรังสีสะท้อนแล้วจะสร้างเอาต์พุต

:ในโปรเจคนี้ใช้เพื่อการตรวจจับขยะที่นำลงถัง

5.5 เซ็นเซอร์ตรวจจับโลหะ LJ12A3-4-Z/BX

Inductive Proximity Sensor Detection Switch NPN DC 6-36V 
พร็อกซิมิตี้เซนเซอร์ (Proximity Sensor) หรือ พร็อกซิมิตี้สวิตซ์ (Proximity Switch) คือ เซนเซอร์ชนิดหนึ่งที่สามารถทำงานโดยไม่ต้องสัมผัสกับชิ้นงานหรือวัตถุภายนอก โดยลักษณะของการทำงานอาจจะส่งหรือรับพลังงานรูปแบบใดรูปแบบหนึ่งดังต่อไปนี้ คือ สนามแม่เหล็ก สนามไฟฟ้า แสง เสียง และ สัญญาณลม ส่วนการนำเซนเซอร์ประเภทนี้ไปใช้งานนั้น ส่วนใหญ่จะใช้กับงานตรวจจับ ตำแหน่ง ระดับ ขนาด และรูปร่าง ซึ่งโดยปกติแล้วจำนำมาใช้แทนลิมิตสวิตซ์ (Limit Switch) เนื่องด้วยสาเหตุของอายุการใช้งานและความเร็วในการตรวจจับวัตถุเป้าหมาย ทำได้ดีกว่าอุปกรณ์ประเภทสวิตซ์ซึ่งอาศัยหน้าสัมผัสทางกล

:ในโปรเจคนี้ใช้เพื่อตรวจจับขยะที่เป็นโลหะ

5.6 Buzzer module

โมดูล Buzzer หรือ โมดูลส่งเสียง ใช้สร้างวงจรเตือนได้ ใช้ไฟเลี้ยง 3.3 – 5V ใช้ TR เบอร์ 9012 ในการขยายสัญญาณ โดยจะส่งเสียงร้องเมื่อมีการจ่ายไฟเข้าที่ขา I/O สามารถนำไปใช้โปรเจ็ค Arduino ได้อย่างหลากหลาย

:ในโปรเจคนี้ใช้เพื่อส่งสัญญาณเมื่อมีวัตถุมาโดนเซ็นเซอร์ตรวจจับวัตถุทั้งสอง

5.7 Servo Motor SG90

Servo คืออุปกรณ์มอเตอร์ ที่สามารถควบคุมการหมุนที่แม่นยำ เซอร์โวชุดนี้มีขนาดเล็กแรงบิด 1.2-1.4 kg สามารถหมุน แบบต่อเนื่อง 180 องศาไปกลับได้

:ในโปรเจคนี้ใช้เพื่อควบคุมแท่นวางถังขยะ หากว่าขยะชนิดนั้นเป็นโลหะก็จะหมุนไปทางซ้าย แต่ถ้าไม่ใช้โลหะก็จะหมุนไปทางขวา

6.ผลการดำเนินการ

Diagramของระบบ เป็นภาพรวมการทำงานของระบบ เพื่อทำให้เข้าใจการทำงานของระบบมากขึ้น

การทำงานของระบบนี้ จะแบ่งออกเป็น 2 ระบบ ตังนี้

1. เมื่อมีขยะลงมาที่แท่นวางตัวเซ็นเซอร์ที่ติดอยู่ก็จะทำงาน และทำการตรวจสอบว่าเป็นโลหะหรือไม่ ถ้าเป็น Servo motor ก็จะทำการควบคุมแท่นวางไปทางด้านซ้าย แต่ถ้าไม่ใช่โลหะ Servo motor ก็จะหมุนไปทางด้านขวา

2. เมื่อมีขยะเต็มฝั่งใดฝั่งหนึ่งตัวเซ็นเซอร์อัลตราโซนิกก็จะทำการแจ้งเตือนเข้า Line และมีเซ็นเซอร์วัดอุณหภูมิติดอยู่ข้างในถังด้วย

#include <DHT.h>
#include <WiFi.h>
#include <TridentTD_LineNotify.h>
#include <ESP32Servo.h> // Include the Servo library

const char* ssid = "BBB";
const char* password = "1212312121";
const char* lineToken = "FTrIMKY9k3NinxFoBJqTygr7akPYCOQmKylx3vfNONB";

const int sensorPin = 12;        // Metal sensor pin
const int irSensorPin = 13;      // MH-SENSOR IR sensor pin
const int buzzerPin = 19;        // Connect the buzzer to pin 25
const int triggerPin1 = 23;      // Ultrasonic sensor 1 trigger pin
const int echoPin1 = 22;         // Ultrasonic sensor 1 echo pin
const int triggerPin2 = 32;      // Ultrasonic sensor 2 trigger pin
const int echoPin2 = 33;         // Ultrasonic sensor 2 echo pin
const int maxDistance = 20;      // Max distance indicating bin full
const int dhtPin = 4;            // DHT11 sensor pin
const int servoPin = 14;         // Servo motor pin

DHT dht(dhtPin, DHT11);
Servo myServo;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  LINE.setToken(lineToken);
  pinMode(sensorPin, INPUT);
  pinMode(irSensorPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(triggerPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(triggerPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  myServo.attach(servoPin); // Attach servo motor to the specified pin
  dht.begin();
}

void activateBuzzer() {
  digitalWrite(buzzerPin, LOW); // เปิดบัสเซอร์
  delay(1000);  // สั่งให้เปิดเสียงบัสเซอร์เป็นเวลา 0.5 วินาที
  digitalWrite(buzzerPin, HIGH); // ปิดบัสเซอร์
}

void loop() {
  int sensorState = digitalRead(sensorPin);
  int irSensorState = digitalRead(irSensorPin);
  Serial.println(sensorState);
  delay(100);
  long duration1, distance1;
  digitalWrite(triggerPin1, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin1, LOW);
  duration1 = pulseIn(echoPin1, HIGH);
  distance1 = (duration1 / 2) / 29.1;

  long duration2, distance2;
  digitalWrite(triggerPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin2, LOW);
  duration2 = pulseIn(echoPin2, HIGH);
  distance2 = (duration2 / 2) / 29.1;

  // ... (Distance measurement with second sensor)

  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  if (sensorState == LOW) {
    Serial.println("ตรวจพบโลหะ");
    myServo.write(180); // Rotate left if metal is detected (adjust angle)
    activateBuzzer();
    delay(500);
  } else {
    Serial.println("ไม่พบโลหะ");
    myServo.write(90); // Rotate right if no metal is detected (adjust angle)
    delay(500);
  }
  
  if (irSensorState == LOW) {
    Serial.println("ตรวจพบวัตถุ");
    myServo.write(0); // Rotate to 0 degrees if an object is detected
    activateBuzzer();
    delay(500);
    } else {
    Serial.println("ไม่พบวัตถุ");
    myServo.write(90); // Rotate to 90 degrees after detection
    delay(500);
  }

  if (distance1 < maxDistance || distance2 < maxDistance) {
    Serial.println("ถังขยะเต็ม");
    LINE.notify("ถังขยะเต็ม");
    delay(500);
  }

  if (!isnan(temperature) && !isnan(humidity)) {
    Serial.print("อุณหภูมิ: ");
    Serial.print(temperature);
    String temp = "อุณหภูมิ: " + String(temperature);
    LINE.notify(temp);
    Serial.print(" ความชื้น: ");
    Serial.print(humidity);
    Serial.println(" %");
    String hum = "  ความชื้น: " + String(humidity); + " %";
    LINE.notify(hum);
    delay(600);
  }

  delay(1000);
}

การทดลอง

การทดสอบเซ็นเซอร์ตรวจจับโลหะและตรวจจับวัตถุทดลองโดยการนำวัตถุมาจ่อหน้าเซ็นเซอร์และ servo motor ทำงานตามโค้ดที่เราเขียนไว้ถ้าหากว่า เป็นโลหะก็จะหมุนไปทางซ้ายแต่ถ้าเป็นวัตถุอื่นๆก็จะหมุนไปทางขวา

ภาพ การทดลองเมื่อนำโลหะ มาจ่อที่เซ็นเซอร์ servo ก็จะหมุน

ภาพ การทดลองเมื่อนำขวดน้ำ มาจ่อที่เซ็นเซอร์ servo ก็จะหมุน

การทดลองเซ็นเซอร์อลัตราโซนิก ต้องติดตั้งไว้ด้านในถังขยะ เพื่อที่จะได้รู้ว่าภายในถังขยะเต็มแล้วหรือไม่และทำการส่งข้อมลูไปยัง Line

ภาพ การทดลองเซ็นเซอร์เมื่อถังเต็ม

ภาพ การแจ้งเตือนผ่าน Line

7.สรุปผลการทดลอง

จากผลการทดลองระบบถังขยะอจัฉริยะสำหรับระบบคัดแยกและตรวจสอบขวดน้ำอัตโนมัติทำงานได้อย่างมีประสิทธิภาพตรงตามเงื่อนไขตามที่ทดลองไว้ได้แก่
1) เซ็นเซอร์ตรวจจับใช้งานได้ดี
2) servo motor ทำงานได้ตามที่ต้องการ
3) ระบบ Line ส่งข้อความเข้าได้ตามปกติ
4) เซ็นเซอร์อัลตราโซนิกใช้ในการเช็ค ภายในถังขยะก็ทำงานตามที่กำหนด

8.ข้อมูลอ้างอิง

[1]MikoPamintuan;Shiela Mae Mantiquilla; Hillary Reyes; MaryJaneSamonte, Date AddedtoIEEE Xplore: 23 April 2020, i-BIN: AnIntelligent Trash Binfor Automatic Waste
Segregationand MonitoringSystem | IEEE ConferencePublication| IEEE Xplore

https://ieeexplore.ieee.org/document/9072787?fbclid=IwAR0vJYe0kWI3N08F2D7ftfRkTilK9vAIptq9t7zGoRDMT1Rm1NhYjS5fLZ8

[2]Wassana D Project,16 มิ.ย.2023,
https://www.youtube.com/watch?v=yq_H1h1xZOU&list=LL&index=8

[3]ciksiti April 06, 2023 14:32

https://ciksiti.com/th/chapters/13078-esp32-with-dht11-temperature-and-humidity-sensor-using-ardui

[4]ciksiti April 14, 2023 19:10

https://ciksiti.com/th/chapters/14168-micropython-hc-sr04-ultrasonic-sensor–esp32-and-thonny-id

[5]ciksiti April 05, 2023 14:06

https://ciksiti.com/th/chapters/12950-ir-module-with-esp32-using-arduino-ide

[6]Cybertice 10 พ.ย. 2566

เซ็นเซอร์ตรวจจับโลหะ ระยะตรวจจับ 4 mm LJ12A3-4-Z/BX Inductive Proximity Sensor Detection Switch NPN DC 6-36V LJ12A34Z/BX – ขาย Arduino อุปกรณ์ Arduino คุณภาพดี ราคาถูก ส่งไว ส่งฟรี (cybertice.com)

[7]Cybertice 16 มิ.ย 2563 21:07

สอนใช้งาน Arduino โมดูลสัญญาณเสียง Active Buzzer Module 3.3 – 5V – ขาย Arduino อุปกรณ์ Arduino คุณภาพดี ราคาถูก ส่งไว ส่งฟรี (cybertice.com)

[8]Cybertice 10 พ.ย. 2566

SG90 Micro Servo Motor แบบ หมุน360องศาต่อเนื่อง – ขาย Arduino อุปกรณ์ Arduino คุณภาพดี ราคาถูก ส่งไว ส่งฟรี (cybertice.com)


วิดีโอนำเสนอการทำงานของถังขยะอัจฉริยะสําหรับระบบแยกขยะและตรวจสอบอัตโนมัติ

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *