Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ)

ผู้เขียนบทความ : นายธนกฤต แกล้วทนงค์ COE#15

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

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

1.ความเป็นมา

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

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

โครงงาน Intelligent Trash Bin for Smart Cities สร้างมาเพื่อความอำนวยความสะดวกสบายในการทิ้งขยะ โครงงาน Intelligent Trash Bin for Smart Cities เกิดขึ้นมาช่วยให้การค้นหาถังขยะและทิ้งขยะง่ายขึ้น

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

2.1เพื่อความสะดวกสบายในการทิ้งขยะ

2.2เพื่อลดปัญหาการสัมผัสเชื้อโรค

2.3เพื่อทราบปริมาณในถังขยะ

3.ขอบเขต

3.1สามารถบอกปริมาณในตัวถังขยะว่าเต็มแล้วหรือยัง

3.2มีการแสดงผลผ่านบนหน้าจอ LCD ว่าตัวถังขยะกำลังเปิดหรือปิดและเต็มแล้วหรือยัง

3.3สามรถนำไปแก้ไขปรับใช้ได้ในอนาคต

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

3.5จะมีเสียง Buzzer ดังออกมาเมื่อสอนตัวฝาถังนั้นเปิด

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

4.1ความสะดวกสบายในการเปิดปิดฝาถังขยะ

4.2สามาบอกตำแหน่งตัวถังขยะได้

4.3สามาบอกปริมาณในตัวถังขยะได้

4.4 สามาเปิดปิดฝาถังได้อัตโนมัติ

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

5.1TridentTD_LineNotify.h5.1TridentTD_LineNotify.h

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

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

Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ) - มทร.ศรีวิชัย (RMUTSV)
if (lastState == HIGH && currentState == LOW){
    Serial.println("Bin is Full XD");
    lcd.setCursor(0, 1); 
    lcd.print("Bin is Full XD ");
    LINE.notify("เต็มแล้วโปรดเอาขยะไปทิ้ง T-T");
    LINE.notify(message);
  }

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

ในบรรทัดโค้ดนี้ ฟังก์ชัน LINE.notifyPicture() จะส่งการแจ้งแจ้งเตือนเมื่อถังขยะเต็มแล้วไปยังตัว Line

5.2TinyGPS++.h

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

Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ) - มทร.ศรีวิชัย (RMUTSV)
void loop() {
  String message = "Location bie : " + String(gps.location.lat(), 6) +"," + String(gps.location.lng(), 6);
  currentState = digitalRead(SENSOR_PIN);
}

5.3ESP32Servo.h

เป็นไลบรารีที่ใช้สำหรับควบคุมตัว Servo โดยให้มันซิงค์หรือทำงานร่วมกับตัว ESP32 ได้นั้นเอง

if (cm < trashThreshold) {
    digitalWrite(BUZZER_PIN, LOW);
    delay(300);
    digitalWrite(BUZZER_PIN, HIGH);
    delay(300);
    digitalWrite(BUZZER_PIN, LOW);
    delay(300);
    digitalWrite(BUZZER_PIN, HIGH);
    delay(300);
    

    myservo.write(160); 
    delay(5000); // 
    myservo.write(0); // 
    
  } 
  else {

    myservo.write(0); 
  }

5.4LiquidCrystal_I2C.h

เป็นไลบรารี่ที่ใช้ควบคุมตัวหน้าจอ LCD

Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ) - มทร.ศรีวิชัย (RMUTSV)
if (cm < trashThreshold) {

    Serial.print("Bin is Open ;) ");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Bin is Open ;) ");

     } 

  else {
    Serial.print("Bin is Close :D");

    lcd.setCursor(0, 0); 
    lcd.print("Bin is Close :D ");
 
  }

  if (lastState == HIGH && currentState == LOW){
    Serial.println("Bin is Full XD");
    lcd.setCursor(0, 1); 
    lcd.print("Bin is Full XD ");
  }
  
  else /*(lastState == LOW && currentState == HIGH)*/{
    Serial.println("Bin is Not Full");
    lcd.setCursor(0, 1);
    lcd.print("Bin is Not Full");
  }

5.5ultrasonic sensor

ใช้สำหรับการเปิดตรวจจับระยะ โดยการตัวจับระยะที่ตั้งไว้สำหลับการเปิดตัวถังฝาขยะนั้นคือ 25 เซนติเมตร

Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ) - มทร.ศรีวิชัย (RMUTSV)

const int trashThreshold = 25; // ระยะทางที่ถือว่าถังขยะเต็ม (เซนติเมตร)

void setup() {
pinMode(BUZZER_PIN, OUTPUT);
}

if (cm < trashThreshold) {
digitalWrite(BUZZER_PIN, LOW);
delay(300);
digitalWrite(BUZZER_PIN, HIGH);
delay(300);
digitalWrite(BUZZER_PIN, LOW);
delay(300);
digitalWrite(BUZZER_PIN, HIGH);
delay(300);


Serial.print(“Bin is Open 😉 “);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Bin is Open 😉 “);
myservo.write(160);
delay(5000); //
myservo.write(0); //

}
else {
Serial.print(“Bin is Close :D”);
lcd.clear(); //
lcd.setCursor(0, 0);
lcd.print(“Bin is Close 😀 “);
myservo.write(0);
}

if (lastState == HIGH && currentState == LOW){
Serial.println(“Bin is Full XD”);
lcd.setCursor(0, 1);
lcd.print(“Bin is Full XD “);
LINE.notify(“เต็มแล้วโปรดเอาขยะไปทิ้ง T-T”);
LINE.notify(message);
}


}

Serial.print(“Distance: “);
Serial.print(cm);
Serial.println(” cm”);
delay(100);

}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}

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

Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ) - มทร.ศรีวิชัย (RMUTSV)

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

โดยการทำงานจะเริ่มต้นจากเมื่อเอามือมาบังไว้ที่ตัว Ultrasonic sensor หลังจากนั้น Servo motorr จะทำการเปิดและปิดตัวฝาถังหลังจากนั้นแสดงผลผ่านตัวหน้าจอว่ากำลังเปิดตัวฝาถังและจะมีตัว IR Infrared ทำหน้าที่ตรวจจับปริมาณในตัวถังขยะและแสดงข้อมูลผ่านตัวหน้าจอ LCD ว่าตัวถังขยะนั้นเต็มแล้ว แล้วตัวโมดูล GPS ทำหน้าที่ส่งตำแหน่งตัวถังขยะ โดย IR Infrared และ GPS นั้นจะการส่งข้อมูลและข้อความมายังตัว Line

โค้ดการทำงานเปิดปิดตัวฝาถังขยะ

if (cm < trashThreshold) {
    digitalWrite(BUZZER_PIN, LOW);
    delay(300);
    digitalWrite(BUZZER_PIN, HIGH);
    delay(300);
    digitalWrite(BUZZER_ PIN, LOW);
    delay(300);
    digitalWrite(BUZZER_PIN, HIGH);
    delay(300);
    
    Serial.println("Power Off");
    Serial.print("Bin is Open ;) ");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Bin is Open ;) ");
    myservo.write(160); 
    delay(5000); // 
    myservo.write(0); // 
    
  } 
  else {
    Serial.print("Bin is Close :D");
    lcd.clear(); // 
    lcd.setCursor(0, 0); 
    lcd.print("Bin is Close :D ");
    myservo.write(0); 
  }

การทดลอง

Code การทำงานทั้งหมดของตัวถังขยะ

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <TinyGPS++.h>
#include <TridentTD_LineNotify.h>

#define SENSOR_PIN 18
#define BUZZER_PIN 23
#define RXPin (16)
#define TXPin (17)

const char* ssid = "Tanakrit";
const char* password = "12345678";
const char* lineToken = "4XDCtlSCdaVFoE59xpBmQpIK1UTsGlTfRtEMRYvdzYl";\
static const uint32_t GPSBaud = 9600;

TinyGPSPlus gps;
Servo myservo; //ประกาศตัวแปรแทน Servo
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int pingPin = 13;
const int inPin = 12;
const int trashThreshold = 25; // ระยะทางที่ถือว่าถังขยะเต็ม (เซนติเมตร)
int lastState = HIGH; 
int currentState; 

void setup() {
  WiFi.begin(ssid, password);
  LINE.setToken(lineToken);
  pinMode(BUZZER_PIN, OUTPUT);
  myservo.attach(33); // D22 (กำหนดขาควบคุม Servo)
  Serial.begin(9600);
  lcd.init(); // กำหนดให้ใช้จอ LCD
  lcd.backlight(); // เปิดไฟหน้าจอ LCD
  lcd.clear(); // ล้างหน้าจอ LCD
  pinMode(SENSOR_PIN, INPUT);
  Serial.begin(GPSBaud, SERIAL_8N1, RXPin, TXPin, false);
  Serial.println(TinyGPSPlus::libraryVersion());
}

void loop() {
  String message = "Location bie : " + String(gps.location.lat(), 6) +"," + String(gps.location.lng(), 6);
  currentState = digitalRead(SENSOR_PIN);
  
  long duration, cm;
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(18);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);
  pinMode(inPin, INPUT);
  duration = pulseIn(inPin, HIGH);

  cm = microsecondsToCentimeters(duration);

  Serial.print("Distance: ");
  Serial.print(cm);
  Serial.println(" cm   ");
  
  if (cm < trashThreshold) {
    digitalWrite(BUZZER_PIN, LOW);
    delay(300);
    digitalWrite(BUZZER_PIN, HIGH);
    delay(300);
    digitalWrite(BUZZER_PIN, LOW);
    delay(300);
    digitalWrite(BUZZER_PIN, HIGH);
    delay(300);
    
    Serial.print("Bin is Open ;) ");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Bin is Open ;) ");
    myservo.write(160); 
    delay(5000); // 
    myservo.write(0); // 
    
  } 
  else {
    Serial.print("Bin is Close :D");
    lcd.clear(); // 
    lcd.setCursor(0, 0); 
    lcd.print("Bin is Close :D ");
    myservo.write(0); 
  }

  if (lastState == HIGH && currentState == LOW){
    Serial.println("Bin is Full XD");
    lcd.setCursor(0, 1); 
    lcd.print("Bin is Full XD ");
    LINE.notify("เต็มแล้วโปรดเอาขยะไปทิ้ง T-T");
    LINE.notify(message);
  }
  
  else /*(lastState == LOW && currentState == HIGH)*/{
    Serial.println("Bin is Not Full");
    lcd.setCursor(0, 1);
    lcd.print("Bin is Not Full");
  }
  
  Serial.print("Distance: ");
  Serial.print(cm);
  Serial.println(" cm");
  delay(100);
  
}

void sendLocationToLine() {
  String message = "Location bie : " + String(gps.location.lat(), 6) +"," + String(gps.location.lng(), 6);
  LINE.notify(message);
}

long microsecondsToCentimeters(long microseconds) {
  return microseconds / 29 / 2;
}

การทดลองส่วนที่ 1 คือ การทดลองในส่วนการแสดงผลผ่านตัวหน้าจอ LCD

Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ) - มทร.ศรีวิชัย (RMUTSV)

ผลการทดลองที่ได้

Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ) - มทร.ศรีวิชัย (RMUTSV)

การทดลองที่ 2 การส่งการแจ้งเตือนมายัง Line

Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ) - มทร.ศรีวิชัย (RMUTSV)

ผลการทดลองที่ได้

Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ) - มทร.ศรีวิชัย (RMUTSV)

7.สรุปผลการทดลองและข้อเสนอแนะ

สรุปผลการทดลอง การทำงานของตัวถังขยะแสดงผลผ่านตัวจอ LCD นั้นจะมีการแสดงข้อความ 2 อย่างคือการเปิดและปิดตัวฝาถังขยะ,เตือนว่าตัวถังขยะนั้นเต็มแล้ว แล้วก็ยังมีการส่งการแจ้งเตือนมายังตัวแอพ Line โดยจะแจ้งเตือนอยู่ 2 อย่างคือ ส่งตำแหน่งตัวถังขยะ,เตือนว่าตัวถังขยะนั้นเต็มแล้ว

ข้อเสนอะแนะ

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

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

8.1 ต้นฉบับ A. Mohamed, Y. ElSayed, H. Mahasneh, WM Rohouma และ AA Otoom, “ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ” การประชุมนานาชาติครั้งที่ 1 เรื่องนวัตกรรมขั้นสูงในเมืองอัจฉริยะ ( ICAISC) ประจำปี 2023เจดดาห์ ซาอุดีอาระเบีย 2023 สืบค้นจาก

https://ieeexplore.ieee.org/document/10085313?fbclid=IwAR0nMLZg3eJ3ZagJ5fIKki9mAjRdfBz706K1082ZF-WBFKYYvWCrtJE5Ews

8.2 Servo motorr สอนใช้งาน ESP32 ES08MA Servo หมุนแบบ 0-180 องศา สืบค้นจาก

https://www.cybertice.com/article/276/%E0%B8%AA%E0%B8%AD%E0%B8%99%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99-esp32-es08ma-servo-%E0%B8%AB%E0%B8%A1%E0%B8%B8%E0%B8%99%E0%B9%81%E0%B8%9A%E0%B8%9A-0-180-%E0%B8%AD%E0%B8%87%E0%B8%A8%E0%B8%B2

8.3 LCD สอนใช้งาน ESP32 2004 LCD 20×4 โมดูลจอแสดงผล LCD พร้อม I2C Interface สืบค้นจาก

https://www.cybertice.com/article/718/%E0%B8%AA%E0%B8%AD%E0%B8%99%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99-esp32-2004-lcd-20×4-%E0%B9%82%E0%B8%A1%E0%B8%94%E0%B8%B9%E0%B8%A5%E0%B8%88%E0%B8%AD%E0%B9%81%E0%B8%AA%E0%B8%94%E0%B8%87%E0%B8%9C%E0%B8%A5-lcd-%E0%B8%9E%E0%B8%A3%E0%B9%89%E0%B8%AD%E0%B8%A1-i2c-interface

วิดีโอนำเสนอ Intelligent Trash Bin for Smart Cities(ถังขยะอัจฉริยะสำหรับเมืองอัจฉริยะ)

You may also like...