عملیات از راه دور در نرم افزار متلب توسط درایور MDC20 به کمک کنترلر PID
۴ مرداد ۱۳۹۸ربات ها در صنعت دامداری
۴ مرداد ۱۳۹۸در این آموزش قصد داریم نحوهی راهاندازی درایور MDC20 با آردوینو شرح دهیم، در این پروژه با دادن ورودی در ترمینال نرم افزار آردوینو، میتوان موتور را با سرعت دلخواه خود بچرخانیم.
نحوهی بستن مدار برای راهاندازی درایور
از نکات مورد توجه این که در بورد Arduino Uno دو پایهٔ 0 و 1 پایههای مربوط به Rx و Tx میباشند و طبیعتا باید برای اتصال از این دو پایه استفاده شود، اما به دلیل اینکه در بوردهای Arduino از همین پایهها برای پروگرم کردن میکرو استفاده میشود، و در صورت اتصال این پایهها به مدار دیگری، عمل پروگرم کردن با خطا مواجه میشود، برای همین منظور قابلیتی در بوردهای Arduino وجود دارد که میتوان هر کدام از پایههای ورودی/خروجی را به عنوان Rx و Tx تعریف نمود که ما از پایههای 7 و 8 استفاده کردیم، این کار در کد انجام شده است، در قسمت بعدی به طور کامل توضیح داده خواهد شد، در نتیجه مدار ما به صورت زیر خواهد بود:
از نکات دیگر اینکه بدیهی است ولی شاید فراموش بشود اینکه تغذیه بورد MDC20 متصل شود و موتور به خروجی این بورد وصل شود، ما موتور را به خروجی Motor2 وصل کردهایم.
کد نویسی
در این قسمت به توضیح بخش کد میپردازیم.
#include <SoftwareSerial.h> SoftwareSerial MDC20(7, 8); // RX, TX void setup() { int i = 0 ; Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } MDC20.begin(9600); // set the data rate for the SoftwareSerial port MDC20.write(i) ; //address board MDC20.write(101) ; //Motor 2 forward } void loop () { // run over and over int i = 0 ; String str ; while(1) { if ( Serial.available() ) { str = Serial.readStringUntil('\n'); MDC20.write(i) ; //address board MDC20.write(101) ; //Motor 2 forward MDC20.write ( str.toInt() ) ; } } }
4 – 1
به دلیل اینکه ما میخواهیم از پایه هایی غیر از پایه های 0 و 1 استفاده کنیم و پایههای دیگری را به عنوان Rx و Tx تعریف کنیم باید از کتابخانهی SoftwareSerial.h استفاده کنیم. برای این باید از کلاسی با نام SoftwareSerial یک نمونهگیری انجام دهیم، که ما نام این نمونه را MDC20 گذاشتهایم، این کلاس دارای دو ورودی میباشد که اولین ورودی مربوط به Rx و دومین ورودی مربوط به Tx میباشد و باید شماره پایههایی که میخواهیم را وارد کنیم.
بعد از این قسمت ما در حقیقت دارای دو ارتباط سریال هستیم، یکی بین Arduino و سیستم، و دیگری بین Arduino و MDC20.
8 – 5
در تابع Void Setup تنظیمات اولیه را انجام میدهیم، از قبیل تنظیم Baud Rate و مقداردهیهای اولیه.
14 – 9
در کل برنامه وقتی از Serial استفاده میکنیم، منظور ارتباط Uart بین سیستم و آردوینو میباشد، و وقتی از MDC20 استفاده میکنیم، منظور ارتباط Uart بین آردوینو و بورد MDC20 میباشد. در این قسمت کد، تابع begin مقدار Baud Rate را مشخص میکند، و حلقهی while منتظر میماند تا ارتباط صحیح سختافزاری برقرار شود.
22 – 15
در تابع Begin ما Baud Rate مربوط به ارتباط MDC20 و آردوینو را با مقدار 9600 تنظیم میکنیم. و تابع MDC20.write آرگومان ورودی را ارسال میکند، با توجه به راهنمای بورد MDC20 برای حرکت موتور DC دوم به صورت Forward، باید در ابتدا آدرس بورد را ارسال کنیم و سپس مقدار هگزادسیمال (Dec = 101) 0x65 و سپس مقدار سرعت مطلوب که بین 0 تا 255 میباشد. به همین دلیل ابتدا آدرس بورد را با آدرس صفر ارسال کرده و سپس مقدار 101 دسیمال، و سپس منتظر میمانیم که سرعت مطلوب را کاربر وارد کند.
28 – 23
تابع Void loop به صورت دائم تکرار میشود، در اینجا رشتهای تعریف میکنیم تا اینکه مقدار سرعت ورودی کاربر را ذخیره کنیم.
38 – 29
در حلقهی while مرتبا چک میکنیم تا ببینیم کاربر مقداری را وارد میکند یا خیر، که این مورد را تابع available انجام میدهد، وقتی کاربر مقداری را وارد می کند عبارت if ،True میشود، در این قسمت تابع Serial.readStringUntil(‘\n’) رشته ورودی را تا زمانی که کاراکتر ورودی دکمهی Enter نباشد دریافت میکند و در str ذخیره میکند، و سپس مجددا با توجه به راهنمای MDC20 باید مقادیر قبلی را فرستاده، و چون تابع MDC20.write ورودی اش int میباشد، با استفاده از تابع str.toInt() رشته را به int تبدیل کرده و ارسال میکنیم. و سپس اگر کاربر مقداری را وارد کرد، وارد if میشود در غیر اینصورت با مقدار قبلی وارد شده به حرکتش ادامه میدهد.