ربات تانک آردوینو ESP32

0
361
ربات تانک آردوینو ESP32

در این پروژه می خواهیم یک ربات تانک آردوینو ESP32 با کنترلر بی سیم PS4 BT و مبتنی بر CAN را با استفاده از دو میکروکنترلر طراحی کنیم. تمرکز بیشتر ما در این پروژه بر روی ارتباط بین واحدهای کنترل الکترونیکی (ECU) مبتنی بر شبکه کنترلر (CAN) است که در حال حاضر در اتومبیل ها استفاده می شود.

برای ساخت این ربات از یک شاسی تانک با دو موتور T101 mini، یک Wemos D1 R32، یک D-duino32  با OLED، یک بورد موتور Adafruit ، یک سنسور TOF (VL53L0X) برای اندازه گیری فاصله، یک IMU ( MPU9250)  برای تشخیص شیب، جعبه باتری، تعدادی پیچ و مهره، سیم جامبر و دو فرستنده CAN (SN65HVD230) استفاده می کنیم.

رابط CAN چیست؟

قبل از اینکه نگاهی دقیق تر به ربات تانک آردوینو ESP32 بیندازیم، ابتدا درباره سیم کشی مورد استفاده در این ساخت و ساز توضیح می دهیم. تمرکز اصلی پروژه بر روی سرعت بالای رابط CAN می باشد به طوریکه سرعت بالا، بیشتر در مورد رفتار الکتریکی اطلاعات می دهد. ماژول ESP32 دارای یک کنترلر HS CAN یکپارچه است، بنابراین ما فقط باید یک فرستنده CAN به هر دو MCU (میکروکنترلر) وصل کنیم.

سیم کشی ماژول دوربین
سیم کشی ماژول دوربین

گیرنده های SN65HVD230 استفاده شده در مدار نیاز به ولتاژ ۳٫۳ ولت دارند و از همان سطح سیگنال استفاده می کنند. آنها از CRX و CTX به GPIO های میکروکنترلر متصل می شوند. سپس هر دو از طریق CANH و CANL به یکدیگر متصل می شوند. سپر موتور، سنسور TOF / IMU توسط I2C (SDA & SCL) به D1 R32 وصل می شوند. جعبه باتری و موتورها به سپر متصل شده و در نهایت D-duino32 به کمک یک رگولاتور DC  (AMS1117-5.0V)  شارژ می شود. از برق باتری به کمک رگولاتور برای D-duni32 استفاده می کنیم.

انتقال داده در ربات تانک آردوینو ESP32

ارتباطات بین ECU ها که توسط رابط CAN بوجود می آید به وسیله فریم ها اتفاق می افتد. در اینجا از یک قالب استاندارد استفاده می کنیم که برای هر پیام حداکثر ۸ بایت بارگذاری می کند. پیام ها (یا فریم ها) توسط شناسه های منحصر به فرد شبکه ارسال می شوند. این شناسه ها دارای اولویت هستند (پیامی که آیدی کوچکتری دارد، در صورت ارسال همزمان پیامها، دارای اولویت بیشتری است).

ارسال پیام های CAN بین گره ها
ارسال پیام های CAN بین گره ها

آیدی های ۰ x10،۰x11  و۰x12  برای انتقال اطلاعات از کنترلر PS4 متصل به ماژول D-duino32 از طریق رابط CAN به ماژول D1 R32 استفاده می شود که  سرعت چرخش و حرکت موتور و در واقع سرعت چرخش موتور به چپ و راست را محاسبه می کند. در مقابل D1 R32 یک پیام با آیدی ۰ x20 ارسال می کند که حاوی وضعیت سیستم از نظر فاصله با اشیا در جلوی آن (که توسط سنسور TOF بدست می آید)، وضعیت سیستم هشدار شیب (شیبهای بیش از ۴۵ درجه توسط سنسور IMU اعلام می شود) می باشد. اطلاعات وضعیت ربات بر روی صفحه OLED نشان داده می شود تا ال ای دی PS4 را کنترل کند و دستورات را برای دریافت بازخورد مستقیم به درایور نشان می دهد.

چگونه پیامها در ربات تانک آردوینو ESP32 ارسال می شوند؟

اغلب، اطلاعات برای ارسال باید به صورت بایت در یک فریم تبدیل شوند. به طور مثال با تبدیل مقدار اعشاری boolean به بیت می توان اطلاعاتی را ارسال کرد. البته برای هر میکروکنترلر هر نوع داده ای باید تبدیلات خاصی انجام دهد. به عنوان مثال: یک Arduino Uno از ۲ بایت برای یک عدد صحیح (۱۶ بیتی) استفاده می کند، اما ESP32 از ۴ بایت (۳۲ بیتی) استفاده می کند. در صورتیکه از چند میکروکنترلر استفاده می کنید باید به این مساله دقت کنید که داده های ورودی به هر میکروکنترلر باید چه نوعی باشد و در اصل پیام ها در چه قالبی باشند.

اتصال آردوینو به مدار

ما برای کنترل ترافیک داده ها بین D1 R32 و D-Duino32 ، از یک Arduino due استفاده می کنیم که دارای یک کنترلر CAN یکپارچه است. ماژول EPS32 از دو کانال پشتیبانی می کند، بنابراین می توانید دو فرستنده به آن وصل کنید. در این پروژه تنها یک سگمنت ساده بین دو میکروکنترلر وجود دارد.

پیامهای دریافتی در برنامه PC PuTTY

پیامهای دریافتی در پورت سریال USB چاپ می شوند و برای دسترسی به آنها از برنامه PC PuTTY استفاده می شود.

دوربین ربات تانک آردوینو ESP32

یک دوربین در جلوی ربات تانک آردوینو ESP32 نیز قرار می دهیم. این دوربین از برنامه پیاده سازی شده Arduino ESP32 SDK استفاده می کند. تنها تغییر در این دوربین استفاده از WiFi AP به جای STA می باشد. با این تغییرات، دوربین می تواند به موبایل وصل شود و شما می توانید در موبایل اندرویدی خود با استفاده از برنامه کروم، در یک صفحه html تصاویر دوربین را مشاهده کنید.

کد پروژه

لینک دانلود کد پروژه ربات تانک آردوینو ESP32

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

  • DOIT T101 Mini 1x
  • Wemos D1 R32 1x
  • Adafruit Motor Shield v2.3 1x
  • SparkFun IMU Breakout – MPU-9250 1x
  • Iqimti2rmyzuo4thu4e1ProtoCentral VL53L0X Laser ToF Sensor breakout board 1x
  • D-duino32 1x
  • AMS1117 5.0V 1x
  • SN65HVD230 2x
  • Arduino Due 1x    
  • Jumper wires 1x
  • Male Header 40 Position 1 Row (0.1”) ۱x
  • Pppc081lfbn rc smlFemale Header 8 Position 1 Row (0.1”) ۵x
  • Soldering iron (generic)
  • Solder Wire, Lead Free
  • Drill / Driver, Cordless
  • Multitool, Screwdriver
  • Arduino IDE
  • PuTTY

ارسال یک پاسخ

لطفا دیدگاه خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید