ربات Hexapod یعنی چه؟ (برای مبتدی)
Hexapod یک ربات ششپا است که مثل حشرات راه میرود. برخلاف رباتهای چرخدار که روی سطوح ناهموار مشکل دارند، رباتهای پادار میتوانند از موانع رد شوند، از پلهها بالا بروند، و حتی روی زمین ناهموار راه بروند.
هر پای Hexapod معمولاً ۳ مفصل دارد: Coxa (ران — چرخش افقی)، Femur (ساق — چرخش عمودی)، و Tibia (کف — چرخش عمودی). برای کنترل ۱۸ سرووموتور (۶ پا × ۳) به جای پایههای مجزا Arduino، از یک درایور سرو PCA9685 (۱۶ کانال I2C) استفاده میکنیم.
Tripod Gait رایجترین الگوی راه رفتن Hexapod است: در هر لحظه ۳ پا روی زمین هستند (پایه پایدار) و ۳ پای دیگر در هوا حرکت میکنند — این تناوب سریع و پایدار است.
محصولی که میسازید
یک Hexapod ۱۸-سرو با Tripod Gait، قابل کنترل با RC و حرکت خودکار به جلو/عقب/چرخش.
- زمان ساخت: ۱۵ تا ۲۵ ساعت
- هزینه: ۲ تا ۴ میلیون تومان
- سرعت: ۰.۳ تا ۰.۵ m/s
قطعات لازم (BOM)
| قطعه | مشخصات |
|---|---|
| Arduino Mega 2560 | پردازشگر اصلی |
| PCA9685 Servo Driver × ۲ | کنترل ۱۸+ سرو از طریق I2C |
| سرووموتور MG90S × ۱۸ | ۳ سرو × ۶ پا |
| شاسی لیزرکات اکریلیک | بدنه و پاها — فایل DXF |
| باتری 7.4V LiPo 2200mAh | منبع سروو |
| UBEC 5V 3A | تغذیه Arduino و سرووها |
کد Tripod Gait
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40);
#define SERVOMIN 150 // Pulse min
#define SERVOMAX 600 // Pulse max
#define STEP_H 30 // ارتفاع گام (درجه)
#define STEP_FWD 25 // طول گام (درجه)
// گروه A = {L1, R2, L3} — گروه B = {R1, L2, R3}
// ترتیب کانالها روی PCA9685
int legCoxa[6] = {0,3,6,9,12,15};
int legFemur[6] = {1,4,7,10,13,16};
int legTibia[6] = {2,5,8,11,14,17};
void setServo(int ch, int angle) {
int pulse = map(angle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(ch, 0, pulse);
}
void liftLeg(int leg) { setServo(legFemur[leg], 90 + STEP_H); }
void placeLeg(int leg) { setServo(legFemur[leg], 90); }
void moveFwd(int leg, int dir) { setServo(legCoxa[leg], 90 + dir * STEP_FWD); }
void tripodGait() {
int groupA[] = {0, 2, 4}; // L1, L3, R2
int groupB[] = {1, 3, 5}; // L2, R1, R3
// فاز ۱: گروه A بالا میرود
for(int l : groupA) { liftLeg(l); moveFwd(l, 1); }
delay(100);
for(int l : groupA) { placeLeg(l); }
// فاز ۲: گروه B بالا میرود
for(int l : groupB) { liftLeg(l); moveFwd(l, 1); }
delay(100);
for(int l : groupB) { placeLeg(l); }
delay(80);
}
void setup() {
pwm.begin(); pwm.setOscillatorFrequency(27000000);
pwm.setPWMFreq(50); delay(10);
// موقعیت اولیه
for(int i=0;i<18;i++) setServo(i, 90);
delay(1000);
}
void loop() {
tripodGait();
}
چکلیست تست
| تست | نتیجه |
|---|---|
| همه ۱۸ سرو به موقعیت ۹۰° میروند؟ | بله — Mechanical Center |
| ربات در Tripod Gait پیش میرود؟ | بله — باید به جلو برود |
| سروها گرم نمیشوند؟ | UBEC 3A کافی است |
| شاسی تعادل دارد؟ | CG باید مرکز باشد |