ผู้เขียนบทความ : นายณัฐดนัย ตั้งวงศ์งาม 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