آموزش ARMآموزش آردوینوآموزش الکترونیک

آموزش کنترل سروو موتور با آردوینو Due – جلسه سوم

سلام. آموزش کنترل سروو موتور با آردوینو Due – جلسه سوم را آماده کردیم.

پروژه کنترل سروو موتور با برد Arduino Due

برد آردوینو Due یک برد با پردازنده مرکزی ARM است که برای مهندسین الکترونیک و علاقمندان این عرصه طراحی شده است. معماری آرم در الکترونیک مدرت بسیرا تاثیر گذار بوده است. ما در همه جا از کنترلر های مبتنی بر ARM استفاده میکنیم. به طور مثال در موبایل، آیپد، لپ تاپ و …

از این برد DUE می توان برای ساخت دستگاه های CNC ، پرینترهای سه بعدی ، بازوهای روباتیک و … استفاده کرد. همه این پروژه ها یک ویژگی مشترک دارند که عبارت است از کنترل دقیق سروو موتور های ان. ما در این آموزش Arduino قصد داریم یک سروو موتور را با آردوینو دیو کنترل کنیم.

در قسمت قبل آموزش آردوینو Due ما با ایجاد سیگنال PWM آشنا شدیم : آموزش راه اندازی PWM با آردوینو Due – جلسه دوم

میتوانید همه آموزش آردوینو را در قسمت آموزش های Arduino ببینید. لینک آن قسمت در منوی بالای سایت قرار داده شده است.

سروو موتور و PWM

سروو موتور ترکیبی از موتور DCT سیستم کنترل موقعیت و چرخ دنده ها است. سروو ها در دنیای مدرن کاربردهای زیادی دارند و به همین دلیل در شکل ها و اندازه های مختلفی در دسترس هستند. ما در این آموزش از سروو موتور SG90  استفاده خواهیم کرد که یکی از محبوب ترین و ارزان ترین سروو ها است. SG90 یک سروو 180 درجه است. بنابراین با این سروو می توانیم محورها را از 0 تا 180 درجه قرار دهیم.

کنترل سروو موتور با Arduino due

یک سروو موتور به طور کلی دارای سه سیم است، یکی برای ولتاژ مثبت ، دیگری برای GND و دیگری برای تنظیم موقعیت است. سیم قرمز به برق متصل شده است، سیم قهوه ای به gnd وصل می شود و سیم زرد (یا سفید) به سیگنال ورودی وصل میشود.

حتما ببینید :  تست برد آردوینو (آموزش تعمیر خرابی سوختن آردوینو)

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

فرکانس سیگنال PWM براساس نوع سروو موتور متفاوت است. برای SG90 فرکانس سیگنال PWM حدود 50 هرتز است. برای فهمیدن فرکانس عملکرد سروو خود، دیتاشیت مدل مربوطه را بررسی کنید. پس از انتخاب فرکانس ، نکته مهم دیگر در اینجا DUTY RATIO سیگنال PWM است.

جدول زیر موقعیت Servo را برای چرخه وظیفه خاص نشان می دهد. با انتخاب مقدار مناسب، می توانید سروو را در هر زاویه ای قرار دهید. مثلا برای 45º ، نسبت وظیفه باید 5 یا 5٪ باشد.

موقعیتچرخه وظیفه
0 درجه2.5
90 درجه7.5
180 درجه12.5

آموزش را با اجرای یک پروژه ادامه میدهیم.

توضیحات مدار پروژه

تصویر زیر مدار این پروژه را نمایش میدهید. همانطور که میبیند این مدار بسیار ساده است و فقط باید سیم کنترل سروو موتور را به پین 2 PWM متصل میکنیم.

پروژه کنترل سروو موتور با برد Arduino Due

قطعات مورد نیاز

  1. برد آردوینو Due
  2. منبع تغذیه (5 ولت)
  3. سروو موتور

برنامه نویسی سروو موتور با آردوینو Due

آردوینو دارای کتابخانه های فراوانی است که کار ما را بسیار راحت میکند. پس از فراخوانی کتابخانه ها، به سادگی میتوانیم سیگنال PWM تولید کرده و موقعیت سروو موتور را کنترل کنیم.

اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید.

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

پرونده Servo.h شامل کلیه عملکردهای مورد نیاز ما می باشد، پس از فرخوانی آن، دیگر لازم نیست نگران فرکانس PWM و DUTY RATIO باشیم. با این کار شما می توانید موقعیت سروو موتور را به سادگی تنظیم کنید.

حتما ببینید :  کاربرد آردوینو در صنعت (ساخت PLC با برد صنعتی آردوینو)

اسم برای سروو با استفاده از “Servo myservo” انتخاب می شود، در اینجا myservo انتخاب شده است. بنابراین برای کنترل موقعیت سروو موتور از این نام استفاده میکنیم.

#include <Servo.h>
Servo myservo;

برای اعلام کردن  پین PWM از کد زیر استفاده میکنیم :

myservo.attach (2); // اعلام پین 2 برای سیگنال PWM

همچنین برای تغییر موقعیت سروو از دستور زیر استفاده میکنیم. ما می خواهیم موقعیت سروو را روی 45 درجه تنظیم کنیم. با این دستور سروو 45 درجه حرکت می کند. اگر 45 را به 175 تغییر دهیم ، محور سروو به 175 درجه می رود و در آنجا می ماند. پس از آن ، هر زمان که نیاز به تغییر موقعیت سروو داشته باشیم، فقط باید دستور “myservo.write (درجه)” را قرار دهیم.

myservo.attach (2); // اعلام پین 2 برای سیگنال PWM

در برنامه ، ما با استفاده از حلقه ها قصد داریم زاویه ها را افزایش و کاهش دهیم. بنابراین سروو از 0 تا 180 ، سپس از 180 به 0 می رود. کنترل سروو  موتور به اینصورت در کد زیر توضیح داده شده است.

کد کامل :

#include <Servo.h>
Servo myservo; // انتخاب یک نام
int angle = 0; // تنظیم موقعیت اولیه سروو موتور
void setup() {
  myservo.attach(2);// سروو موتور را به پین 2 متصل میکنیم
}
void loop() {
  for (angle = 0; angle <= 180; angle += 1) {
   // موقعیت سروو از 0 تا 180 تغییر میکند
    myservo.write(angle);
  // سروو موتور به موقعیتی که در متغیر angle است میرود
    delay(15); // تاخیر 15 میلی ثانیه
  }
  for (angle = 180; angle >= 0; angle -= 1) {// موقعیت سروو از 180 تا 0 درجه تغییر میکند
    myservo.write(angle);    
 // سروو موتور به موقعیتی که در متغیر angle است میرود          
    delay(15); // تاخیر 15 میلی ثانیه
  }
}

فیلم عملکرد مدار

فیلم زیر نحوه عملکرد کد بالا را نشان میدهد. در فیلم زیر مشاهده میکنید سروو موتور به طور مداوم از 0 به 180 و از 180 به 0 میرود.

جلسه بعد : بزودی …

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

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا