1. บทนำ แนวคิด ความสำคัญ และความเป็นมาของโครงการ
– โปรเจคเป็นการสร้างหุ่นหลบหลีกและตรวจสอบวัตถุโลหะ ซึ่งเราได้สร้างมันขึ้นเพื่อเข้าถึงพื้นที่ที่สลับซับซ้อน ด้วยเป็นหุ่นที่มีประสิทธิภาพใช้ได้ในพื้นที่ที่อันตรายโดยไม่ทำให้มนุษย์มีความเสี่ยงแต่อย่างใด หุ่นสามารถตรวจสอบในพื้นที่ที่เข้าถึงได้ยากๆ และคับแคบได้อย่างมีประสิทธิภาพปัจจุบันนี้ความก้าวหน้าทางอุตสาหกรรมพัฒนาไปรวดเร็ว มีการติดตั้งเครื่องจักรที่สลับซับซ้อนที่ยากแก่การตรวจและตรวจสอบวัตถุของของมนุษย์ และงานสำรวจในบางประเภทที่มนุษย์ไม่สามารถเข้าไปสำรวจหรือตรวจสอบได้ เช่น การตรวจสอบในโรงงานไฟฟ้านิวเคลียร์ ทางเราปฏิบัติการพัฒนาหุ่นยนต์ภาคสนาม (FIBO) ได้ เล็งเห็นถึงปัญหานี้ซึ่งดำเนินการวิจัยและพัฒนาหุ่นยนต์ตรวจสอบ (Inspection Robot) ขึ้นมา เพื่อให้เป็นเครื่องมือในการตรวจสอบวัตถุอันตรายแก่มนุษย์
2.วัตถุประสงค์และเป้าหมาย
ทำการวิจัยและจัดสร้างกลไกหุ่นยนต์ที่มีประสิทธิภาพ ใช้ในงานตรวจสอบพื้นที่ ๆ เป็นอันตรายต่อมนุษย์หรือพื้นที่ๆ สลับซับซ้อนเข้าถึงได้ยาก
3.รายละเอียดของการพัฒนา
3.1 เนื้อเรื่องย่อ ภาพประกอบ แบบจำลอง
– แบบจำลองที่ใช่ในการพัฒนาหุ่นต้นแบบระบบการตรวจสอบหาวัตถุโลหะนั้นมีความจำเป็นอย่างยิ่งสำหรับการหาตรวจสอบวัตถุโลหะ
แบบจำลอง
ทฤษฎีที่เกี่ยวข้อง ตัวอย่างโปรแกรม
3.2 ระบบการตรวจสอบหาวัตถุโลหะนั้นมีความจำเป็นอย่างยิ่งสำหรับการหาตรวจสอบ เพื่อวัตถุประสงค์ในการบ่งบอกตำแหน่งวัตภุที่แท้จริงในพิกัดและขอบเขตโดยรวมทั้งหมดและยังส่งผลต่อความถูกต้องในการหลบหลีกสิ่งกีดขวางโดยหาโลหะ ดังนั้นจะนำเสนอเทคนิคการตรวจสอบและหลบหลีกสิ่งกีดขวางซึ่งมีขั้นตอนดังนี้ 1. ขั้นตอนการแปลงค่าข้อมูลจากเซ็นเซอร์ให้อยู่ในพิกัดที่ถูกต้อง 2. ขั้นตอนการหาตำแหน่งโลหะ โดยทำการหลบหลีกเพื่อหาและตรวจสอบวัตถุโลหะ
3.3 เครื่องมือในการพัฒนา
- Arduino R3
- Motor Driver shield มอเมอร์
- Wheel (4x)
- TT Gear Motor (4x)
- Servo motor
- Battery Panasonic Alkaline 1.5V (6x)
- Battery Panasonic neo 9V
- Male and female jumpe wire
- Switch
- Micro servo
3.4 แสดงการต่อวงจรของ Arduino และ Sensors พร้อมคำอธิบาย
VCC เข้า 5V Trigger เข้า PIN A4
Echo เข้า PIN A5 GND เข้า GND
Motor 1 เข้า M1 Motor 2 เข้า M2
Motor 3 เข้า M3 Motor 4 เข้า M4
ภาพงานประกอบเสร็จสมบูรณ์
3.5 รายละเอียดโปรแกรมที่พัฒนาในเชิงเทคนิค ให้เป็นส่วนๆ การทำงาน โดยให้แสดง
3.5.1 Flowchart
https://drive.google.com/drive/folders/1gEygiPqhXXhCfFS3kF4uwtS5Ws-x6EkI?usp=sharing
3.5.2
https://drive.google.com/drive/folders/1gEygiPqhXXhCfFS3kF4uwtS5Ws-x6EkI?usp=sharing
3.5.3 Source Code ที่นำมาพัฒนา
– http://www.mertarduino.com/arduino-obstacle-avoiding-robot-car-4wd/2018/11/22/
3.6 ขอบเขตและข้อจำกัดของโปรแกรมที่พัฒนา
-โปรแกรมหุ่นมีระยะขอบเขตของการตรวจสอบวัตถุโลหะเพียงในระยะของตัวหุ่นซึ่งมีระยะประมาณ 10 cm. เมื่อหุ่นไปอยู่ในระยะวัตถุตรวจจพบจะส่งสัญญานการเตือนในตัวหุ่น ภายระยะขอบเขตนั้น ๆ โดยเป็นข้อจำกัดของตัวหุ่นและโปรแกรมบอร์ด
- กลุ่มผู้ใช้โปรแกรม พร้อมผลการประเมินจากผู้ใช้
– ต่อการเรียนรู้ ทำให้ผู้เรียนเกิดทักษะและได้รับประสบการณ์ที่ใกล้เคียงกับงานจริง เมื่อเวลาประสบปัญหา
จริงจะทำให้สามารถแก้ไขและป้องกันความเสียหายอันเกิดจากข้อผิดพลาดในการทำงาน
การศึกษาซอฟต์แวร์ที่ใช้จำลองการทำงานของหุ่นยนต์ โดยผู้ใช้มีปฏิสัมพันธ์ต่อโปรแกรมขณะ
เรียนรู้และเป็นโปรแกรมแบบ Open Source ที่อนุญาตให้ผู้ใช้เพิ่มเติมได้โดยไม่มีลิขสิทธิ์ พบว่า
โปรแกรมซึ่งพัฒนาขึ้น เป็นซอฟต์แวร์ที่อนุญาตให้ผู้ใช้สามารถปรับเพิ่มฟังก์ชั่นการทำงานได้ ผู้เรียนสามารถเขียนภาพสามมิติในลักษณะรูปทรงเรขาคณิตพื้นฐานหรืออื่น ๆ เพื่อประกอบเป็นโครงหุ่นยนต์ในการเรียนจลนศาสตร์ สามารถทดสอบและสังเกตการ เคลื่อนที่ของหุ่นยนต์ได้ โดยการเขียนโปรแกรม Arduino ด้วยรูปทรงเรขาคณิตพื้นฐานประกอบโครงสร้างตามหลักจลศาสตร์ได้หุ่นยนต์ มีตัวเชื่อมเป็นตัวรับเซ็นเซอร์แบบ Ultrasonic HC-SR04 ควบคุมคลื่นเสียงย่านอัลตร้าโซนิค นั้นเป็นคลื่นที่มีทิศทางที่แน่นอน ทำให้เราสามารถนำไปใช้งานได้หลายอย่าง เช่น นำไปใช้ในเครื่องควบคุมระยะไกล เครื่องล้างอุปกรณ์โดยการทำให้น้ำสั่นที่ความถี่สูง เครื่องวัดความหนาของวัตถุโดยสังเกตระยะเวลาที่คลื่นสะท้อนกลับมา เครื่องวัดความลึกและทำแผนที่ใต้ท้องทะเล โดยความถี่ที่นำมาใช้งานนั้นจะขึ้นอยู่กับตัวกลาง
- ผลของการทดสอบโปรแกรม ให้ใส่รูปแสดงการทำงานของชิ้นงาน และใส่ตารางผลการทดลอง
สรุปผลการทดลอง
- สามารถ Compile code และ Born เข้า Board ได้สำเร็จ เมื่อการทำงานของบอร์ด Arduino ทำงาน Sensor และชิ้นส่วนต่าง ๆ ก็ทำงานเป็นไปตามปกติ แต่ต้องปรับแก้โปรแกรมโค้ดของตัวหุ่นนิดหน่อยจึงจะสมบูรณ์
- ปัญหาอุปสรรค
– การหาอุปกรณ์เป็นไปได้ยากลำบาก
-หุ่นยนต์ไม่มีความเสถียรในการทำงานตามคำสั่ง
- แนวทางในการพัฒนาต่อในอนาคต สามารถประยุกต์ใช้ร่วมกับงานอื่น ๆ ได้อย่างไร
– หุ่นยนต์หลบหลีกสิ่งกีดขวางโดยหาวัตถุโลหะ ยังสามารถพัฒนาไปได้อีกเพื่อนำไปประยุกต์ใช้งานได้จริง และควรปรับปรุงได้ง่ายต่อการใช้งานมันสามารถต่อยอดไปได้อีกเรื่อย ๆในการพัฒนาต่อควรติดตั้งเซ็นเซอร์เพิ่มด้านหลังหรือที่ที่เหมาะสมเพื่อเพิ่มประสิทธิภาพของหุ่นยนต์
– การพัฒนาต่ออาจจะใช้ในการตรวจสอบพื้นที่ที่อันตรายหรือวัตถุนิวเคลียร์
– สามารถพัฒนาแผงวงจรได้วอีก เพื่อเพิ่มขอบเขตในการตรวจสอบเพิ่มขึ้นในบริเวณนั้นได้
- ข้อสรุปและข้อเสนอแนะ
– หุ่นยนต์ชนเข้ากับขอบของสนามไม่ยอมเลี้ยว ควรจะปรับการทำงานของโค้ด เพื่อให้มีโปรแกรมที่ซับซ้อนกว่านี้
– การทำงานของเซ็นเซอร์ไม่เป็นไปตามที่ต้องการซึ่งเซ็นเซอร์ทำงานช้า ควรจะพัฒนาให้เซ็นเซอร์พร้อมกับการทำงานของตัวดปรแกรม
- แหล่งที่มาอ้างอิง
– http://www.mertarduino.com/arduino-obstacle-avoiding-robot-car-4wd/2018/11/22/
Clip D.I.Y
Clip การทดลอง
Code Arduino
#include <AFMotor.h>
#include <Servo.h>
#include <NewPing.h>
#define TRIG_PIN A4
#define ECHO_PIN A5
#define MAX_DISTANCE 500
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 40
#define COLL_DIST 30
#define TURN_DIST COLL_DIST+20
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor leftMotor1(1, MOTOR12_1KHZ);
AF_DCMotor leftMotor2(2, MOTOR12_1KHZ);
AF_DCMotor rightMotor1(3, MOTOR34_1KHZ);
AF_DCMotor rightMotor2(4, MOTOR34_1KHZ);
Servo myservo;
int leftDistance, rightDistance;
int curDist = 0;
String motorSet = “”;
int speedSet = 0;
void setup() {
myservo.attach(10);
myservo.write(90);
delay(1000);
}
void loop() {
myservo.write(90);
delay(90);
curDist = readPing();
if (curDist < COLL_DIST) {changePath();}
moveForward();
delay(500);
}
void changePath() {
moveStop();
myservo.write(36);
delay(500);
rightDistance = readPing();
delay(500);
myservo.write(144);
delay(700);
leftDistance = readPing();
delay(500);
myservo.write(90);
delay(100);
compareDistance();
}
void compareDistance()
{
if (leftDistance>rightDistance)
{
turnLeft();
}
else if (rightDistance>leftDistance)
{
turnRight();
}
else
{
turnAround();
}
}
int readPing() {
delay(70);
unsigned int uS = sonar.ping();
int cm = uS/US_ROUNDTRIP_CM;
return cm;
}
void moveStop() {leftMotor1.run(RELEASE); leftMotor2.run(RELEASE); rightMotor1.run(RELEASE); rightMotor2.run(RELEASE);}
void moveForward() { //Mert Arduino https://bit.ly/MertArduino
motorSet = “FORWARD”;
leftMotor1.run(FORWARD);
leftMotor2.run(FORWARD);
rightMotor1.run(FORWARD);
rightMotor2.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)
{
leftMotor1.setSpeed(speedSet);
leftMotor2.setSpeed(speedSet);
rightMotor1.setSpeed(speedSet);
rightMotor2.setSpeed(speedSet);
delay(5);
}
}
void moveBackward() {
motorSet = “BACKWARD”;
leftMotor1.run(BACKWARD);
leftMotor2.run(BACKWARD);
rightMotor1.run(BACKWARD);
rightMotor2.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)
{
leftMotor1.setSpeed(speedSet);
leftMotor2.setSpeed(speedSet);
rightMotor1.setSpeed(speedSet);
rightMotor2.setSpeed(speedSet);
delay(5);
}
}
void turnRight() {
motorSet = “RIGHT”;
leftMotor1.run(FORWARD);
leftMotor2.run(FORWARD);
rightMotor1.run(BACKWARD);
rightMotor2.run(BACKWARD);
rightMotor1.setSpeed(speedSet+MAX_SPEED_OFFSET);
rightMotor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(1500);
motorSet = “FORWARD”;
leftMotor1.run(FORWARD);
leftMotor2.run(FORWARD);
rightMotor1.run(FORWARD);
rightMotor2.run(FORWARD);
}
void turnLeft() {
motorSet = “LEFT”;
leftMotor1.run(BACKWARD);
leftMotor2.run(BACKWARD);
leftMotor1.setSpeed(speedSet+MAX_SPEED_OFFSET);
leftMotor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
rightMotor1.run(FORWARD);
rightMotor2.run(FORWARD);
delay(1500);
motorSet = “FORWARD”;
leftMotor1.run(FORWARD);
leftMotor2.run(FORWARD);
rightMotor1.run(FORWARD);
rightMotor2.run(FORWARD);
}
void turnAround() {
motorSet = “RIGHT”;
leftMotor1.run(FORWARD);
leftMotor2.run(FORWARD);
rightMotor1.run(BACKWARD);
rightMotor2.run(BACKWARD);
rightMotor1.setSpeed(speedSet+MAX_SPEED_OFFSET);
rightMotor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(1700);
motorSet = “FORWARD”;
leftMotor1.run(FORWARD);
leftMotor2.run(FORWARD);
rightMotor1.run(FORWARD);
rightMotor2.run(FORWARD);
}
Downloads Library
Library ทั้งหมด
https://drive.google.com/drive/folders/1sFt8By-Y76emMHy1JQ8BXG9WRJjTNJLl?usp=sharing
Adafruit-Motor-Shield-library-master
https://drive.google.com/drive/folders/1we6jvaMpmXeZULF8TTrBDSavEugY4qFT?usp=sharing
Arduino-NewPing-master
https://drive.google.com/drive/folders/1rEGXbh7gE1h6X51oHN13uaBt-iR_9lyE?usp=sharing
Ultrasonic
https://drive.google.com/drive/folders/1N5oFj9R3ajawe_bU81GKaSgeCPBLBSkZ?usp=sharing
เรื่อง หุ่นหลบหลีกสิ่งกรีดขวางตรวจหาวัตถุโลหะ
จัดทำโดย
นาย ปฏิพล ยูนุช
นาย ธณุวัฒน์ ปั้นเอม
นาย จิราธิวัฒน์ อาบสุวรรณ