آموزش آردوینو جلسه هشتم
در جلسه گذشته یک چراغ LED RGB را به وسیله پین های دیجیتال آردوینو کنترل کردیم. در این جلسه به راه اندازی سروو موتور میپردازیم.

سروو موتور ها نوعی از موتور های معمولی هستند که توسط یک کنترلر و یک پوتانسیومتر برای اندازه گیری بارخورد موقیت موتور (Position Feedback) کنترل میشوند؛ سروو موتور ها میتوانند توسط موج PWM کنترل شوند و در موقعیت خاصی قرار بگیرند!
در زیر دو نمونه سروو موتور خطی و دورانی را مشاهده میکنید:
PWM چیست؟
مدولاسیون پهنای پالس یا Pulse Width Modulation روشی برای تنظیم توان خروجی دیجیتال است. به طوری که با تغییر دادن مقدار زمان قطع و وصل شدن پالس های مربعی میتوان توان خروجی را تنظیم کرد برای مثال میتوان به وسیله آن نور ی چراغ led را کنترل کرد.
به تصویر زیر دقت کنید:

اگر به نمودار بالا توجه کنید، متوجه خواهید شد که دو پارامتر ولتاژ و زمان نقش اصلی در PWM دارد! مقدار ولتاژ در میکروکنترلر ها بین 3.3 ولت تا 5 ولت است؛
پس مقدار ولتاژ در نمودار حداقل 0 ولت و حداکثر بسته به نوع میکروکنترلر 3.3 یا 5 ولت است. به این مقدار دامنه یا Amplitude میگویند.
دیوتی سایکل Duty Cycle یا چرخه وظیفه مدت زمان مد نظر ماست؛
فرکانس: اگر با مفهوم فرکانس آشنایی ندارید، فرکانس به مقدار زمانی میگویند که یک سیگنال به اندازه وظیفه خود یا همان دیوتی سایکل خود طی میکند.
مثلا در برق شهری با فرکانس 50 هرتز، سیگنال سینوسی برق در هر ثانیه یک سیکل کامل را طی میکند.
مطالب گفته شده صرفا لزومی برای این جلسه ندارند و فقط برای افزایش اطلاعات شما در این باره است و در یادگیری آن هیچ الزامی درکار نیست زیرا در دوره دیگر آردوینو به طور حرفه ای به آن میپردازیم!
آردوینو تنها دارای تعداد محدودی پین PWM است. با وجود اینکه میتوان با قطع و وصل کردن پین های دیجیتال دیگر این کار را انجام داد (با وجود نا مناسب بودن این روش) شما میتوانید از تعدادی از پین های آردوینو این کار را انجام دهید.
در بورد های آردوینو پین های PWM با علامت ~ مشخص شده است. در آردوینو مگا تمام پین های دیجیتال 2 تا 13 از PWM پشتیبانی میکنند.
در ادامه به پروژه عملی میپردازیم…
مواد لازم!
1.آردوینو (Uno یا Mega یا…)
2.سروو موتور (مدل آن بسته به نیاز شما است. اما پیشنهاد ما سروو موتور sg90 است که علاوه بر قیمت مناسب جریان پایینی میکشد)
3.پوتانسیومتر
سروو موتور
سروو موتور ها دارای سه سیم است: سیم تغذیه منفی که با رنگ قهوه ای، تغذیه مثبت که با رنگ قرمز و سیگنال که با رنگ نارنجی مشخص شده است.
سروو موتور ها دارای یک گیربکس هستند که باعث تقویت قدرت مکانیکی این موتور ها میشود. اگر موتور های قوی تری نیاز دارید میتوانید از انواع دیگر سروو موتور ها استفاده کنید که علاوه بر قدرت زیاد، قیمت ، اندازه، ولتاژ و جریان این موتور ها به مراتب بیشتر است.
این موتور ها در قسمت شفت خروجی موتور ها یک عدد پوتانسومتر دارند که میتواند موقعیت موتور را اندازه گیری کند و در درجه مورد نظر قرار دهد.
در تصاویر زیر یک نوع موتور قدرتمند سروو را مشاهده میکنید:
راه اندازی
#include <Servo.h>
Servo myservo;
void setup(){
myservo.attach(9);
myservo.write(80);
}
void loop(){}
در خط اول کتابخانه را تعریف کردیم (کتابخانه به صورت پیشفرض نصب است) و در خط سوم شی مربوط به آن را ساخته ایم. در خط هفتم پین سیگنال سروو موتور است. بهتر است سروو موتور را به یکی از پین های PWM متصل کنید.
myservo.attach(9); // Arduino: D9
در خط 8، موقعیت سروو موتور را به آن اعملام میکنیم. مثلا برای قرار گیری سروو موتور در موقعیت 80 درجه از کد زیر استفاده میکنیم:
myservo.write(80); // 80 Degree
پوتانسیومتر
#include <Servo.h>
Servo myservo;
int val = 0;
void setup(){
myservo.attach(9);
myservo.write(0);
}
void loop(){
val = map(analogRead(A0), 0, 1023, 0, 180);
myservo.write(val);
delay(15);
}
این کد مانند کد قبل است که تفاوت ها را بررسی میکنیم. در خط اول متغیری به نام val تعریف کرده ایم که قرار است موقعیت سروو موتور درون آن ذخیره شود.
در خط 11 سروو موتور را در موقعیت 0 درجه قرار میدهیم:
myservo.write(0);
در خط 17 مقدار پین آنالوگ A0 را خوانده و به عددی بین 0 تا 180 تبدیل میکنیم. عدد 0 و 180 به ترتیب حداقل و حداکثر مقدار زاویه سروو موتورمان است که در سروو موتور SG90 برابر با 180 درجه است. یعنی اگر سروو موتور ما 360 درجه باشد باید آن را بین 0 و 360 قرار دهیم.
تابع map به اینصورت کار میکند که مقداری را گرفته و نسبت به دو مقدار دیگر تنظیم میکند (مانند جدول تناسب):
val = map(analogRead(A0), 0, 1023, 0, 180);
به عبارتی برای تعریف محدوده برای اعداد از تابع map استفاده میکنیم:
map(val, minA, maxA, minB, maxB);
مقدار val همان عددی است که میخواهیم آن را در محدوده قرار دهیم. مقدار minA مقدار حداقل val است و maxA مقدار حداکثر val است. minB مقدار حداقل خواسته شده است و maxB حداکثر آن. مثلا برای تبدیل متغیر value که مقدار بین 0 تا 255 را دارد، به مقداری بین 0 تا 100 از کد زیر استفاده میکنیم:
number = map(value, 0, 255, 0, 100);
و در نهایت در خط 19 مقدار val را به سروو موتور اعمال میکنیم.
myservo.write(val);
و در آخر برای جلوگیری از بروز هر خطا بهتر است یک تاخیر 15 میلی ثانیه ای (مقدار ارائه شده در دیتاشیت) قرار دهید:
delay(15);
درباره admin_hb
حسین بذرافکن هستم، برنامه نویس، فریلنسر و عاشق الکترونیک...
نوشته های بیشتر از admin_hb
دیدگاهتان را بنویسید