همانطور که از نام آن مشخص است sbus یک پروتکل ارتباط سریال است که 18 کانال داده را تنها با یک سیم منتقل میکند. sbus معمولا سیگنال UART معکوس شده است و برای خواندن آن از طریق پین Rx Uart میکرو باید ابتدا آن را معکوس کرد.
معمولا در پروژه های رباتیک برای کنترل ربات زمینی یا هوایی نیاز داریم که فرمان های ایستگاه زمینی را از طریق رادیوکنترل به بخش تصمیم گیر ربات ارسال کنیم تا دستورات اعمال شوند و ربات به جهت های خواسته شده حرکت کند و یا حالت کارکردی آن تغییر کند.
در شکل بالا یک رسیور FrSky میبینید که با فرستنده آن در ایستگاه زمینی بایند شده است سه پین پایین سمت راست آن به سیگنال SBUS اختصاص یافته است.
خب حالا چطور میتوان سیگانال SBUS رو از طریق آردوینو خواند؟
این کار به راحتی با استفاده از یک کتابخانه آردوینو انجام میشود ولی در ابتدا باید یک مدار اینورتر طراحی کرد و سیگنال معکوس SBUS را به پین سریال آردوینو داد.
همه چیزی که در پروژه به آن نیاز داریم:
-برد آردوینو(نانو، مگا، یونو ..)
-ترانزیستور NPN
-دو مقاومت 1K ohm
-تعداد سیم جامپر
-رسیور دارای SBUS
خب شماتیک پروژه به این صورت است:
ابتدا مدار اینورتر را طراحی میکنیم:
مدار از یک ترانزیستور NPN تشکیل شده است که Base آن به واسطه یک مقاومت به سیگنال SBUS متصل است کلکتور نیز با یک مقاومت پولآپ شده و امیتر به زمین متصل است. سیگنال از کلکتور گرفته میشود معکوس شده سیگنال سریال باس است.
شمای اتصالات بصورت زیر است:
حالا که سخت افزار تکمیل شده است باید سراغ کد برویم. ابتدا باید کتابخانه SBUS را به Arduino ide اضافه کنیم.
1- کتابخانه SBUS را از لینک مقابل بصورت زیپ دانلود کنید: https://github.com/bolderflight/sbus/archive/refs/heads/main.zip
2- حال از قسمت sketch>include library>add .ZIP library فایل دانلود شده را به Arduino ide میدهیم آردوینو نیز پس از پایان نصب پیغامی مبنی نصب موفق کتابخانه نمایش خواهد داد.
حال از قسمت File>Examples مثال کتابخانه SBUS را باز کرده و با انتخاب برد آردونو و پورت درست برنامه را کامپایل و روی برد آپلود میکنید.
کد نمونه:
#include "sbus.h" /* SBUS object, reading SBUS */ bfs::SbusRx sbus_rx(&Serial2); // if Arduino is Uno: sbus_rx(&Serial) /* SBUS object, writing SBUS */ bfs::SbusTx sbus_tx(&Serial2); // if Arduino is Uno: sbus_tx(&Serial) /* SBUS data */ bfs::SbusData data; void setup() { /* Serial to display data */ Serial.begin(115200); while (!Serial) {} /* Begin the SBUS communication */ sbus_rx.Begin(); sbus_tx.Begin(); } void loop () { if (sbus_rx.Read()) { /* Grab the received data */ data = sbus_rx.data(); /* Display the received data */ for (int8_t i = 0; i < data.NUM_CH; i++) { Serial.print(data.ch[i]); Serial.print("\t"); } /* Display lost frames and failsafe data */ Serial.print(data.lost_frame); Serial.print("\t"); Serial.println(data.failsafe); /* Set the SBUS TX data to the received data */ sbus_tx.data(data); /* Write the data to the servos */ sbus_tx.Write(); } }
نکته: در این مثال سیگنال SBUS نیز تولید شده و از پین Tx منتشر میشود پس از این کتابخانه برای تولید سیگنال SBUS نیز استفاده میشود.
پس از آپلود کد سریال مانیتور را باز کرده و همچنین بادریت را بر روی مقدار درستش تنظیم کنید تا کانال های رادیوکنترل روی سریال مانیتور نمایش داده شوند.
همانطور که دیدید با استفاده از این کتابخانه براحتی داده باس سریال به نمایش درآمد و میتوانید از آن ها برای کنترل ربات خود استفاده کنید. این مقاله جزوی از دوره ساخت کوادکوپتر در آینده خواهد شد اگر به دنیای شگفت انگیز ربات ها علاقه مندید در این ماجراجویی ما را دنبال کنید(: موفق و پیروز باشید.
آدرس گیتهاب
آدرس یوتیوب
آدرس تلگرام
آدرس آپارات