آموزش بخش آردوینو CarBot

مقدمه

ربات CarBot از یک میکروکنترلر (microcontroller unit) (MCU) به عنوان پل ارتباطی بین بدنه ربات و گوشی هوشمند استفاده می‌کند. به عبارت دیگر میکروکنترلر یک Firmware می‌باشد که ارتباط بین دو بخش اجزاء الکترونیکی و گوشی ربات را برقرار می‌سازد. در این آموزش، تنظیمات سخت‌افزاری، پیکربندی نرم‌افزار، و تست عملکردهای مختلف را قدم به قدم بررسی می‌کنیم

وظایف اصلی میکروکنترلر

    1. دریافت دستورات کنترلی و تنظیمات سنسور

      • ارتباط با اپلیکیشن اندروید از طریق پورت سریال USB.

    2. تولید سیگنال‌های کنترلی سطح پایین

      • خروجی PWM برای کنترل موتورها و سایر اجزای ربات.

    3. مدیریت چراغ‌های راهنما

      • فعال/غیرفعال کردن چراغ راهنمای چپ و راست.

    4. اندازه‌گیری مسافت پیموده شده چرخ‌ها

      • استفاده از سنسورهای نوری سرعت روی چرخ‌های جلو/عقب.

    5. محاسبه ولتاژ باتری

      • استفاده از مدار تقسیم‌کننده ولتاژ (Voltage Divider).

    6. اندازه‌گیری فاصله تا موانع

      • استفاده از سنسور اولتراسونیک (Sonar).

    7. کنترل LEDهای وضعیت و نورپردازی

      • مدیریت چراغ‌های جلو، عقب و نشانگر وضعیت.

    8. ارسال داده‌های سنسور به اپلیکیشن

      • انتقال اطلاعات از طریق پورت سریال USB.

    9. نمایش وضعیت ربات روی نمایشگر

      • نشان دادن اطلاعات حیاتی روی صفحه OLED.

  • فِرم‌وِیر پیشنهادی:

    • Arduino Nano با میکروکنترلر ATmega328P

    • ESP32 Development Kit

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

چگونگی عملکرد

یک MCU دستورهای کنترل خودرو و سیگنال‌های نشانگر را از طریق اتصال سریال دریافت می‌کند. این دستورها را به سیگنال‌های PWM برای کنترلر موتور تبدیل می‌کند و LEDs را با توجه به سیگنال نشانگر تغییر می‌دهد. برنامه Arduino همچنین چرخش‌های چرخ را با شمارش وقفه‌های حسگرهای نوری روی چرخ‌های جلو چپ و راست ردیابی می‌کند.
ولتاژ باتری را با اندازه‌گیری میانگین متحرک در مدار تقسیم ولتاژ محاسبه می‌کند. همچنین می‌تواند فاصله تا موانع جلوی خودرو را با حسگر اولتراسونیک اندازه‌گیری کند. این اندازه‌گیری‌ها از طریق لینک سریال به برنامه Android ارسال می‌شود.

ویژگیتوضیحات
کنترل موتورPWM برای درایور موتور (مثلاً L298N)
سنسور سرعت چرخشمارش پالس‌های نوری چرخ‌های جلو/عقب با استفاده از وقفه‌ها
ولتاژ باتریمحاسبه ولتاژ با میانگین متحرک از طریق مدار تقسیم ولتاژ
فاصله‌سنج اولتراسونیکاندازه‌گیری فاصله تا موانع (فعال با HAS_SONAR 1)
LEDهای نشانگرکنترل چراغ‌های راهنما و چراغ‌های جلو/عقب

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

ربات مقوایی هوش مصنوعی دست ساز

ربات دست ساز(DIY)

با مقوا و تجهیزات اولیه

کد آماده

با پشتیبانی از تمام سنسورها
دانلود
ربات هوش مصنوعی - خرید ماشین آماده

ماشین سبک

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

کد آماده

با پشتیبانی از تمام سنسورها
دانلود
ربات هوش مصنوعی - پرینت سه بعدی

ماشین باربری کنترلی RC

شاسی ماشین کنترلی RC، بدنه از طریق پرینت سه بعدی

کد آماده

با پشتیبانی از تمام سنسورها
دانلود
ربات هوش مصنوعی - با آموزش چندگانه هوش مصنوعی

ربات همه منظوره

ربات پیچیده و با کاربری نیمه تجاری، پیاده سازی پیچیده

کد آماده

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

بدنه ماشین کنترلی

شاسی و بدنه ماشین RC بازاری

کد آماده

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

توضیح کد ارائه شده برای هر مدل از بدنه و تجهیزات جانبی

پیکربندی نرم افزاری

ما برای نصب و راه‌اندازی برنامه روی برد آردوینو از نرم افزار AdruinoIDE استفاده می کنیم. شما ابتدا این برنامه را دانلود و نصب نمایید . سپس باید کتابخانه‌های مورد نیاز از طریق برنامه AdruinoIDE نصب شود، این کار از طریق منوی
Tools ➡️ Manage Libraries
انجام می گیرد.

دو کتابخانه را باید نصب کنیم
1- Adafruit_SSD1306 
2- Adafruit_GFX Library

نام کتابخانه را جستجو کنید و سپس آخرین نسخه را نصب یا آپدیت نمایید.

نصب کتابخانه برای آردوینو
2نصب کتابخانه برای آردوینو
اگر نیاز به درایورهای WCH340 از توسعه دهنده چینی نیاز پیدا کردید، آنها را از آدرس‌های روبرو دانلود کنید

کیت توسعه ESP32

جهت نصب برد ESP32  روی آردوینو، مراحل زیر را انجام دهید.
1- در نرم افزار arduinoIDE وارد منوی
File> Preferences:
شوید.
و سپس در پنجره باز شده لینک https://dl.espressif.com/dl/package_esp32_index.json
را در قسمت “Additional Board Manager URLs” وارد نمایید و دکمه ok را کلیک کنید.
اگر شما برد ESP8266 را دارید از آدرس های زیر استفاده نمایید.
https://dl.espressif.com/dl/package_esp32_index.json,
http://arduino.esp8266.com/stable/package_esp8266com_index.json
توسعه کیت ESP32

تنظیمات Arduino nano برای نصب

  • Tools ➡️ Board ➡️ Arduino AVR Boards ➡️ Arduino Nano
  • Tools ➡️ Processor ➡️ ATmega328P (Old Bootloader)
  • Tools ➡️ Port ➡️ *Select the USB port*

تنظیمات ESP32 برای نصب

  • Tools ➡️ Board ➡️ ESP32 Arduino ➡️ ESP32 Dev Module
  • Tools ➡️ Port ➡️ *Select the USB port*

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

برای آپلود برنامه به برد آردوینو از منوی Sketch ➡️ Upload استفاده کنید یا از کلید ترکیبی (CTRL+U) یا از آیکن آپلود در بالا سمت چپ 

 

تست برنامه

ابتدا از منوی Tools ➡️ Serial Monitor پنل مانیتور سریال را باز می کنیم
سپس با دستورات زیر می توانیم ربات را تست نماییم.

جدول دستورات ارسال پیام به ربات CarBot

دستورفرمتپارامترهاتوضیحاتمثالنکات
cc<چپ>,<راست>-255 تا 255 (عدد صحیح)کنترل سرعت و جهت موتورها:
0: توقف
255: حداکثر سرعت به جلو
-255: حداکثر سرعت به عقب
c128,-128مثبت: چرخش به جلو
منفی: چرخش به عقب
مقادیر کمتر: سرعت کمتر
ii<چپ>,<راست>0 (خاموش) یا 1 (روشن)کنترل چراغ‌های راهنما:
i1,0: چراغ چپ
i0,1: چراغ راست
i1,1: هر دو
i0,0: خاموش
i1,0چراغ‌ها هر ۱ ثانیه یکبار فلاش می‌زنند
فقط یک حالت همزمان فعال است
ll<جلو>,<عقب>0 تا 255 (شدت نور)تنظیم روشنایی LEDهای جلو و عقب:
0: خاموش
255: حداکثر روشنایی
l200,50نیازمند فعال‌سازی HAS_LEDS_FRONT و HAS_LEDS_BACK
ss<زمان_ms>عدد مثبت (میلی‌ثانیه)تنظیم فاصله زمانی بین اندازه‌گیری‌های سنسور اولتراسونیک
• پیش‌فرض: 1000
s500در صورت خطا: ارسال MAX_SONAR_DISTANCE
ww<زمان_ms>عدد مثبت (میلی‌ثانیه)تنظیم فاصله زمانی گزارش سرعت چرخ‌ها (RPM)
• پیش‌فرض: 1000
w2000RPM به عنوان میانگین در بازه زمانی محاسبه می‌شود
vv<زمان_ms>عدد مثبت (میلی‌ثانیه)تنظیم فاصله زمانی گزارش ولتاژ باتری
• پیش‌فرض: 1000
• ارسال vmin، vlow و vmax
v2000ولتاژ با فیلتر میانگین متحرک (اندازه ۱۰) محاسبه می‌شود
hh<زمان_ms>عدد مثبت یا -1 (غیرفعال)تنظیم زمان قطع فعالیت ربات در صورت عدم دریافت پیام حیات (Heartbeat)
• پیش‌فرض: -1 (غیرفعال)
h3000بعد از ۳ ثانیه عدم دریافت پیام، ربات متوقف می‌شود
bb<زمان_ms>عدد مثبت (میلی‌ثانیه)تنظیم زمان بازنشانی سنسور ضربه
• پیش‌فرض: 750
b1000بعد از ۱ ثانیه، سنسور ضربه به حالت اولیه بازمی‌گردد
nn<رنگ>,<وضعیت>رنگ: b (آبی), g (سبز), y (زرد)
وضعیت: 0 یا 1
کنترل LEDهای وضعیت:
n b,1: روشن کردن آبی
n g,0: خاموش کردن سبز
n g,1نیازمند فعال‌سازی HAS_LEDS_STATUS
ffدرخواست اطلاعات ربات (نوع و ویژگی‌های فعال)
• پاسخ: f<نوع_ربات>:v:i:s:b...
ffRTR_V1:v:i:s:b...پاسخ شامل لیستی از قابلیت‌ها (مانند v برای ولتاژ، i برای نشانگرها)

توضیحات تکمیلی:

  • محدوده مقادیر:
    • دستور c: مقادیر منفی باعث چرخش موتورها به جهت معکوس می‌شوند.
    • دستور l: مقادیر بالاتر از 255 به عنوان 255 در نظر گرفته می‌شوند.
  • وابستگی به سخت‌افزار:
    • دستورات s، w، v و b نیازمند فعال‌سازی سنسورهای مربوطه در تنظیمات هستند.
  • پیش‌فرض‌ها:
    • اگر پارامتر وارد نشود (مثلاً s بدون مقدار)، از مقدار پیش‌فرض استفاده می‌شود.
  • خطاها:
    • در صورت ارسال دستور نادرست (مثلاً c300,200)، ربات مقادیر را به نزدیکین حد مجاز (255 یا -255) تبدیل می‌کند.
 
نکته : از همین دستورات در برنامه نویسی نیز استفاده می کنیم برای تست ربات.

 

پیام‌های دریافتی از ربات

پیشوندتوضیحاتمثال
vولتاژ باتریv12.5
wسرعت چرخش چرخ‌ها (RPM)w30,28
sفاصله تا مانع (سانتی‌متر)s150
bتشخیص برخوردblf (برخورد چپ جلو)

 

پارامترهای اخطار

پارامترتوضیحات
NO_PHONE_MODEحرکت خودکار ربات بدون گوشی (1 برای فعال‌سازی)
STOP_DISTANCEحداقل فاصله مجاز تا مانع (پیش‌فرض: ۱۰ سانتی‌متر)
TURN_THRESHOLDآستانه تغییر جهت (پیش‌فرض: ۵۰ سانتی‌متر)

پیکربندی ویژگی‌ها

ویژگی پارامتر مقادیر توضیحات
مدار تقسیم ولتاژ HAS_VOLTAGE_DIVIDER 0 یا 1 نیازمند تعیین VOLTAGE_DIVIDER_FACTOR، VOLTAGE_MIN، VOLTAGE_LOW و VOLTAGE_MAX
LEDهای نشانگر HAS_INDICATORS 0 یا 1 کنترل چراغ‌های راهنما
سنسور سرعت جلو/عقب HAS_SPEED_SENSORS_FRONT / HAS_SPEED_SENSORS_BACK 0 یا 1 ردیابی چرخش چرخ‌ها
سنسور اولتراسونیک HAS_SONAR 0 یا 1 اندازه‌گیری فاصله تا موانع
فیلتر میانه USE_MEDIAN 0 یا 1 بهبود دقت سنسور اولتراسونیک
سنسور ضربه HAS_BUMPER 0 یا 1 تشخیص برخورد
نمایشگر OLED HAS_OLED 0 یا 1 نیازمند کتابخانه‌های Adafruit_SSD1306 و Adafruit_GFX
LEDهای جلو/عقب/وضعیت HAS_LEDS_FRONT / HAS_LEDS_BACK / HAS_LEDS_STATUS 0 یا 1 کنترل روشنایی LEDها
سبد خرید
  • سبد خریدتان خالی است.
پیمایش به بالا