โปรเจค Arduino หุ่นยนต์แก้เขาวงกต (Maze-Solving Robot)
โปรเจคนี้เป็นการสร้างหุ่นยนต์แก้เขาวงกต (Maze-Solving Robot) โดยใช้ Arduino Uno
ร่วมกับเซ็นเซอร์ IR จำนวน 3 ตัว และอัลกอริทึมที่เรียกว่า
Hand-on-Wall Rule สำหรับนำทาง
จุดเด่นของโปรเจคนี้คือใช้ “เส้นสี” แทนกำแพง ทำให้สามารถออกแบบและทดสอบเขาวงกตได้ง่าย
เหมาะสำหรับผู้เริ่มต้นและผู้ที่ต้องการศึกษา Robotics และ Logic การตัดสินใจ

อุปกรณ์ที่ใช้ (Devices & Components)
- Arduino Uno R3 https://shopee.co.th/product/243007968/5725582932
- Motor Drive L298 https://shopee.co.th/product/243007968/5325584382
- โครงรถ 2 ล้อ (2WD Robot Chassis) https://shopee.co.th/product/243007968/7946217871
- แบตเตอรี่ LiPo 7.4V (2S 800mAh) https://shopee.co.th/product/243007968/7425582959
- IR Proximity Sensor จำนวน 3 ตัว https://shopee.co.th/product/243007968/4425584427
หลักการทำงาน (Working Principle)
หุ่นยนต์จะใช้เซ็นเซอร์ IR ตรวจจับเส้นหรือสิ่งกีดขวางแบบเรียลไทม์
เพื่อนำข้อมูลไปตัดสินใจการเคลื่อนที่
อัลกอริทึมที่ใช้คือ Left-Hand Rule (หรือ Right-Hand Rule)
ซึ่งเป็นวิธีแก้เขาวงกตแบบง่ายแต่มีประสิทธิภาพ
- หุ่นยนต์จะ “เกาะผนังด้านหนึ่ง” ตลอดเวลา
- เมื่อเจอทางแยก → เลี้ยวตามกฎที่ตั้งไว้
- เมื่อเจอทางตัน → กลับหลัง (U-turn)
- ทำซ้ำจนกว่าจะออกจากเขาวงกตได้
แม้วิธีนี้จะไม่ใช่เส้นทางที่สั้นที่สุด แต่รับประกันว่าสามารถหาทางออกได้แน่นอน
การต่อวงจร (Circuit & Assembly)
- IR Sensor 3 ตัว → ต่อที่ขา A0, A1, A2
- มอเตอร์ → ต่อผ่าน Motor Shield ที่ M1 และ M2
- แบตเตอรี่ → จ่ายไฟให้ Arduino และมอเตอร์
ตำแหน่งของเซ็นเซอร์สำคัญมาก หากวางไม่ถูกต้อง
หุ่นยนต์อาจตรวจจับทางเลี้ยวผิดพลาด จำเป็นต้องมีการปรับจูน (Calibration)

หลักการตัดสินใจของหุ่นยนต์
หุ่นยนต์จะอ่านค่าจากเซ็นเซอร์ทั้ง 3 ตัว (ซ้าย-หน้า-ขวา)
แล้วนำมารวมเป็นสถานะ (State) เพื่อตัดสินใจการเคลื่อนที่ เช่น:
- ไม่มีเส้น → กลับหลัง (U-turn)
- มีทางตรง → เดินหน้า
- มีทางซ้าย → เลี้ยวซ้าย
- มีทางขวา → เลี้ยวขวา
โค้ดโปรแกรม Arduino
#include <AFMotor.h>
// Motor
AF_DCMotor motorA(1);
AF_DCMotor motorB(2);
// Sensor
const int leftSensor = A0;
const int frontSensor = A1;
const int rightSensor = A2;
// Speed
const int forwardSpeed = 120;
const int TurningSpeed = 115;
void setup() {
pinMode(leftSensor, INPUT);
pinMode(frontSensor, INPUT);
pinMode(rightSensor, INPUT);
Serial.begin(9600);
}
void loop() {
int leftValue = digitalRead(leftSensor);
int frontValue = digitalRead(frontSensor);
int rightValue = digitalRead(rightSensor);
int sensorState = (leftValue << 2) | (frontValue << 1) | rightValue;
switch (sensorState) {
case 0b000:
uTurn();
break;
case 0b010:
moveForward();
break;
case 0b100:
turnLeft();
break;
case 0b001:
turnRight();
break;
default:
stopMotors();
break;
}
}
void moveForward() {
motorA.setSpeed(forwardSpeed);
motorB.setSpeed(forwardSpeed);
motorA.run(FORWARD);
motorB.run(FORWARD);
}
void turnLeft() {
motorA.run(BACKWARD);
motorB.run(FORWARD);
}
void turnRight() {
motorA.run(FORWARD);
motorB.run(BACKWARD);
}
void stopMotors() {
motorA.run(RELEASE);
motorB.run(RELEASE);
}
void uTurn() {
motorA.run(FORWARD);
motorB.run(BACKWARD);
}
สรุป
โปรเจคหุ่นยนต์แก้เขาวงกต เป็นโปรเจคที่ช่วยฝึกทั้งด้าน
การเขียนโปรแกรม, การควบคุมมอเตอร์ และ Logic Algorithm
เหมาะสำหรับผู้เริ่มต้นไปจนถึงนักศึกษา และสามารถนำไปต่อยอดเป็น
หุ่นยนต์อัจฉริยะ หรือแข่งขัน Robotics ได้
ไม่ใช่แค่ให้หุ่นยนต์ “เดินได้” แต่คือการสอนให้มัน “คิดและตัดสินใจ”