โปรเจค Arduino หุ่นยนต์ 2 ล้อทรงตัวเอง (Self Balancing Robot)
โปรเจคนี้เป็นหุ่นยนต์ 2 ล้อที่สามารถ “ทรงตัวได้เอง” โดยใช้หลักการควบคุมสมดุลแบบอัตโนมัติ
ถือเป็นโปรเจคที่ดูน่าสนใจและมีความท้าทาย แต่ใช้จำนวนอุปกรณ์ไม่มาก เหมาะสำหรับนักเรียน นักศึกษา
หรือผู้ที่ต้องการฝึกด้านระบบควบคุม (Control System)
อุปกรณ์ที่ใช้ (Devices & Components)
- Arduino Uno R3 https://shopee.co.th/product/243007968/5725582932
- Motor Driver L298 Shield https://shopee.co.th/product/243007968/5325584382
- มอเตอร์ DC แบบมีเกียร์ และ ล้ออเนกประสงค์ (Universal Wheel) จำนวน 2 ล้อ https://shopee.co.th/product/243007968/5125584304
- เซ็นเซอร์ MPU6050 https://shopee.co.th/product/243007968/7225581969
- แบตเตอรี่ลิเธียม 7.4V https://shopee.co.th/product/243007968/7425582959


หลักการทำงานของระบบ
Self Balancing Robot คือหุ่นยนต์ที่สามารถรักษาสมดุลไม่ให้ล้ม โดยใช้การควบคุมการหมุนของล้อ
ให้สัมพันธ์กับการเอียงของตัวหุ่นยนต์
ในโปรเจคนี้ใช้หุ่นยนต์แบบ 2 ล้อ ซึ่งเป็นรูปแบบที่ง่ายที่สุด
โดยระบบจะตรวจจับการเอียง และสั่งให้มอเตอร์หมุนเพื่อรักษาสมดุล
อธิบายอุปกรณ์สำคัญ
- MPU6050
เป็นเซ็นเซอร์ Accelerometer + Gyroscope ใช้วัดการเอียงในแกน X, Y, Z - Arduino Uno
ทำหน้าที่เป็นสมองของระบบ ประมวลผลข้อมูลจากเซ็นเซอร์ - Motor Driver
ใช้ควบคุมความเร็วและทิศทางของมอเตอร์ - DC Motor + ล้อ
ใช้เคลื่อนที่และปรับสมดุลของหุ่นยนต์ - แบตเตอรี่
จ่ายพลังงานให้กับระบบทั้งหมด
หลักการควบคุม (PID Control)
ระบบนี้ใช้การควบคุมแบบ PID (Proportional, Integral, Derivative)
เพื่อคำนวณการปรับความเร็วของล้อให้เหมาะสม
- หากหุ่นยนต์เอียงไปด้านหน้า → ล้อหมุนไปข้างหน้า
- หากเอียงไปด้านหลัง → ล้อหมุนย้อนกลับ
- ระบบจะปรับสมดุลตลอดเวลา
การตั้งค่าและปรับจูนระบบ
1. ตั้งค่า Gyro Offset
ใช้แก้ค่าความคลาดเคลื่อนของเซ็นเซอร์ MPU6050 ซึ่งแต่ละตัวจะไม่เหมือนกัน
2. ตั้งค่า Setpoint
ตั้งค่ามุมตั้งตรงของหุ่นยนต์ โดยวัดจาก Serial Monitor
ค่าที่ได้จะนำมาใส่ในตัวแปร setpoint
3. ปรับค่า PID
- Kp : ควบคุมความแรงของการตอบสนอง
- Kd : ลดการแกว่ง (oscillation)
- Ki : ช่วยให้ทรงตัวนิ่งเร็วขึ้น
แนวทางการปรับ:
- Kp ต่ำเกินไป → หุ่นล้ม
- Kp สูงเกินไป → สั่นแรง
- Kd ช่วยลดการสั่น
- Ki ช่วยให้หยุดนิ่งเร็ว
โค้ดโปรแกรม Arduino
#include "I2Cdev.h"
#include <PID_v1.h>
#include "MPU6050_6Axis_MotionApps20.h"
MPU6050 mpu;
double setpoint=182;
double Kp = 15;
double Kd = 0.9;
double Ki = 140;
double input, output;
PID pid(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT);
void setup() {
Serial.begin(115200);
mpu.initialize();
pid.SetMode(AUTOMATIC);
pid.SetSampleTime(10);
pid.SetOutputLimits(-255, 255);
pinMode (6, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
}
void loop() {
pid.Compute();
if (input>150 && input<200){ if (output>0) Forward();
else if (output<0) Reverse();
} else {
Stop();
}
}
void Forward(){
analogWrite(6,output);
analogWrite(10,output);
}
void Reverse(){
analogWrite(9,output*-1);
analogWrite(11,output*-1);
}
void Stop(){
analogWrite(6,0);
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,0);
}
สรุป
โปรเจคหุ่นยนต์ทรงตัว 2 ล้อ เป็นโปรเจคที่ดูซับซ้อนแต่สามารถทำได้จริง
โดยใช้หลักการควบคุม PID และการอ่านค่าจากเซ็นเซอร์ MPU6050
แม้การปรับค่าอาจใช้เวลา แต่เป็นโปรเจคที่สนุกและช่วยพัฒนาทักษะด้าน
Embedded System และ Control System ได้อย่างดี
โปรเจคนี้ไม่ใช่แค่ทำให้ “ยืนได้” แต่คือการเข้าใจการควบคุมระบบจริง