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

ربات اردک موج‌سوار با هوش مصنوعی

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

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

قلب تپنده این پروژه برد قدرتمند XIAO ESP32-S3 Sense هست که هم دوربین داره و هم از طریق وای‌فای تصاویر رو به صورت زنده به لپ‌تاپت می‌فرسته. لپ‌تاپ تو با استفاده از مدل هوش مصنوعی YOLOv8 تصاویر رو پردازش می‌کنه، جای اردک‌های دیگه رو پیدا می‌کنه و دستورات حرکتی رو به ربات برمی‌گردونه. ربات هم با دو تا موتور سروو و باله‌های پرینت سه‌بعدی شده‌اش، دقیقا به همون سمت شنا می‌کنه.

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

  1. ناوبری مبتنی بر بینایی: به کمک دوربین یکپارچه‌اش، کاملا قادره دوست‌های احتمالی خودش رو در محیط تشخیص بده
  2. حرکت مستقل: با استفاده از سیستم پیشران دو باله‌ای، به صورت کاملا خودکار تو آب حرکت می‌کنه
  3. پایداری عالی: یک تخته موج‌سواری خیلی خفن براش طراحی شده که باعث می‌شه تو آب تعادلش رو حفظ کنه و چپ نشه
  4. پردازش بلادرنگ (Real-time) خارج از برد: به لطف ارتباط وای‌فای ESP32، تصمیم‌گیری‌های سنگین و پرسرعت هوش مصنوعی روی لپ‌تاپ انجام می‌شه

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

  • باتری شارژی 3000 میلی‌آمپر ساعت
  • 2 عدد سوکت مادگی JST-PH 2.0
  • سوکت نری JST-PH 2.0
  • بردبورد کوچک
  • 2 عدد موتور سروو پیوسته (Continuous servo) برای حرکت 360 درجه
  • برد Seeed Studio XIAO ESP32S3 Sense با دوربین یکپارچه
  • ماژول دوربین 2640 (اختیاری، اگر دوربین یکپارچه نبود)
  • 14 عدد پین هدر
  • 4 عدد سیم جامپر (نری به نری)
  • 2 عدد سیم جامپر (مادگی به نری)
  • کابل USB به USB-C (یا Type-C به Type-C)
  • اسپیکر 2 وات 8 اهم
  • اردک لاستیکی بزرگ (11 سانتی‌متری)
  • 2 عدد باله شنای اردک (فایل پرینت در ادامه قرار داده شده)
  • تخته موج‌سواری (فایل پرینت در ادامه قرار داده شده)
  • باله زیر تخته موج‌سواری (فایل پرینت در ادامه قرار داده شده)
  • 2 عدد پیچ سایز 2.5x20
  • 2 عدد اردک لاستیکی کوچک (5 سانتی‌متری) برای تست کردن بینایی ربات
  • لاک ناخن نارنجی (اختیاری، برای رنگ کردن باله‌ها هم‌رنگ با نوک اردک)
  • کاتر یا تیغ جراحی (برای برش دادن اردک)
  • پنس (برای جایگذاری قطعات ریز)
  • پیچ‌گوشتی
  • چسب قطره‌ای (Superglue)
  • نوار چسب دوطرفه
  • چسب نواری برزنتی (Duck tape)
  • هویه
  • سیم لحیم
  • پرینتر سه‌بعدی
  • فیلامنت پرینت سه‌بعدی (ما از PLA سفید استفاده کردیم)
  • تفنگ چسب حرارتی
  • چسب حرارتی
  • یونولیت (کائوچو)
  • قیچی
  • چسب کاغذی
  • لپ‌تاپ
  • 2 عدد مهره فلزی سنگین (برای حفظ تعادل)
مرحله ۱

راه‌اندازی و اجرای کدها

قبل از این که دست به کاتر بشیم و اردک رو جراحی کنیم، بهتره کدهامون رو ران کنیم و مطمئن بشیم که همه‌چیز بدون ارور کار می‌کنه.

  1. یک عدد لپ‌تاپ

مسیر انتقال داده‌ها: تصویر JPEG از دوربین ESP32 ← ارسال با سرعت 5 فریم در ثانیه ← لپ‌تاپ (پردازش با مدل YOLOv8) ← ارسال دستور جهت‌گیری ← موتورهای سروو متصل به ESP32.

  1. ماژول دوربینی که روی اردک نصبه، تو هر ثانیه حدود 5 تا عکس می‌گیره و از طریق وای‌فای می‌فرسته به لپ‌تاپت.
  2. لپ‌تاپ یک سرور پایتونی رو اجرا می‌کنه که توش مدل هوش مصنوعی YOLOv8 در حال کاره. این مدل عکس‌ها رو بررسی می‌کنه تا ببینه آیا اردکی تو تصویر هست یا نه. اگر بود، آیا تو سمت چپ تصویره، وسط تصویره یا سمت راست؟
  3. ربات جواب رو از لپ‌تاپ دریافت می‌کنه و بر اساس اون، دو تا موتور (باله‌هاش) رو کنترل می‌کنه:
  4. اگر اردکی پیدا نشد ← ربات درجا می‌چرخه تا محیط اطرافش رو اسکن کنه.
  5. اگر اردک سمت چپ یا راست بود ← ربات به همون سمت می‌پیچه.
  6. اگر اردک دقیقا وسط کادر بود ← ربات مستقیم به سمت جلو حرکت می‌کنه.
  7. اگر اردک خیلی بزرگ دیده شد (یعنی ربات خیلی بهش نزدیک شده) ← موتورها متوقف می‌شن.

مراحل راه‌اندازی (Setup):

  1. اول مطمئن شو که نرم‌افزار Arduino IDE رو نصب کردی و تمام فایل‌های پروژه رو هم از گیت‌هاب دانلود کردی. تو محیط آردوینو باید پکیج بردهای ESP32 رو هم نصب کنی (از مسیر Boards Manager کلمه esp32 by Espressif Systems رو سرچ و نصب کن). برای آپلود کدها، ما از برد "ESP32 Dev Module" تو لیست استفاده کردیم.
  2. حالا برای نصب پیش‌نیازهای سرور پایتون، ترمینال (Terminal یا CMD) رو باز کن و این دستور رو اجرا کن:
Shell
pip install -r server/requirements.txt
  1. برای روشن کردن سرور، با ترمینال وارد پوشه server/ (که از گیت‌هاب دانلود کردی) بشو و این دستور رو اجرا کن:
TXT
uvicorn server:app --host 0.0.0.0 --port 8000
  1. برای این که ببینی اردک دقیقا داره چی می‌بینه، مرورگرت رو باز کن و این آدرس رو وارد کن:
  2. آی‌پی آدرس (IP Address) لپ‌تاپت تو شبکه وای‌فای رو پیدا کن (مثل 192.168.1.42). جلوتر تو کدهای آردوینو به این آدرس نیاز داریم.

مراحل آپلود کد (روی برد ESP32):

  1. نرم‌افزار Arduino IDE رو باز کن و فایل duck_robot.ino رو از داخل پوشه‌های دانلود شده (مسیر firmware/duck_robot/) لود کن.
  2. تو همون خط‌های اول کد، باید اطلاعات شبکه‌ات رو جایگزین علامت سوال‌ها کنی:
  3. متغیر WIFI_SSID = "اسم وای‌فای شما" (پیشنهاد می‌کنیم از هات‌اسپات گوشیت استفاده کنی تا اگر خواستی اردک رو ببری تو دریاچه یا پارک که وای‌فای نیست، مشکلی نداشته باشی).
  4. متغیر WIFI_PASSWORD = "رمز وای‌فای شما"
  5. متغیر SERVER_URL = "http://<آی‌پی-لپ‌تاپ-شما>:8000/detect" (اینجا همون آی‌پی آدرسی که پیدا کرده بودی رو بذار).
  6. حالا که نرم‌افزار آماده‌ست، بریم سراغ ساخت فیزیکی اردک سایبری!
مرحله ۲

آماده‌سازی تخته موج‌سواری و باله‌ها

برای این که اردک سنگین ما بتونه روی آب شناور بمونه و غرق نشه، باید باله‌ها و تخته موج‌سواریش رو آماده کنیم.

  1. یک دستگاه پرینتر سه‌بعدی
  2. فیلامنت پرینت سه‌بعدی
  3. لاک ناخن نارنجی
  4. بست کمربندی
  5. دو عدد مهره فلزی سنگین

مراحل انجام کار:

  1. با استفاده از فایل‌های سه‌بعدی که در انتهای آموزش قرار داده شده، تخته موج‌سواری، باله زیر تخته و باله‌های شنای خود اردک رو پرینت بگیر.
  2. باله زیرین رو به تخته موج‌سواری متصل کن.
  3. در قسمت پایین باله تخته یک سوراخ تعبیه شده. با استفاده از یک بست کمربندی، دو تا مهره سنگین فلزی رو از این سوراخ رد کن و محکم ببند. این وزنه‌ها مثل یک لنگر عمل می‌کنن و باعث می‌شن تخته روی آب تعادلش رو حفظ کنه و چپ نشه.
  4. اختیاری: برای زیبایی بیشتر، می‌تونی باله‌های شنای پرینت‌شده رو با لاک نارنجی رنگ کنی تا دقیقا با رنگ نوک اردک ست بشه.
مرحله ۳

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

برای این که اردک بتونه حرکت کنه و ببینه، باید یک جراحی باز روی اون انجام بدیم! اردک 11 سانتی‌متری (مدل بزرگ) بیمار امروز ماست.

  1. اردک لاستیکی بزرگ (11 سانتی‌متری)
  2. کاتر یا تیغ جراحی
  3. تفنگ چسب حرارتی
  4. چسب حرارتی

مراحل انجام کار:

  1. با استفاده از کاتر، سر اردک رو کاملا از بدنش جدا کن.
  2. یک شکاف نسبتا بزرگ در قسمت پشت بدن اردک ایجاد کن، اما حواست باشه که برش رو تا ته نری و حدود 2 سانتی‌متر با دم اردک فاصله بذاری.
  3. یک شکاف هم در پشت سر اردک ایجاد کن. اینجا هم دقت کن که برش از تاج سر بالاتر نره، چون بعدا باید بتونیم این شکاف‌ها رو دوباره به هم بدوزیم.
  4. با استفاده از باله‌هایی که پرینت گرفتی، اندازه بگیر و دو تا سوراخ در دو طرف شکم اردک برای اتصال باله‌ها در بیار.
  5. لنز ماژول دوربین رو متر کن و یک سوراخ دایره‌ای روی پیشونی اردک (به عنوان چشم جدید سایبری) در بیار.
  6. یک شکاف کوچک هم روی نوک اردک ایجاد کن تا پورت USB-C بتونه ازش بیرون بزنه.
  7. با چسب حرارتی، سوراخ (سوت) زیر شکم اردک رو کاملا پر و آب‌بندی کن تا مطمئن بشی هیچ آبی از پایین وارد بدنش نمی‌شه.
مرحله ۴

جایگذاری موتورهای سروو در بدن

جراحی روی بدن رو ادامه می‌دیم. تو این مرحله باید موتورهای سروو (Servo Motors) رو داخل بدن جا بدیم تا بیمار ما بتونه باله‌های جدیدش رو حرکت بده.

  1. بدن آماده‌شده اردک (از مرحله 3)
  2. یونولیت (بریده شده به اندازه مناسب)
  3. نوار چسب دوطرفه
  4. قیچی
  5. دو عدد موتور سروو پیوسته (Continuous)
  6. چسب برزنتی (Duck tape)
  7. دو عدد باله پرینت‌شده
  8. دو عدد پیچ 2.5x20
  9. پیچ‌گوشتی

مراحل انجام کار:

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

اتصال باتری و بردبورد

حالا که موتورها نصب شدن، باید برق‌رسانی و اتصالاتشون رو تکمیل کنیم.

  1. بدن اردک (همراه با موتورها از مرحله 4)
  2. یک عدد باتری 3000 میلی‌آمپر ساعت
  3. یک عدد بردبورد کوچک
  4. چهار عدد سیم جامپر (نری به نری)
  5. دو عدد سیم جامپر (مادگی به نری)
  6. یک عدد سوکت مادگی JST-PH 2.0
  7. یک عدد سوکت نری JST-PH 2.0

مراحل انجام کار:

  1. باتری رو روی بیس یونولیتی داخل اردک، دقیقا کنار موتورها قرار بده.
  2. بردبورد رو طوری ببر که فقط یک تکه کوچک از ریل تغذیه‌اش باقی بمونه (شامل 4 سوراخ مثبت و 4 سوراخ منفی).
  3. سیم قرمز (مثبت) سوکت نری JST-PH 2.0 رو به یکی از سوراخ‌های مثبت بردبورد وصل کن و سیم مشکی (منفی) رو به یکی از سوراخ‌های منفی.
  4. همین کار رو برای سوکت مادگی JST-PH 2.0 هم تکرار کن (این سوکت جلوتر به برد ESP32 وصل می‌شه). حالا سوکت نری بردبورد رو به سوکت باتری متصل کن تا برق وارد بردبورد بشه.
  5. یکی از سیم‌های جامپر نری به نری رو به خروجی زمین (Ground - معمولا سیم قهوه‌ای) یکی از موتورها وصل کن و سر دیگه‌اش رو بزن به ردیف منفی بردبورد. با یک جامپر نری به نری دیگه، سیم تغذیه (معمولا قرمز) همون موتور رو به ردیف مثبت بردبورد متصل کن. حالا یک جامپر مادگی به نری بردار و به سیم سیگنال موتور (سیم نارنجی یا زرد) وصل کن و سر دیگه‌اش رو فعلا آزاد بذار (این سیم جلوتر به برد ESP32 وصل می‌شه).
  6. مرحله 5 رو دقیقا برای موتور دوم و سه تا سیم جامپر باقی‌مونده‌ات تکرار کن.

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

مرحله ۶

نصب ESP32 و ماژول دوربین

تو این مرحله تمرکز ما روی سر اردک سایبری خواهد بود. قراره دوربین (چشم جدید) و برد ESP32 (مغز ربات) رو نصب کنیم تا سایبورگ ما بتونه ببینه و فکر کنه.

  1. سر اردک (که تو مرحله 3 جدا کرده بودیم)
  2. برد ESP32-S3 Sense
  3. ماژول دوربین 2640 (اختیاری)
  4. 14 عدد پین هدر
  5. هویه
  6. سیم لحیم
  7. یک عدد سوکت مادگی JST-PH 2.0

مراحل انجام کار:

  1. پین هدرها رو تو سوراخ‌های مربوط به پایه‌های ESP32 لحیم کن. این کار اتصال سیم‌های جامپر رو خیلی راحت‌تر می‌کنه.
  2. با استفاده از هویه، سیم قرمز (مثبت) سوکت مادگی JST-PH 2.0 رو به پد (Via) با علامت مثبت (+) در پشت برد ESP32 لحیم کن و سیم مشکی (منفی) رو به پد منفی (-) کنار اون متصل کن (به دیاگرام دقت کن).
  3. اگر از ماژول مجزای دوربین 2640 استفاده می‌کنی، لنز اون رو از داخل سوراخی که روی پیشونی اردک درآورده بودی رد کن و با پیچ محکم کن، بعدش فلت دوربین رو به برد ESP32 متصل کن. اما اگر از دوربین روی‌بردی (Integrated) استفاده می‌کنی، فیکس کردنش تو سوراخ یکم سخت‌تره و باید با کمک پنس و چسب قطره‌ای این کار رو با دقت انجام بدی.
  4. کل مجموعه برد و دوربین رو طوری داخل سر اردک قرار بده که پورت USB-C دقیقا از شکاف نوک اردک بیرون بزنه و سوکت JST-PH 2.0 هم از پایین سر آویزون بمونه.

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

مرحله ۷

اتصال سر و بدن به یکدیگر

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

  1. بدن اردک (از مرحله 5)
  2. سر اردک (از مرحله 6)

مراحل انجام کار:

  1. سوکت مادگی JST-PH 2.0 که از بردبورد داخل بدن بیرون اومده رو به سوکت نری JST-PH 2.0 که از برد ESP32 آویزون بود متصل کن (تو عکس با حرف B مشخص شده).
  2. سیم سیگنال موتور سمت چپ رو به پین شماره 4 برد ESP32 وصل کن و سیم سیگنال موتور راست رو به پین شماره 10. (نکته مهم: حتما چک کن که این شماره پین‌ها دقیقا همون‌هایی باشن که تو کد برنامه‌نویسی وارد کردی).
مرحله ۸

تست نهایی و بخیه زدن بیمار!

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

  1. مجموعه سر و بدن اردک (از مرحله 7)
  2. کابل USB-C
  3. چسب کاغذی
  4. چسب قطره‌ای

مراحل انجام کار:

  1. فایل duck_robot.ino رو که تو مرحله 1 آماده کرده بودی، از طریق پورت USB-C (نوک اردک) روی برد آپلود کن. در نهایت، سوکت باتری رو به بردبورد وصل کن تا ربات روشن بشه.
  2. اگر خطایی رو کامپیوترت نیومد و قطعات رو درست وصل کرده باشی، هر دو تا باله باید شروع به حرکت کنن و با باز کردن لینک تو مرورگرت، باید بتونی تصویر زنده دوربین رو ببینی. چند تا اردک پلاستیکی کوچیک رو بیار تو کادر دوربین تا ببینی ربات چطور بهشون واکنش نشون می‌ده!
  3. اگر همه‌چیز بدون نقص کار کرد، وقتشه که بیمار رو بخیه بزنی و برای موج‌سواری آماده‌اش کنی! سیم‌های اضافی رو به آرومی توی فضاهای خالی سر و بدن جا بده. اگر سیم‌ها خیلی شلوغ و درهم‌برهم شدن، می‌تونی با چسب کاغذی دسته‌بندیشون کنی.
  4. وقتی سیم‌ها کاملا داخل بدنه مرتب شدن، شکاف پشت بدن و پشت سر رو با دقت و با استفاده از چسب قطره‌ای ببند.
  5. صبر کن تا چسب خشک بشه و در آخر سر اردک رو هم با چسب قطره‌ای به بدنش متصل کن. (اگر هنوز مطمئن نیستی و حس می‌کنی ممکنه ربات نیاز به دیباگ داشته باشه، چسب زدن سر رو بذار برای آخرین مرحله).
مرحله ۹

اولین موج‌سواری اردک سایبری

بیمار ما با موفقیت از اتاق عمل بیرون اومده و حالا به یک ربات سایبری موج‌سوار تبدیل شده! وقتشه که برای اولین بار مهارت‌هاش رو روی آب به نمایش بذاره.

  1. اردک سایبری تکمیل‌شده
  2. تخته موج‌سواری (از مرحله 2)
  3. نوار چسب دوطرفه
  4. دو عدد اردک لاستیکی کوچک (دوستای ربات)

مراحل انجام کار:

  1. قبل از این که اردک رو ببری تو استخر یا دریاچه، حتما اون رو تو یک محیط کنترل‌شده مثل یک تشت آب تست کن.
  2. با استفاده از چسب دوطرفه قوی، اردک رو محکم روی تخته موج‌سواریش بچسبون و بعدش همراه با اردک‌های کوچیک بندازش تو تشت آب.
  3. وقتی دیدی ربات تو آب تعادل داره و درست کار می‌کنه، دیگه وقتشه ببریش تو آب‌های آزاد و رهاش کنی تا اردک‌های واقعی رو بترسونه! از بازی با دوست سایبری جدیدت لذت ببر.

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

STL SurfboardFin.stl
STL Surfboard.stl
STL DuckLegs.stl

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

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

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

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

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

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