ربات متحرک Otto با رزبری پای پیکو
همیشه ساخت رباتهای کوچیک و بامزه یکی از جذابترین بخشهای الکترونیک و مکانیک بوده. ربات اتو (Otto) یه ربات دوپای معروفه که میتونه راه بره، برقصه و با محیط اطرافش تعامل داشته باشه. این ربات به خاطر طراحی جالب و متنباز بودنش، طرفدارهای خیلی زیادی تو دنیا داره.
توی این پروژه از تیم آیسیمدار، میخوایم این ربات دوستداشتنی رو با مغز متفکر "رزبری پای پیکو" بسازیم. استفاده از برد پیکو در کنار درایور موتور سروو، دستمون رو برای کنترل دقیقتر و برنامهنویسی نرمتر باز میذاره. علاوه بر این، یه سنسور التراسونیک هم به عنوان چشمهای ربات بهش اضافه میکنیم تا بتونه موانع رو تشخیص بده و باهوشتر عمل کنه.
اگر دنبال یه پروژه رباتیک هیجانانگیز هستی که هم درگیر قطعات مکانیکی بشی و هم مهارتهای برنامهنویسیت رو به چالش بکشی، این آموزش دقیقا برای خودته. قطعات رو روی میز کارت آماده کن تا قدمبهقدم بریم سراغ ساخت این ربات بانمک!
قطعات موردنیاز
- سنسور فاصله سنج التراسونیک
- برد رزبری پای پیکو (Raspberry Pi Pico)
- قطعات بدنه ربات Otto (چاپ سهبعدی)
- چهار عدد میکرو سروو موتور SG90
- ماژول درایور سروو موتور 16 کاناله PCA9685 (ارتباط I2C)
- آیسی رگولاتور ولتاژ LM7805
- باتری کتابی 9 ولت
- سوکت باتری 9 ولتی
- هویه و لوازم لحیمکاری
- سیمچین
- چسب حرارتی
آمادهسازی قطعات بدنه ربات
برای شروع کار، اول از همه به بدنه پلاستیکی ربات نیاز داریم. فایلهای طراحی سهبعدی این ربات بهصورت متنباز در دسترسه و میتونی خیلی راحت اونها رو با پرینتر سهبعدی چاپ کنی. اگر هم پرینتر نداری جای نگرانی نیست؛ میتونی فایلها رو به یکی از سرویسهای خدمات پرینت سهبعدی بدی تا با رنگ دلخواهت برات چاپش کنن.
سرهم کردن اسکلت و پاهای ربات
حالا وقتشه که قطعات چاپشده رو برداری و 4 تا میکرو سروو موتور رو آماده کنی تا اسکلت ربات رو شکل بدیم. اول از کف پاها شروع میکنیم:
- هر کدوم از سروو موتورها رو داخل شیار مخصوص روی پاهای ربات قرار بده. اگر حس کردی راحت جا نمیرن، با یه کاتر لبههای پلاستیک رو خیلی ملایم تمیز کن.
- قبل از بستن پیچها، حتما با دست تست کن که شفت هر سروو بتونه بهراحتی 90 درجه در هر دو جهت بچرخه.
- وقتی از حرکت آزادانهشون مطمئن شدی، با پیچهای کوچیک خود سروو، اونها رو سر جاشون محکم کن.
حالا بریم سراغ بدنه اصلی:
- دو تا سروو موتور دیگه رو توی جایگاه مخصوصشون در قسمت بدنه (لگن ربات) قرار بده.
- با پیچ محکمشون کن.
- حالا پاهایی که تو مرحله قبل آماده کردی رو به بازوی سرووهای بدنه وصل کن.
- اینجا هم چرخش پاها رو چک کن؛ باید بتونن 90 درجه از مرکز بدنه به چپ و راست حرکت کنن.
- وقتی همهچیز تراز شد، پینهای پا رو با پیچهای ریز ببند تا حسابی سفت بشن.
مدیریت سیمها:
- کابلهای سروو موتورها رو با دقت از شیارهای روی بدنه و سوراخهای پاها رد کن تا به داخل محفظه اصلی برسن.
یه نکته خیلی مهم: موقع رد کردن سیمها حسابی دقت کن. اگر سیمکشی تمیز و مرتب باشه، هم حرکت ربات نرمتر میشه و هم کابلها موقع راه رفتن ربات گیر نمیکنن یا پاره نمیشن.
اتصال سروو موتورها به ماژول درایور PCA9685
همونطور که تو تصویر میبینی، باید سوکت سیمهای هر چهار تا سروو موتور رو به کانالهای مشخصی از ماژول درایور 16 کاناله PCA9685 وصل کنیم تا کنترلشون روی برنامه راحتتر بشه:
- موتور پای چپ رو به کانال شماره 0 وصل کن.
- موتور پای راست رو به کانال شماره 1 وصل کن.
- موتور کف پای چپ رو به کانال شماره 2 متصل کن.
- موتور کف پای راست رو هم به کانال شماره 3 بزن.
آمادهسازی محیط آردوینو و برنامهنویسی پیکو
قبل از اینکه بخوایم رزبری پای پیکو رو روی مدار نهایی سوار کنیم و لحیمکاری رو انجام بدیم، بهتره کدها رو روش آپلود کنیم. ما برای برنامهنویسی پیکو از محیط نامآشنای Arduino IDE استفاده میکنیم. پس نرمافزار آردوینو رو باز کن و این مراحل رو قدمبهقدم پیش برو:
- اول رزبری پای پیکو رو با یه کابل USB به سیستم وصل کن.
- توی نرمافزار آردوینو از منوی File روی گزینه Preferences کلیک کن.
- توی پنجرهای که باز میشه، در بخش Additional Board Manager URLs، آدرس پکیج مربوط به بردهای رزبری پای (که تو تصویر مشخصه) رو وارد کن.
- روی دکمه OK کلیک کن تا تنظیمات ذخیره بشه.
- حالا از منوی Tools برو به بخش Board و بعد Boards Manager رو باز کن. کلمه Pico رو جستجو کن و پکیج مربوطه رو نصب کن.
- بعد از نصب موفقیتآمیز، برد رزبری پای پیکو و پورت متصل به اون رو از منوی Tools انتخاب کن.
حالا فقط کافیه کدهای زیر رو کپی کنی و روی برد آپلود کنی. این کد برای حرکت پایه و راه رفتن رباته و میتونی بر اساس خلاقیتت، حالتهای مختلف دیگهای رو هم توش تعریف کنی.
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVO_FREQ 50
#define SERVOMIN 150
#define SERVOMAX 600
// Define servo channels on PCA9685
#define LeftLeg 0
#define RightLeg 1
#define LeftFoot 2
#define RightFoot 3
// Calibration values
int YL = 0; // Left Leg trim
int YR = 0; // Right Leg trim
int RL = 0; // Left Foot trim
int RR = 0; // Right Foot trim
void setup() {
Serial.begin(9600);
// Initialize PCA9685
pwm.begin();
pwm.setPWMFreq(SERVO_FREQ);
}
int angleToPulse(int angle) {
angle = constrain(angle, 0, 180);
return map(angle, 0, 180, SERVOMIN, SERVOMAX);
}
void setServo(uint8_t servoNum, int angle) {
pwm.setPWM(servoNum, 0, angleToPulse(angle));
}
void homePosition() {
setServo(LeftLeg, 90);
setServo(RightLeg, 90);
setServo(LeftFoot, 90);
setServo(RightFoot, 80);
}
void hello() {
setServo(LeftFoot, 60);
for (int i = 0; i < 3; i++) {
setServo(RightLeg, 60);
delay(300);
setServo(RightLeg, 90);
delay(300);
setServo(RightFoot, 60);
delay(300);
setServo(RightFoot, 90);
delay(300);
}
homePosition();
}
void walk() {
// Basic walking sequence
// Step 1: Lift left foot
setServo(LeftFoot, 70);
delay(200);
// Step 2: Move left leg forward
setServo(LeftLeg, 120);
delay(200);
// Step 3: Lower left foot
setServo(LeftFoot, 90);
delay(200);
// Step 4: Lift right foot
setServo(RightFoot, 70);
delay(200);
// Step 5: Move right leg forward
setServo(RightLeg, 120);
delay(200);
// Step 6: Lower right foot
setServo(RightFoot, 90);
delay(200);
homePosition();
}
void dance() {
// Dance move 1: Side-to-side sway
for (int i = 0; i < 3; i++) {
setServo(LeftLeg, 80);
setServo(RightLeg, 100);
delay(300);
setServo(LeftLeg, 100);
setServo(RightLeg, 80);
delay(300);
homePosition();
}
// Foot tapping
for (int i = 0; i < 3; i++) {
setServo(LeftFoot, 60);
delay(200);
setServo(LeftFoot, 90);
delay(200);
setServo(RightFoot, 60);
delay(200);
setServo(RightFoot, 90);
delay(200);
homePosition();
}
// Twisting legs
for (int i = 0; i < 3; i++) {
setServo(LeftLeg, 70);
setServo(RightLeg, 110);
delay(300);
setServo(LeftLeg, 110);
setServo(RightLeg, 70);
delay(300);
homePosition();
}
// Wave legs up and down
for (int i = 0; i < 3; i++) {
setServo(LeftLeg, 60);
setServo(RightLeg, 120);
delay(300);
setServo(LeftFoot, 60);
setServo(RightFoot, 120);
delay(300);
homePosition();
}
// Sideways shuffle
for (int i = 0; i < 3; i++) {
setServo(LeftLeg, 70);
setServo(RightLeg, 110);
setServo(LeftFoot, 80);
setServo(RightFoot, 100);
delay(200);
setServo(LeftLeg, 110);
setServo(RightLeg, 70);
setServo(LeftFoot, 100);
setServo(RightFoot, 80);
delay(200);
homePosition();
}
// Return to home position
homePosition();
}
void loop() {
homePosition();
delay(500);
hello();
delay(5000);
for (int i = 0; i < 5; i++) {
walk();
}
delay(5000);
dance();
delay(5000);
}
تکمیل مدار الکترونیکی و راهاندازی سنسور چشم
حالا که کدها با موفقیت آپلود شدن، وقتشه قلب و مغز ربات رو به هم وصل کنیم. اول ارتباط بین درایور سروو موتور PCA9685 و رزبری پای پیکو رو طبق این پینها برقرار کن:
- پایه GND ماژول به GND پیکو
- پایه SCL ماژول به پین GP2 پیکو
- پایه SDA ماژول به پین GP3 پیکو
- پایه VCC ماژول به پین 3V3 پیکو
تو قدم بعدی، سنسور التراسونیک که همون چشمهای ربات هست رو به این شکل به برد متصل کن:
- پایه GND سنسور به GND پیکو
- پایه TRIG سنسور به پین GP6 پیکو
- پایه ECHO سنسور به پین GP7 پیکو
- پایه VCC سنسور به پین 3V3 پیکو
در نهایت برای تامین انرژی این ربات جذاب، باید از یه باتری 9 ولتی به همراه آیسی رگولاتور LM7805 استفاده کنی تا ولتاژ 5 ولت صاف و بیخطر برای ماژولها و سرووها فراهم بشه. برای اینکه مدارت خیلی شلوغ نشه و سیمها تو دست و پا نباشن، پیشنهاد میکنم اتصالات رو روی یه برد سوراخدار کوچیک پیاده کنی تا همهچیز مرتب و فشرده داخل سر ربات جا بشه.
حرف آخر و جان گرفتن ربات
تبریک میگم! ربات اتوی تو با مغز رزبری پای پیکو آماده شده. الان وقتی باتری رو متصل کنی، ربات باید شروع به حرکت کنه و اگر مانعی جلوش قرار بگیره، سنسور التراسونیک اون رو تشخیص میده و مسیرش رو عوض میکنه. دیدن راه رفتن این ربات کوچیک بعد از اینهمه زحمت، واقعا لذتبخش و هیجانانگیزه و خستگی رو از تنت در میکنه.
حتما این پروژه رو بساز و اگر موقع ساخت یا تغییر کدها ایدههای جالبی به ذهنت رسید، تو بخش کامنتها برامون بنویس. مشتاقیم ببینیم چه قابلیتهای جدیدی به رباتت اضافه میکنی یا چه چالشهایی رو موقع ساختش پشت سر گذاشتی. منتظر نظراتت هستیم!
فایلهای پیوست
تو میتونی اولین سازنده باشی!
اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر
این آموزش با استانداردهای اختصاصی آیسیمدار بازنویسی و بهینهسازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.








































گفتگوهای کاربران
هنوز نظری ثبت نشده؛ تو شروع کن!
هنوز نظری ثبت نشده؛ تو شروع کن!