ورکشاپ آموزشی - آیسی مدار
رفتن به محتوا

ربات عنکبوتی هوشمند با ESP32 و نرم‌افزار Bottango

رباتیک و هوشمندسازی
۰ نظر
۵۰ نفر
کد ۴۳۵۰

دنیای رباتیک پر از شگفتی است و ترکیب هنر انیمیشن با سخت‌افزار می‌تواند یک ربات خشک و بی‌روح را به یک موجود زنده تبدیل کند.

در این پروژه قرار است یک ربات عنکبوتی جذاب با ظاهری شبیه به درویدهای جنگ ستارگان بسازیم. این ربات با استفاده از برد ESP32 و درایور سروو موتور کنترل می‌شود و می‌تواند با ترکیب نرم‌افزار Bottango حرکات روان و از پیش تعریف‌شده‌ای مثل رقصیدن یا ژست‌های مختلف را اجرا کند. علاوه بر این، ربات ما قابلیت پخش صدا و کنترل از طریق وای‌فای را هم دارد.

بدنه این ربات با پرینتر سه‌بعدی ساخته می‌شود و تمام قطعات الکترونیکی آن به صورت فشرده داخل سر و بدنه جاسازی می‌شوند. پس قطعات و هویه را آماده کن تا بریم سراغ خلق این ربات دوست‌داشتنی و هوشمند.

قطعات موردنیاز

  • ماژول درایور سروو 16 کاناله PCA9685 (ترجیحا دارای خازن روی برد)
  • 9 عدد سروو موتور دنده فلزی مدل SG90
  • ماژول پخش صدای DFPlayer Mini (سعی کن نسخه اصلی را تهیه کنی)
  • کارت حافظه MicroSD (برای ذخیره فایل‌های صوتی)
  • بلندگوی کوچک و مینیاتوری
  • ماژول شارژر باتری لیتیومی
  • پیچ و مهره سایز M3
  • سیم‌های رابط و جامپرهای مخابراتی
  • کلید فشاری قطع و وصل (برای کلید پاور اصلی)
  • مقداری نوار چسب پارچه‌ای دوطرفه (چسب ولکرو)
  • چسب نسوز کاپتون (برای عایق‌کاری اتصالات روی برد)
مرحله ۱

ساختار اصلی بدنه ربات

ساختار فیزیکی این ربات خیلی پیچیده نیست و برای درک بهتر، می‌توانیم آن را به سه بخش اصلی تقسیم کنیم: پاها، بدنه مرکزی و سر ربات. هر کدام از این بخش‌ها وظیفه خاصی دارند و قطعات مشخصی را درون خود جای می‌دهند.

مرحله ۲

مونتاژ پاهای ربات

اول از همه سراغ پاهای ربات می‌رویم. طراحی این بخش الهام‌گرفته از ربات‌های عنکبوتی معروف است. دقت کن که برای حرکت روان‌تر و تحمل وزن بهتر، حتما از سروو موتورهای دنده‌فلزی SG90 استفاده کنی.

چون بازه حرکتی مدل‌های فلزی با پلاستیکی فرق دارد، کدهای انیمیشن این پروژه دقیقا برای مدل فلزی کالیبره شده‌اند و بهترین نتیجه را با آن‌ها می‌گیری.

مرحله ۳

آماده‌سازی بدنه مرکزی

حالا نوبت به بدنه مرکزی می‌رسد. فضای داخلی این بخش طوری طراحی شده که ماژول درایور سروو PCA9685 و انبوهی از سیم‌های سروو موتورها به راحتی داخلش جا شوند. برای اینکه سیم‌کشی تمیزتر دربیاید، می‌توانی طول سیم‌های سرووها را کوتاه کنی تا داخل بدنه بیش از حد شلوغ نشود.

در این مرحله باید پایه‌های نصب اضافی سرووهای داخلی را با احتیاط جدا کنی تا کاملا در فضای در نظر گرفته شده فیکس شوند و بدنه به درستی بسته شود.

مرحله ۴

طراحی و نصب سر دروید

بریم سراغ جذاب‌ترین بخش یعنی سر ربات که حسابی به آن شخصیت می‌دهد. ساختار سر شامل یک بیس گرد، دو لنز چشمی و یک سنسور لمسی در بالاترین نقطه است. این بخش یکی از مهم‌ترین تفاوت‌های این ربات با طرح‌های مشابه است که به آن ظاهری شبیه به ربات‌های فیلم‌های علمی‌تخیلی می‌بخشد.

سر این دروید به دو قسمت پایینی (کاسه سر) و بالایی (قاب رویی) تقسیم می‌شود. قسمت پایینی محل قرارگیری قطعاتی مثل برد ESP32، بلندگو، باتری، پخش‌کننده صوتی و ماژول‌های تغذیه است. برای اینکه ربات حالت زنده‌تری داشته باشد، یک موتور سروو هم داخل کاسه سر نصب می‌شود تا قسمت بالایی سر را به چپ و راست بچرخاند.

سوراخ‌های تعبیه‌شده در کف کاسه سر، عبور دادن سیم‌ها به سمت بدنه مرکزی را خیلی راحت می‌کنند. این دو بخش به کمک پایه‌های پرینت سه‌بعدی به بدنه مرکزی متصل می‌شوند. توصیه می‌کنم برای اتصال از چسب‌های موقت استفاده کنی تا در صورت نیاز به تعمیرات، دسترسی به قطعات امکان‌پذیر باشد.

تا زمانی که از صحت اتصالات الکترونیکی و سیم‌کشی داخل بدنه مطمئن نشدی، هرگز قطعات را به صورت دائم به هم نچسبان. قسمت بالایی سر مثل یک کلاه روی بخش پایینی قرار می‌گیرد و فقط توسط یک پیچ متصل به بازوی سروو موتور مهار می‌شود. این بخش خیلی سبک طراحی شده تا فشار زیادی به موتور وارد نشود و ربات بتواند سریع و بدون لرزش سرش را تکان دهد.

دو قطعه دایره‌ای هم به عنوان چشم روی سر قرار می‌گیرند. تو می‌توانی از پشت این چشم‌ها ال‌ای‌دی رد کنی، اما اگر نخواستی، مثل من آن‌ها را ساده رها کن. برای جلوگیری از لقی سر هنگام چرخش، می‌توانی یک تکه کوچک نوار چسب پارچه‌ای در قسمت داخلی قرار دهی تا اصطکاک مناسبی ایجاد کند.

در بالاترین نقطه سر هم یک سوراخ برای عبور دادن پایه سنسور لمسی در نظر گرفته شده که در مراحل بعد راجع به آن توضیح خواهم داد.

مرحله ۵

نقشه الکترونیکی و تغذیه قطعات

قلب تپنده مدار ما برد ESP32 است. نسخه‌های متعددی از این برد در بازار وجود دارد، اما حتما سعی کن از برندهای معتبر استفاده کنی تا در طول راه‌اندازی درگیر باگ‌های سخت‌افزاری نشوی. این برد به دلیل ابعاد کوچک و قدرت پردازش بالا، بهترین انتخاب برای مدیریت حرکات و ارتباط بی‌سیم پروژه ما است.

ماژول ESP32 وظیفه پردازش منطق، نگهداری انیمیشن‌ها و میزبانی رابط کاربری تحت وب را بر عهده دارد. این برد دستورات حرکتی را از طریق ارتباط سریال به ماژول درایور PCA9685 می‌فرستد تا تک‌تک سرووها در زاویه دقیق خود قرار بگیرند.

فرمان‌های صوتی هم همزمان به ماژول DFPlayer Mini ارسال می‌شوند تا افکت‌های صوتی از طریق بلندگو پخش شوند. تو می‌توانی مجموعه‌ای از صداهای رباتیک جذاب را روی کارت حافظه بریزی تا ربات به صورت تصادفی آن‌ها را پخش کند. پیدا کردن فایل‌های صوتی رباتیک در اینترنت کار سختی نیست و با کمی جستجو صداهای بی‌نظیری پیدا خواهی کرد.

خروجی ماژول پخش صدا مستقیما به بلندگوی مینیاتوری وصل می‌شود. کل این سیستم توسط یک باتری لیتیومی تغذیه می‌شود تا کاملا بی‌سیم و پرتابل باشد. برای شارژ راحت باتری، یک ماژول شارژر استاندارد در مدار قرار داده‌ایم.

ولتاژ باتری لیتیومی حدود 3.7 ولت است، بنابراین از یک مبدل افزاینده ولتاژ (Step-up) استفاده می‌کنیم تا آن را به 5 ولت ثابت تبدیل کنیم. جریان خروجی این ماژول بسیار مهم است.

چون 9 عدد سروو موتور همزمان کار می‌کنند، جریان مصرفی بالا می‌رود. پس حتما از ماژول افزاینده‌ای استفاده کن که بتواند توان خروجی مناسبی بدهد تا سیستم دچار ریست ناگهانی نشود.

برای جلوگیری از افت ولتاژ در لحظات پیک مصرف، قرار دادن یک خازن ظرفیت بالا (مثل 4700 میکروفاراد) در خروجی مبدل بسیار حیاتی است. این خازن مثل یک مخزن انرژی عمل کرده و جریان لحظه‌ای موتورها را تأمین می‌کند. اگر خازن‌های با ولتاژ پایین‌تر (مثلا 10 ولت) پیدا کردی خیلی بهتر است چون ابعاد کوچک‌تری دارند و راحت‌تر داخل کاسه سر جا می‌شوند.

برخی از ماژول‌های PCA9685 روی خودشان خازن دارند، اما اگر برد تو خازن نداشت، حتما یک خازن هزار میکروفارادی به پایه‌های تغذیه آن اضافه کن.

در نهایت پایه‌های تغذیه برد سروو درایور به ولتاژ 5 ولت و GND متصل می‌شوند تا نیروی کافی برای چرخش تمام موتورها فراهم شود.

مرحله ۶

بهینه‌سازی سیستم تغذیه

برای اینکه پایداری مدار را بالا ببری، یک ترفند عالی وجود دارد. بهتر است تغذیه برد ESP32 را از تغذیه موتورها جدا کنی تا نویز و افت ولتاژ شدید موتورها باعث هنگ کردن پردازنده نشود.

استفاده از دو مبدل ولتاژ مجزا برای برد کنترلر و موتورها، طول عمر باتری و پایداری سیستم را به شدت افزایش می‌دهد و خیالت را از بابت باگ‌های تغذیه راحت می‌کند. همچنین می‌توانی برای صرفه‌جویی در فضا، از ماژول‌های ترکیبی شارژر و افزاینده ولتاژ استفاده کنی تا سیم‌کشی‌ها هم کمتر شود.

مرتب کردن کابل‌ها و بریدن سیم‌های اضافی سرووها یکی از بهترین کارهایی است که می‌توانی انجام دهی تا هم فضای داخل ربات خنک‌تر بماند و هم خطر اتصالی به حداقل برسد.

اگر پورت شارژر را طوری روی لبه بدنه جاسازی کنی که از بیرون در دسترس باشد، دیگر برای شارژ کردن ربات نیازی به باز کردن سر آن نخواهی داشت.

دقت در انتخاب باتری هم تأثیر زیادی در کیفیت نهایی کار دارد. باتری‌های ظرفیت بالا با ضریب تخلیه مناسب، بهترین گزینه برای ربات‌های متحرک هستند.

می‌توانی باتری‌های سایز بزرگ را در بدنه مرکزی تعبیه کنی تا تعادل ربات بهتر حفظ شود و از طریق پورت‌های اصلی، برق مستقیم به ماژول درایور برسد.

اگر قصد داری انیمیشن‌های ربات را در آینده تغییر دهی، قرار دادن یک کلید برای تغییر حالت بین اجرای مستقل و حالت برنامه‌نویسی بسیار کاربردی خواهد بود. پس از تکمیل ربات می‌توانی به عنوان یک ارتقا، سنسورهای تشخیص مانع یا فرمان صوتی هم به مدار اضافه کنی تا کاملا هوشمند شود.

مرحله ۷

طراحی حرکات با نرم‌افزار Bottango

حرکت دادن نرم و طبیعی ربات راز اصلی جذابیت آن است. برای این کار از نرم‌افزار قدرتمند Bottango استفاده می‌کنیم که دنیای متفاوتی از انیمیشن سخت‌افزاری را پیش رویت می‌گذارد. برای اجرای این پروژه نیازی به تسلط کامل روی این نرم‌افزار نداری؛ کافی است کدها را روی آردوینو آپلود کنی تا رباتت به حرکت دربیاید.

اما اگر مثل من کنجکاو هستی و دوست داری حرکات و رقص‌های جدید برای رباتت طراحی کنی، آشنایی با اصول این نرم‌افزار بسیار هیجان‌انگیز خواهد بود.

یادگیری کار با Bottango واقعا شیرین است. این نرم‌افزار به تو اجازه می‌دهد حرکات پیچیده را به صورت فریم‌به‌فریم و روی نمودارهای موجی طراحی کنی تا ربات حرکاتی کاملا شبیه به موجودات زنده داشته باشد. بسیاری از ربات‌های عنکبوتی موفق با همین تکنیک حرکت می‌کنند و الگوی گام برداشتن آن‌ها بر پایه محاسبات دقیق ریاضی بنا شده است.

حرکت‌هایی مثل راه رفتن یا دویدن، در واقع ترکیبی از امواج پیوسته با فازها و زمان‌بندی‌های مختلف هستند. وقتی چرخه باز و بسته شدن مفاصل پاها را در قالب امواج سینوسی پیاده‌سازی کنی، می‌بینی که چطور هماهنگی دقیق زاویه موتورها یک کاراکتر زنده خلق می‌کند. برای مثال، در این پروژه یک روتین حرکتی جذاب برای رقص ربات تنظیم شده است.

در نمودارهای حرکتی می‌بینی که نیمی از موج‌ها با تأخیر و نیمی دیگر کاملا همگام هستند که این هارمونی باعث حفظ تعادل و پویایی ربات می‌شود.

دیدن این الگوهای بصری ذهن را باز می‌کند تا با فرکانس‌ها بازی کنی و حرکات عجیب‌تری مثل حالت کرم‌گونه یا قدم زدن محتاطانه را طراحی کنی. البته همیشه هم نمودارها منظم و موجی نیستند. برای مثال، نمودار حرکتی انیمیشن سلام کردن کاملا متفاوت است.

این حرکت، ترکیبی از چند ژست سریع است که وقتی ربات روشن می‌شود، برای جلب توجه انجام می‌دهد. کار با این نرم‌افزار آن‌قدر جذاب است که می‌توانی ساعت‌ها وقت بگذاری و انیمیشن‌های اختصاصی خودت را برای رباتت برنامه‌ریزی کنی و سپس آن‌ها را مستقیم روی میکروکنترلر ذخیره کنی.

مرحله ۸

برنامه‌نویسی و ادغام انیمیشن‌ها

نرم‌افزار Bottango به تو اجازه می‌دهد حرکات را از طریق کامپیوتر تست کنی و همزمان کدهایی برای اجرای مستقل روی میکروکنترلر خروجی بگیری. با این روش، ربات تو بدون نیاز به اتصال مداوم به سیستم، می‌تواند تمام رفتارها را از روی حافظه داخلی خودش بخواند و اجرا کند.

کدهایی که برای این پروژه استفاده می‌کنیم تغییرات کوچکی نسبت به خروجی پیش‌فرض داشته‌اند تا عملکرد بهینه‌تری روی برد ESP32 ارائه دهند. معمولا انیمیشن‌های حجیم را روی کارت حافظه می‌ریزند و با یک ماژول خواننده اجرا می‌کنند.

اما چون حجم انیمیشن‌های ما خیلی بالا نبود، توانستیم مستقیما آن‌ها را درون حافظه فلش خود میکروکنترلر ذخیره کنیم تا از قطعات اضافی خلاص شویم. مزیت این کار این است که اجرای انیمیشن‌ها فوق‌العاده سریع می‌شود و تأخیری در استخراج فایل‌ها نخواهیم داشت.

ما انیمیشن‌ها را به دو دسته استندبای و اکشن تقسیم می‌کنیم. حرکات استندبای همان حرکات ریز و تصادفی هستند که وقتی ربات بی‌کار است انجام می‌دهد تا زنده به نظر برسد.

این دقیقا مثل کاراکترهای بازی‌های ویدیویی است که وقتی دسته‌ای را رها می‌کنی، کاراکتر خشک نمی‌شود و نفس می‌کشد یا اطراف را نگاه می‌کند. حرکات اکشن هم انیمیشن‌های اصلی مثل رقص، سلام کردن یا ژست‌های خاص هستند که با فرمان تو اجرا می‌شوند.

وجود این دو حالت باعث می‌شود وقتی به سنسور روی سر ربات دست می‌زنی، انیمیشن استندبای متوقف شده و یک واکنش هیجان‌انگیز و اکشن به صورت کاملا تصادفی اجرا شود.

مرحله ۹

کامپایل کدها در محیط VS Code

کدهای این پروژه کمی از ساختار سنتی آردوینو فراتر رفته‌اند و برای کامپایل کردن آن‌ها بهتر است از محیط Visual Studio Code و افزونه قدرتمند PlatformIO استفاده کنی. شاید در ابتدا کوچ کردن از محیط ساده آردوینو به این ادیتور پیشرفته کمی چالش‌برانگیز به نظر برسد، اما ارزشش را دارد.

امکانات فوق‌العاده‌ای مثل مدیریت بهتر کتابخانه‌ها، تکمیل خودکار کدها و ابزارهای عیب‌یابی، سرعت توسعه پروژه‌های پیچیده‌ای مثل این ربات را به شدت بالا می‌برد. پس به جای استفاده از نرم‌افزار قدیمی آردوینو، یک بار برای همیشه محیط VS Code را راه‌اندازی کن تا از کدنویسی لذت بیشتری ببری.

مرحله ۱۰

کنترل ربات از طریق پنل تحت وب

حالا بریم سراغ کنترل از راه دور ربات! برد ESP32 در این پروژه به عنوان یک نقطه دسترسی (Access Point) عمل می‌کند. وقتی ربات روشن می‌شود، یک شبکه وای‌فای اختصاصی به نام MPL_Droid می‌سازد که رمز عبور پیش‌فرض آن 12345678 است. البته تو می‌توانی این نام و رمز را از داخل کدها به سلیقه خودت تغییر دهی.

کافی است با گوشی یا لپ‌تاپ به این شبکه متصل شوی و آدرس IP ربات (معمولا 192.168.4.1) را در مرورگر وارد کنی. بلافاصله یک داشبورد کنترلی زیبا روی صفحه ظاهر می‌شود که می‌توانی با لمس دکمه‌های آن، انیمیشن‌های مختلف مثل رقصیدن، سلام کردن یا تکان دادن سر را اجرا کنی. نام این دکمه‌ها دقیقا همان انیمیشن‌هایی است که در محیط نرم‌افزار طراحی کرده و به حافظه میکروکنترلر انتقال داده‌ای.

مرحله ۱۱

اضافه‌کردن سنسور لمسی روی سر

یکی از قابلیت‌های جذاب برد ESP32، داشتن پین‌های حساس به لمس خازنی است. با استفاده از این ویژگی، دیگر نیازی به خرید ماژول تاچ مجزا نداری. فقط کافی است یک سیم از یکی از پایه‌های پشتیبانی‌کننده روی برد به یک تکه فلز وصل کنی.

برای ربات ما، می‌توانی یک مهره یا واشر فلزی کوچک را بالای سرش تعبیه کنی و سیم آن را به پین شماره 7 برد وصل کنی. با این کار، هر بار که دستت را روی سر ربات می‌گذاری، سنسور فعال شده و واکنش نشان می‌دهد. پیشنهاد می‌کنم این سیم را با استفاده از یک سوکت بین سر و بدنه متصل کنی تا هر زمان که خواستی سر ربات را باز کنی، سیم پاره نشود.

کدهای مربوط به کالیبره کردن میزان حساسیت لمس هم در سورس پروژه وجود دارد و می‌توانی آن را متناسب با قطعه فلزی خودت تنظیم کنی.

مرحله ۱۲

جمع‌بندی پروژه و ایده‌های توسعه

به پایان این آموزش هیجان‌انگیز رسیدیم! ساخت این ربات عنکبوتی هوشمند به خوبی نشان می‌دهد که چطور ترکیب مکانیک، الکترونیک و هنر انیمیشن می‌تواند یک ماشین ساده را به یک کاراکتر زنده تبدیل کند.

حالا که با اصول طراحی حرکت در Bottango، پخش فایل‌های صوتی و کنترل تحت وب با برد ESP32 آشنا شدی، مهارت‌های فوق‌العاده‌ای برای اجرای پروژه‌های پیچیده‌تر رباتیک در دست داری.

ایده گرفتن از این پروژه می‌تواند نقطه شروعی برای ساخت ربات‌های بسیار پیشرفته‌تر باشد. تو می‌توانی انیمیشن‌های اختصاصی خودت را بسازی یا حتی سنسورهای اولتراسونیک برای تشخیص مانع به ربات اضافه کنی تا کاملا مستقل عمل کند. رباتی بساز که فقط قرار نیست راه برود، بلکه قرار است با حرکات خاص و صداهای بانمکش لبخند روی لب همه بیاورد.

حتما دست‌به‌کار شو و این عنکبوت دوست‌داشتنی را بساز. اگر در حین ساخت ایده جالبی برای ارتقای آن به ذهنت رسید، خوشحال می‌شویم در بخش نظرات تجربیاتت را با ما و بقیه اعضای آیسی‌مدار به اشتراک بگذاری.

فایل‌های پیوست

ZIP kame32-main.zip
ZIP Bottango-main.zip

تو میتونی اولین سازنده باشی!

اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر

این آموزش با استانداردهای اختصاصی آیسی‌مدار بازنویسی و بهینه‌سازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.

آموزش‌های مشابه

گفتگو‌های کاربران

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