سلام به همه شما مایکروالکامی ها. سروو موتور ها نوعی از موتور های الکتریکی هستند که قابلیت کنترل دور و زاویه چرخش آن بصورت دقیق وجود دارد. در این مطلب به کنترل Servo Motor با جوی استیک (joy stick) پرداخته خواهد شد. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتونید سایر مطلب من رو از این قسمت مطالعه کنید.
سروو موتور
بیایید قبل هر چیز با اجزای سروو موتور آشنا شویم. این اجزا شامل مدار کنترل کننده، موتور DC، شفت، گیربکس یا همان چرخ دنده های متحرک میباشند. در تصویر زیر اجزای داخلی یک Servo Motor بصورت واضح قابل مشاهده است.
اتصالات سیم های سروو موتور
- سیم قرمز رنگ برای اتصال برای 5V+
- سیم قهوه ای یا مشکی رنگ برای اتصال به GND
- سیم زرد یا نارنجی مربوط به پایه کنترل کننده Servo Motor میباشد. میتوان آن را به هر پایه آردوینو متصل کرد. در سورس کد این مطلب به پایه D9 متصل شده است.
اتصالات ماژول به آردوینو
ماژول جوی استیک | آردوینو |
+5v | +5v |
GND | GND |
VRx | A0 |
SW | D2 |
ماژول جوی استیک
به طور خلاصه ماژول جوی استیک ترکیبی از دو محور و یک دکمه میباشد. خروجی هر کدام از این بخش ها به صورت یک پایه از ماژول مشخص شده است.
- VRx: مربوط به محور x ها
- VRy: مربوط به محور y ها
- SW: خروجی مربوط به button روی خود جوی استیک
یکی از کاربرد های فراوان ماژول جوی استیک در دسته های کنسول های بازی مانند Xbox و Playstation میباشد. از آن برای کنترل کاراکتر ها در بازی تعبیه شده. همانطور که ذکر شد در این مطلب میخواهیم با استفاده از این یک جوی استیک سروو موتور (استپر موتور) خود را کنترل کنیم.
برنامه کنترل سروو موتور با جوی استیک
#include <Servo.h> Servo myservo; int axis_X = 0; int button = 2; void setup() { myservo.attach(9); pinMode(button, INPUT_PULLUP); myservo.write(0); delay(500); myservo.write(180); delay(500); } void loop() { axis_X = analogRead(0); // Vorodi analog tarif kardim button = digitalRead(2); // vorodi digital tarif kardim axis_X = map(axis_X , 0 , 1023 , 0 , 180); myservo.write(axis_X); // ************************************ ezafe kardan zavie ba soraat kam if ( button == 0) { for ( int i = 0 ; i <= 180 ; i++) { myservo.write(i); delay(15); } // ********************************** kam kardan zavie ba soraat kam for ( int i = 180 ; i >= 0 ; i--) { myservo.write(i); delay(15); } } }
تحلیل کد راه اندازی سروو موتور و کنترل آن با جوی استیک
در این بخش کتابخانه مربوط به سروو را فراخوانی کرده تا بتوان از توابع آن استفاده کرد.
#include <Servo.h>
در ادامه متغیر myservo را از کلاس Servo ساخته ایم. از این به بعد برای اعمالی که میخواهیم روی Servo خود انجام دهیم، از این متغیر استفاده میکنیم. در ادامه متغیر های مربوط به جوی استیک را تعریف و آدرس دهی شده است.
Servo myservo; int axis_X = 0; int button = 2;
در حلقه setup ابتدا پایه کنترل کننده سروو موتور را با دستور attach آدرس دهی کرده و ورودی بودن پایه دکمه مربوط به جوی استیک مشخص شده است.
myservo.attach(9); pinMode(button, INPUT_PULLUP);
همان طور که پیشتر ذکر شد، تمام اعمالی که بخواهیم با سروو خود انجام دهیم، ابتدا از آبجکتی که تعریف کرده ایم استفاده میکنیم و بعد از آن دستوارت مربوطه را وارد خواهیم کرد. به تکه کد زیر دقت کنید.
myservo.write(0); delay(500); myservo.write(180); delay(500);
با دستور myservo.write(degree) میتوان با جایگزین کردن زاویه دلخواه بجای degree در آرگومان این تابع، زاویه چرخش مد نظر خود را اعمال نماییم.
با استفاده دستور map ورودی آنالوگ که بین 0 تا1023 است را تبدیل کردیم به 0 تا 180 و این داده را در متغیر axis_X ذخیره کردهایم. اگر سروو شما 360 یا 270 درجه است تبدیل کنید به 0 تا 270 یا 0 تا 360 درجه.
axis_X = map(axis_X , 0 , 1023 , 0 , 180);
در این بخش با استفاده از دستور شرطی if، مشخص کردیم زمانی که منطق مربوط به دکمه جوی استیک 1 شد (حالت فشردن آن) سروو موتور از زاویه 180 به 0 درجه حرکت کند. اما با این تفاوت که سرعت آن را با یک حلقه For محدود کردهایم. طوری که مشخص شده تا زمانی که سروو موتور ما بیشتر از 0 درجه است با یک تاخیر 15 میلی ثانیه زاویه سروو کاهش یابد.
if ( button == 0) { for ( int i = 0 ; i <= 180 ; i++) { myservo.write(i); delay(15); } // ********************************** kam kardan zavie ba soraat kam for ( int i = 180 ; i >= 0 ; i--) { myservo.write(i); delay(15); } } }
نتیجه گیری
در این مطلب به نحوه کنترل سروو موتور با استفاده از جوی استیک و زاویه آن بیان شد. با کمی خلاقیت به خرج دادن میتوان از این آموزش در پروژه های دیگر استفاده کرد. مثلا میتوان یک بازوی الکتریکی ساخت یا یک هولدر دوربین و … .
امیدوارم از این آموزش کمال بهره را برده باشید. در صورت داشتن هرگونه نظر یا سوال درباره این آموزش اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو حتما به اشتراک بگذارید. همینطور میتونید این آموزش را پس از اجرای عملی توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.
درود تشکر از برنامه خوبتون فقط پایه sw میشه پایه ۲ که توی قسمت اتصالات اشتباها پایه ۸ رو معرفی کردید.
ممنون از دقت نظر شما.
سلام و عرض ادب
خسته نباشید
ممنون از مطالب مفیدتون
انشالله موفق باشید
سلام، از اینکه مطلب مفید بوده خرسندیم.
مث همیشه عالی تشکر مهندس