หุ่นยนต์ทำความสะอาดอัตโนมัติ

ผู้เขียนบทความ : นายณัฐดนัย ตั้งวงศ์งาม coe:15 165404140013

1. ความเป็นมาและความสำคัญของปัญหา

ปัจจุบันต้องยอมรับว่าเวลาเป็นสิ่งที่มีค่าอย่างมากสำหรับมนุษย์ มนุษย์เรานั้นมีเรื่องมากมายในแต่ละวันในการต้องแก้ไขปัญหาแม้แต่การดำรงชีวิตปัจจุบันเรื่องปัญหาภายในบ้านเรื่องทำความสะอาดก็เป็นปัญหาในการหาเวลาที่จะทำจึงเป็นปัญหาเรื่องที่อยู่อาศัยสกปรกไม่น่าอยู่แต่ถ้าหากเรามีเครื่องทุ่นแรงมาช่วยทำความสะอาดแทนเราจะทำให้ชีวิตของเราสะดวกขึ้นเพราะ ณ ปัจจุบันมีการเอา Internet of thing (Iot) มาใช้จนเกิดเป็นหุ่นยนต์ทำความสะอาดที่จะเป็นเครื่องทุ่นแรงให้กับมนุษย์

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

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

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

2.1 เพื่อความสะอาดภายในอาคารที่อยู่อาศัย

2.2 เพื่อสะดวกสบายลดภาระผู้ใช้งาน

2.3 เพื่อนำความรู้ที่ศึกษาและเข้าใจมาทำชิ้นงานให้เกิดประโยนช์

3. ขอบเขต

3.1 สามารถหลบหลีกสิ่งกีดขวางได้หลบหลีกสิ่งกีดขวางได้และขับเคลื่อนอัตโนมัติ

3.2 สามารถทำความสะอาดถูพื้นในพื้นที่ในอาคารหรือห้องได้

3.3 สามารถเปิดระบบน้ำสามารถพ่นมาเองได้และตั้งดีเลย์

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

4.1 ลดภาระงานบ้านของผู้ใช้ในชีวิตประจำวัน

4.2 ความสะดวกสะบายของผู้ใช้

4.3 ได้ใช้ความรู้และพัฒนา ESP32

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

5.1 โมดูล HC-SR04

โมดูลอัลตร้าโซนิคนี้เป็นอุปกรณ์ใช้วัดระยะทางโดยไม่ต้องมีการสัมผัสกับตำแหน่งที่ต้องการวัด วัดได้ตั้งแต่ 2 cm ถึง 400 cm โดยส่งสัญญาณอัลตร้าโซนิคความถี่ 40 kHz ไปที่วัตถุที่ต้องการวัดและรับสัญญาณที่สะท้อนกลับมา พร้อมทั้งจับเวลาเพื่อนำมาใช้ในการคำนวณระยะทาง

คุณสมบัติของโมดูล
1. แรงดันที่ใช้ในการทำงาน 5V
2. กระแสไฟฟ้าที่ใช้ 15mA
3. คลื่นความถี่ในการทำงาน 40kHz
4. ระยะสูงสุดที่สามารถวัดได้ 4 m (400 cm)
5. ระยะต่ำสุดที่สามารถวัดได้ 0.02 m (2 cm)
6. ความแม่นยำ ±3mm – องศาในการวัด 15 องศา
7. Trigger Input Signal : 10us TTL Pulse

ตัวอย่าง Code

#include <HCSR04.h>
HCSR04 Distance(32, 33);  //ขาที่ต่อ HCSR04 (trig pin , echo pin)
void loop() {
  float distance = Distance.dist();            //อ่านค่าระยะทาง
  Serial.println(distance);                    //แสดงผ่าน Serial Monitor
  if ((distance > 28.0) || (distance == 0)) {  //ถ้าระยะมากกว่า 28 ซม.
    

5.2 โมดูล 8-bit bidirectional voltage level shifter high speed full duplex bidirectional 8-way level conversion

8-bit bidirectional Voltage conversion board โมดูลแปลงสัญญาณลอจิก 5V เป็น 3.3V 8 ช่อง ตัวอย่างการใช้งาน เช่น ใช้ ESP8266 ใช้ไฟ 3.3V กับ บอร์ด Arduino Uno R3 ใช้ไฟ 5V ซึ่งจะทำให้บอร์ดใช้งานได้อย่างปลอดภัยและคุยกันรู้เรื่อง

อุปกรณ์เชื่อมต่อสัญญาณ 3.3V เข้ากับระบบ 5V ตัวเปลี่ยนระดับตรรกะแบบสองทิศทางเป็นอุปกรณ์ขนาดเล็กที่ลดสัญญาณ 5V เป็น 3.3V ได้อย่างปลอดภัยในขณะที่เพิ่ม 3.3V เป็น 5V ตัวเปลี่ยนระดับนี้ยังเหมาะสำหรับอุปกรณ์ 2.8V และ 1.8V ข้อแตกต่างที่ระหว่างตัวเปลี่ยนระดับลอจิกนี้กับเวอร์ชันก่อนหน้าก็คือ คุณสามารถตั้งค่าแรงดันไฟฟ้าสูงและต่ำได้(แรงดันสูงและแรงดันต่ำ) ที่ระบบใช้ ไฟฟ้าแรงสูง (เช่น 5V) ไปที่พิน “HV”, แรงดันไฟฟ้าต่ำ (เช่น 3.3V) ถึง “LV”, กราวด์จากระบบไปที่พิน “GND”

5.3 โมดูล MOSFET Electronic switch control pulse trigger optocoupler
โมดูลควบคุมความเร็วมอเตอร์ หรี่ไฟ เปิด/ปิดสวิตช์ สำหรับ Arduino แบบแยกกราวน์ Isolated ด้วย MOSFET เบอร์ F5305S ใช้ไฟเลี้ยง 3-12V ควบคุมไฟเอาต์พุตที่ 5-36V กระแส 5A  แบบไม่ต้องติดแผ่นระบายความร้อน ถ้ามากกว่า 5A ต้องติดแผ่นระบายความร้อนเพิ่ม สามารถขับได้สูงสุด 20W

  • ตัวอย่าง Code
pinMode(PUMP_Pin, OUTPUT);   //กำหนดขา PUMP_Pin เป็นโหมด OUTPUT
  ledcSetup(1, 50, 8);         //กำหนด PWM ช่อง 1 ความถี่ 50 Hz ที่ความละเอียด 8 bit
  ledcAttachPin(PUMP_Pin, 1);  //ให้ PUMP_Pin ใช้ความถี่ที่ช่อง 1

  delay(1000);
}
 if (((millis() - task2s) > 2000) && (distance > 50)) {  //ทุกๆ 2 วินาที และระยะทางมากกว่า 50 ซม.

      task2s = millis();
      ledcWrite(1, 6);  //2-10    //ให้จ่ายน้ำด้วยความแรง 6 ( 2 - 10)
      taskoff = millis();
      pump = true;    //บันทึกว่าเปิดปั้มแล้ว
    }
  } else {    //ถ้ามีสิ่งกีดขวาง

    for (int i = 180; i >= 0; i--)  //ค่อยๆ หยุด
    {
      ledcWrite(0, i);  //0-255
      delay(2);
    }

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

ผังการทำงานของระบบ

การออกแบบบอร์ด PCB

เริ่มจากการออกแบบรูปแบบวงจร PCB ในโปรแกรม Easyeda

จัดสายไฟของบอร์ด จากนั้นทำปริ้นในกระดาษโฟโต้รีดเข้ากับบอร์ดทองแดง กัดด้วยน้ำยากัดทองแดง ต่อไปคือการล้างบอร์ด ต่อด้วยการเจาะบอร์ดตามขนาดของ Terminal จากนั้นบัดกรีบอร์ด และ ทาน้ำยาเคลือบ

รูปแบบวงจรหุ่นยนต์

  • วิธีการใช้งานหุ่นยนต์

ส่วนการทำงานของระบบหุ่นยนต์

การทำงานของหุ่นยนต์ เริ่มจากการเปิดสวิตเพื่อเริ่มการทำงานจากนั้นหุ่นยนต์จะเริ่มเดินหน้าเรื่อยๆ และ เซนเซอร์จะวัดระยะทางด้านหน้าเรื่อยๆ เซนเซอร์จะตรวจจับ ในระยะ 28 เซนติเมตร

void loop() {
  float distance = Distance.dist();            //อ่านค่าระยะทาง
  Serial.println(distance);                    //แสดงผ่าน Serial Monitor
  if ((distance > 28.0) || (distance == 0)) {  //ถ้าระยะมากกว่า 28 ซม.
    ledcWrite(0, 180);                         //0-255   //ให้หุ่นยนต์เดินหน้าด้วยความเร็ว 180 (0 - 255)
    digitalWrite(LIN1, HIGH);
    digitalWrite(LIN2, LOW);
    digitalWrite(RIN1, HIGH);
    digitalWrite(RIN2, LOW);

ถ้าเซนเซอร์ตรวจจับสิ่งกีดขวางจะทำการถถอยหลังและเลี้ยวไปทางที่สามารถไปต่อได้

else {    //ถ้ามีสิ่งกีดขวาง

    for (int i = 180; i >= 0; i--)  //ค่อยๆ หยุด
    {
      ledcWrite(0, i);  //0-255
      delay(2);
    }

    digitalWrite(LIN1, LOW);
    digitalWrite(LIN2, HIGH);
    digitalWrite(RIN1, LOW);
    digitalWrite(RIN2, HIGH);       //ถอยหลัง
    for (int i = 0; i <= 200; i++)  //ค่อยๆ เร่ง
    {
      ledcWrite(0, i);  //0-255
      delay(2);
    }
    delay(200);         //หน่วงเวลา 0.2 วินาที
    for (int i = 200; i >= 0; i--)  //ค่อยหยุด
    {
      ledcWrite(0, i);  //0-255
      delay(1);
    }

    digitalWrite(LIN1, HIGH);
    digitalWrite(LIN2, LOW);
    digitalWrite(RIN1, LOW);
    digitalWrite(RIN2, HIGH);       //เลี้ยว
    for (int i = 0; i <= 255; i++)  //ค่อยๆ เร่ง
    {
      ledcWrite(0, i);  //0-255
      delay(2);
    }
    while (Distance.dist() < 50) {  //เลี้ยวไปเรื่อยๆ ถ้ามีวัตถุขว้างทางอยู่
      delay(200);
    }
    for (int i = 255; i >= 0; i--)  //ค่อยๆ หยุด
    {
      ledcWrite(0, i);  //0-255
      delay(1);
    }

ส่วนการทำงานของระบบปั๊มน้ำ

การทำงานของปั๊มน้ำ เริ่มการทำงานจากการวัดระยะของเซนเซอร์ เมื่อเซนเซอร์ตรวจจับเจอสิ่งกีดขวางในระยะ 50 เซนติเมตร ถ้าระยะมากกว่า 50 เซนติเมตรจะจ่ายน้ำทุกๆ 2 วินาที แต่ ถ้าระยะน้อยกว่า 50 เซนติเมตรจะหยุดจ่ายน้ำทันที

if (((millis() - task2s) > 2000) && (distance > 50)) {  //ทุกๆ 2 วินาที และระยะทางมากกว่า 50 ซม.

      task2s = millis();
      ledcWrite(1, 6);  //2-10    //ให้จ่ายน้ำด้วยความแรง 6 ( 2 - 10)
      taskoff = millis();
      pump = true;    //บันทึกว่าเปิดปั้มแล้ว
    }
  } else {    //ถ้ามีสิ่งกีดขวาง

    for (int i = 180; i >= 0; i--)  //ค่อยๆ หยุด
    {
      ledcWrite(0, i);  //0-255
      delay(2);
    }

7. การทดลอง

การทดลองนั้นจะแบ่งเป็น 2 ส่วน คือ

1 การทำงานของหุ่นยนต์ เซนเซอร์ ไดรเวอร์และมอเตอร์

2 การทดสอบระบบการจ่ายน้ำของปั๊มน้ำ

7.1 การทดลองทำงานของหุ่นยนต์

     การทดลองเริ่มจากส่วนของโค้ดที่ลง ESP32 และผลการทำงานของเซนเซอร์ ผลที่ส่งไปให้ไดรเวอร์การทำงานตามคำสั่งของระบบ

7.2 การทดสอบระบบการจ่ายน้ำของปั๊มน้ำ

    การทดสอบที่จะทดสอบจาก การจ่ายน้ำตามระยะทางและเจอสิ่งกีดขวางแล้วจะหยุดการทำงาน

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

ผลจากการปฎิบัติการทำงานของหุ่นยนต์ทำงานได้อย่างหน้าพึงพอใจตามเงื่อนไขที่เคยตั้งไว้ ได้แก่

1. หุ่นยนต์สามารถขับเคลื่อนได้อย่างอัตโนมัติตามเซนเซอร์

2. ระบบน้ำสามารถจ่ายน้ำได้อย่างมีประสิทธิภาพ

3. หุ่นยนต์สามารถทำงานได้จริงผลทำได้อย่างพึงพอใจ

สิ่งที่ต้องตัดออกของหุ่นยนต์

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

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

8.1 HC-SR04

[1] Ken RobotSiam. การใช้งาน เซนเซอร์ Ultrasonic     Module HC-SR04. [สืบค้นวันที่ 21 ตุลาคม 2565] : จากhttps://robotsiam.blogspot.com/2016/09/ultrasonic-module-hc-sr04.html

[2] gamegine. HCSR04-ultrasonic-sensor. [สืบค้นวันที่ 21 ตุลาคม 2565] : จากhttps://github.com/gamegine/HCSR04-ultrasonic-sensor-lib

8.2 MOSFET Electronic switch control

[1] AllNewStep. MOSFET Electronic switch control pulse trigger optocoupler โมดูลขับมอเตอร์ หรี่ไฟ LED แบบ PWM 5-36V 5A. [สืบค้นวันที่ 21 ตุลาคม 2565] : จาก https://www.allnewstep.com/product/3282/mosfet-electronic-switch-control-pulse-trigger-optocoupler

8.3 8-bit bidirectional voltage logic level shifter high speed full

[1] AllNewStep. 8-bit bidirectional voltage logic level shifter high speed full duple level conversion. [สืบค้นวันที่ 21 ตุลาคม 2565] : จาก https://www.allnewstep.com/product/3193/8-bit-bidirectional-voltage-logic-level-shifter-high-speed-full-duple-level-conversion

คลิปอธิบาย YouTube

You may also like...

ใส่ความเห็น

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