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

ربات بازیافت هوشمند با آردوینو و هوش مصنوعی

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

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

توی این پروژه جذاب از آیسی‌مدار، می‌خوایم رباتی به اسم Zeno بسازیم. این ربات یک بازوی مکانیکی قوی داره که با سنسور فشار کار می‌کنه و به محض اینکه نزدیک یک جسم (مثل یک بطری آب) بشه، اون رو تشخیص میده و چنگک‌هاش رو می‌بنده تا جسم رو بلند کنه. برای هوشمندسازی Zeno از ترکیبی از بردهای آردوینو، سنسورهای تشخیص چهره و اشیاء Huskylens، ماژول تشخیص صدا و چندین سنسور لیزری Lidar استفاده کردیم تا بدون نیاز به پردازش ابری (Cloud)، تمام محاسبات رو به صورت محلی و سریع انجام بده.

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

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

  • 10 عدد برد آردوینو Uno
  • برد آردوینو مگا (Arduino Mega)
  • شیلد درایور موتور آردوینو (Motor Shield)
  • 2 عدد ماژول دوربین هوشمند Huskylens
  • بست کابل
  • کلید کلنگی (Toggle switch)
  • 2 عدد بلبرینگ با ابعاد 12x18x4 میلی‌متر
  • ماژول تشخیص صدا
  • پک باتری 12 ولت
  • 4 عدد لوله اکریلیک با ابعاد 2 در 13 اینچ
  • 2 عدد موتور گیربکس 12 ولت
  • 2 عدد کوپلر فلنج (Flange coupler)
  • 2 عدد سرووموتور سریال برند Waveshare
  • برد درایور سرووموتور سریال
  • سنسور فشار
  • انواع فنر کششی
  • 2 عدد چرخ اصلی
  • نوار گریپ (ضد لغزش)
  • 2 ورق اکریلیک با ابعاد 18 در 24 اینچ (ضخامت نیم اینچ)
  • چرخ هرزگرد (Caster wheel)
  • سرووموتور بزرگ با گشتاور بالا
  • عملگر خطی (Linear actuator) با طول 10 اینچ
  • 5 عدد سنسور لیدار VL53L0X
  • سیم‌های رابط، فیوز، پیچ‌های 2 و 3 میلی‌متری
مرحله ۱

آشنایی با Zeno و منطق طراحی آن

همسرم معتقده که هر ربات خوبی باید یک اسم داشته باشه، به همین دلیل بعد از کلی هم‌فکری رسیدیم به اسم Zeno. این ربات در واقع الهام‌گرفته از ربات MARS از شرکت Innate.bot هست. من تجربه زیادی با ربات‌های مختلف دارم.

مثلا دو نسخه از سگ رباتیک Aibo (مدل‌های 1999 و 2024) رو دارم، یا ربات Astro از آمازون که با دعوت‌نامه خریدمش. البته همیشه دوست داشتم یک ربات Heathkit Hero داشته باشم که نشد، و الان هم منتظر نسخه انسان‌نمای Neo هستم که قراره سال 2026 برسه. اگر دقت کنی تمام این اسم‌ها (Aibo, Astro, Hero, Neo, Memo) به حرف O ختم میشن، پس Zeno کاملا با این خانواده هم‌خونی داره.

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

یکی از مشکلاتی که با خیلی از سیستم‌های رباتیک دارم اینه که فقط به دوربین (داده‌های X و Y) متکی هستن و برای پیدا کردن عمق (داده Z) محاسبات ابری خیلی سنگینی انجام میدن. در حالی که اگر ربات بتونه با دوربین یک بطری رو تشخیص بده و به سمتش بره، با یک سنسور لیزری ساده (Lidar) می‌تونه فاصله دقیق تا بطری رو بسنجه و چنگک رو دقیقا تو مرکز بطری قرار بده.

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

سیستم‌های هوش مصنوعی معمولا برای پردازش صدا و تصویر به توان پردازشی بالایی تو فضای ابری نیاز دارن. اما ما با استفاده از دوربین Huskylens و یک ماژول تشخیص صدا، تونستیم پردازش‌های پایه مثل کنترل صوتی و تشخیص تصویر رو با هزینه‌ای زیر 50 دلار و به صورت کاملا محلی (Local) روی خود ربات پیاده کنیم. A close command will grasp the bottle.

مرحله ۲

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

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

مرحله ۳

پرینت سه‌بعدی قطعات رابط و نگه‌دارنده

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

مرحله ۴

نصب موتورها و سیستم حرکتی

موتورهای گیربکس و چرخ‌ها رو به شاسی زیرین (اکریلیک پایینی) متصل کردم. اون چهار تا قطعه سفید رنگی که تو عکس می‌بینی، اول قرار بود نگهدارنده ربات هوش مصنوعی MARS باشن تا اون ربات بتونه به Zeno دستور بده، اما فعلا اون ایده رو کنار گذاشتم؛ هرچند براکت‌هاش هنوز روی بدنه باقی مونده.

مرحله ۵

نصب سنسورهای فاصله‌سنج (Lidar)

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

مرحله ۶

راه‌اندازی سیستم بینایی با دوربین‌های Huskylens

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

مرحله ۷

ارتباطات بین بردهای آردوینو

همون‌طور که گفتم، این ربات از چندین برد آردوینو برای وظایف مختلف استفاده می‌کنه که همگی به یک آردوینو مگا (Arduino Mega) به عنوان مغز اصلی متصل هستن. جدول اتصالات بین بردها به شکل زیره:

آردوینو شماره 1 (لیدار جلو راست) پین 13 ⬅ آردوینو 5 (مگا) پین 48 آردوینو شماره 2 (لیدار چپ) پین 13 ⬅ آردوینو 5 (مگا) پین 49 آردوینو شماره 3 (لیدار دوربین جلو) پین 13 ⬅ آردوینو 5 (مگا) پین 30 آردوینو شماره 4 (دوربین جلو پایین) پین 6 ⬅ آردوینو 5 (مگا) پین 26 آردوینو شماره 4 (دوربین جلو پایین) پین 7 ⬅ آردوینو 5 (مگا) پین 24 آردوینو شماره 4 (دوربین جلو پایین) پین 8 ⬅ آردوینو 5 (مگا) پین 22 آردوینو شماره 6 (لیدار عقب چپ) پین 13 ⬅ آردوینو 5 (مگا) پین 46 آردوینو شماره 7 (لیدار عقب راست) پین 13 ⬅ آردوینو 5 (مگا) پین 47 آردوینو شماره 8 (دوربین بالایی) پین 6 ⬅ آردوینو 5 (مگا) پین 27 آردوینو شماره 8 (دوربین بالایی) پین 7 ⬅ آردوینو 5 (مگا) پین 25

آردوینو شماره 8 (دوربین بالایی) پین 8 ⬅ آردوینو 5 (مگا) پین 23 آردوینو شماره 9 (فرمان صوتی Come) پین 13 ⬅ آردوینو 5 (مگا) پین 45 آردوینو شماره 9 (فرمان صوتی Trash) پین 7 ⬅ آردوینو 10 پین 7 آردوینو شماره 9 (فرمان صوتی Trash) پین 8 ⬅ آردوینو 5 (مگا) پین 43 آردوینو شماره 11 (عملگر بازو) پین 13 ⬅ آردوینو 10 پین 9 آردوینو 5 (مگا) پین 41 ⬅ آردوینو 11 پین 4

مرحله ۸

افزودن فنر برای حفظ تعادل بازو

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

مرحله ۹

آماده‌سازی چنگک (Gripper) و چرخ‌ها

برای اینکه چنگک‌ها بتونن اجسام رو محکم نگه دارن، روی لبه‌هاشون از نوار گریپ (ضد لغزش) استفاده کردم. همین نوار رو دور چرخ‌ها هم پیچیدم تا حرکت ربات روی فرش خونه روان‌تر بشه.

مرحله ۱۰

مدار کنترل عملگر خطی بازو

آردوینو شماره 11 وظیفه کنترل بازوی خطی (Linear Actuator) رو بر عهده داره و با استفاده از 3 تا رله، جهت حرکت بازو رو مشخص می‌کنه. برق این بخش رو با 4 تا باتری قلمی (AA) به صورت مجزا تامین کردم.

مرحله ۱۱

برنامه‌های آینده برای ارتقای ربات

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

آردوینوهای 1، 2، 6 و 7 در حال حاضر به کنترلر موتور متصل نیستن و فقط برای تشخیص موانع جلو و پهلوها استفاده میشن. جالب اینجاست که گاهی اوقات چیزهایی رو تشخیص میدن که من اصلا نمی‌بینم!

سگ رباتیک من (Aibo) هم گاهی به چیزهای نامرئی پارس می‌کنه و تو نقشه‌اش اونا رو علامت می‌زنه. حتی ربات Astro آمازون هم بعضی وقت‌ها دور یک نقطه خالی می‌چرخه! قصد دارم در آپدیت‌های بعدی این باگ رو تو Zeno برطرف کنم.

مرحله ۱۲

یک ترفند عالی: برنامه‌نویسی آردوینو با کمک هوش مصنوعی

من برای برنامه‌نویسی این همه برد آردوینو از یک ترفند فوق‌العاده استفاده کردم! مثلا برای برنامه‌نویسی پیچیده‌ترین بخش یعنی آردوینو مگا (که موتورها رو کنترل می‌کنه)، فقط کافی بود خواسته‌هام رو به صورت یک متن ساده بنویسم. متنی که نوشتم این بود: "فرض کن یک برد آردوینو مگا با شیلد موتور داریم. موتورها باید با 80 درصد توان کار کنن.

پین‌های ورودی شامل 48, 49, 30, 26, 24, 22, 46, 47, 27, 25, 23, 45, 43 هستن و پین 4 خروجی محسوب میشه. موتورها در ابتدا خاموش باشن. سه مرحله داریم: مرحله اول وقتی شروع میشه که پین 45 یک (High) بشه. تو مرحله اول اگر پین 25 یک شد، هر دو موتور برن جلو. اگر پین 27 یک شد، موتور راست بره جلو و چپ برگرده عقب.

اگر پین 23 یک شد، موتور چپ بره جلو و راست برگرده عقب. اگر پین 43 یک شد، از مرحله یک برو به مرحله دو. تو مرحله دو: هر دو موتور 5 ثانیه خاموش باشن.

هر دو موتور 5 ثانیه برگردن عقب. موتور راست بره جلو و چپ برگرده عقب برای 3 ثانیه، بعد هر دو استاپ کنن. همین منطق رو برای پین‌های دیگه هم تو مرحله سوم تعریف کردم."

این متن رو دقیقا کپی کردم تو هوش مصنوعی (Google AI) و در کمال تعجب کدهای کامل و بدون نقص رو بهم تحویل داد! کاری که ممکن بود ساعت‌ها زمان ببره، تو کمتر از 5 دقیقه انجام شد.

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

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

STL arm holder.stl
F3D armservoholder.f3d
STL armservoholder.stl

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

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

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

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

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

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