چگونه سیگنال sbus را توسط آردوینو بخوانیم؟

همانطور که از نام آن مشخص است sbus یک پروتکل ارتباط سریال است که 18 کانال داده را تنها با یک سیم منتقل میکند. sbus معمولا سیگنال UART معکوس شده است و برای خواندن آن از طریق پین Rx Uart میکرو باید ابتدا آن را معکوس کرد.سیگنال SBUS متشکل از پالس ها مختلفمعمولا در پروژه های رباتیک برای کنترل ربات زمینی یا هوایی نیاز داریم که فرمان های ایستگاه زمینی را از طریق رادیوکنترل به بخش تصمیم گیر ربات ارسال کنیم تا دستورات اعمال شوند و ربات به جهت های خواسته شده حرکت کند و یا حالت کارکردی آن تغییر کند. رسیور رادیوکنترل FrSkyدر شکل بالا یک رسیور FrSky می‌بینید که با فرستنده آن در ایستگاه زمینی بایند شده است سه پین پایین سمت راست آن به سیگنال SBUS اختصاص یافته است.خب حالا چطور میتوان سیگانال SBUS رو از طریق آردوینو خواند؟این کار به راحتی با استفاده از یک کتابخانه آردوینو انجام میشود ولی در ابتدا باید یک مدار اینورتر طراحی کرد و سیگنال معکوس SBUS را به پین سریال آردوینو داد.همه چیزی که در پروژه به آن نیاز داریم: -برد آردوینو(نانو، مگا، یونو ..) -ترانزیستور NPN -دو مقاومت 1K ohm -تعداد سیم جامپر -رسیور دارای SBUSخب شماتیک پروژه به این صورت است:دیاگرام مداری ارتباط رسیور با آردوینوابتدا مدار اینورتر را طراحی می‌کنیم:طراحی مدار اینورتر SBUSمدار از یک ترانزیستور NPN تشکیل شده است که Base آن به واسطه یک مقاومت به سیگنال SBUS متصل است کلکتور نیز با یک مقاومت پول‌آپ شده و امیتر به زمین متصل است. سیگنال از کلکتور گرفته میشود معکوس شده سیگنال سریال باس است.شمای اتصالات بصورت زیر است:دیاگرام پروژهحالا که سخت افزار تکمیل شده است باید سراغ کد برویم. ابتدا باید کتابخانه SBUS را به Arduino ide اضافه کنیم.1- کتابخانه SBUS را از لینک مقابل بصورت زیپ دانلود کنید: https://github.com/bolderflight/sbus/archive/refs/heads/main.zip2- حال از قسمت sketch>include library>add .ZIP library فایل دانلود شده را به Arduino ide میدهیم آردوینو نیز پس از پایان نصب پیغامی مبنی نصب موفق کتابخانه نمایش خواهد داد.اضافه کردن کتابخانه به آردوینوحال از قسمت File>Examples مثال کتابخانه SBUS را باز کرده و با انتخاب برد آردونو و پورت درست برنامه را کامپایل و روی برد آپلود میکنید.قسمت Examplesکد نمونه:#include &quotsbus.h&quot /* 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(&quot\t&quot); } /* Display lost frames and failsafe data */ Serial.print(data.lost_frame); Serial.print(&quot\t&quot); 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(); } } دقت کنید که در کد باید شماره Rx pin که سیگنال به آن متصل است را مشخص کنید.انتخاب درست پورت سریالنکته: در این مثال سیگنال SBUS نیز تولید شده و از پین Tx منتشر میشود پس از این کتابخانه برای تولید سیگنال SBUS نیز استفاده میشود.پس از آپلود کد سریال مانیتور را باز کرده و همچنین بادریت را بر روی مقدار درستش تنظیم کنید تا کانال های رادیوکنترل روی سریال مانیتور نمایش داده شوند.نمایش کانال های SBUS برروی سریال مانیتورهمانطور که دیدید با استفاده از این کتابخانه براحتی داده باس سریال به نمایش درآمد و میتوانید از آن ها برای کنترل ربات خود استفاده کنید. این مقاله جزوی از دوره ساخت کوادکوپتر در آینده خواهد شد اگر به دنیای شگفت انگیز ربات ها علاقه مندید در این ماجراجویی ما را دنبال کنید(: موفق و پیروز باشید.آدرس گیت‌هابآدرس یوتیوبآدرس تلگرامآدرس آپارات