آموزش آردوینو

اتصال سروو موتور به آردوینو (آموزش جامع)

در دنیای الکترونیک و رباتیک، سرووموتورها نقش مهمی در کنترل دقیق حرکت های مکانیکی دارند. در این مطلب، به اصول اولیه اتصال موتورسروو به برد آردوینو می پردازیم. فرقی نمیکند که شما تازه کار یا حرفه ای باشید، با این راهنمای گام به گام اصول ابتدایی و اساسی کنترل سروو موتور و چگونگی اتصال آن به آردوینو را می آموزید.

هم چنین می توانید آموزش ها و پروژه های دیگر با آردوینو را در سایت ما بیابید.

قطعات لازم برای کنترل سروو موتور با پتانسیومتر

  1. آردوینو Uno
  2. کابل USB
  3. سرووموتور SG90
  4. پتانسیومتر 10 کیلو اهمی
  5. سیم های جامپر

سروو موتور SG90

پایه های سروو موتور آردوینو

  • GND : پایه زمین یا ground (سیم قهوه ای)
  • VCC : پایه 5 ولت برای تغذیه سرووموتور ( سیم قرمز)
  • Control : از طریق این سیم و با PWM، سیگنال های کنترل موقعیت دریافت می شوند. (سیم نارنجی)

سروو موتور سیگنال PWM را دریافت می کند تا زاویه چرخش را مشخص کند. سیگنال PWM، یک سیگنال مربعی با duty cycle (نسبت زمان on بودن سیگنال به پریود آن برحسب درصد) متغیر است. مدت زمانی که سیگنال high یا on  است، به یک زاویه خاص اشاره می کند. این سیگنال معمولا توسط یک میکروکنترلر مثل آردوینو تولید می شود.

وقتی سیگنال PWM به عنوان ورودی کنترلی به سروو موتور داده می شود (معمولا سیم نارنجی یا زرد)، مدار کنترل موتور این سیگنال را مانند یک دستور برای حرکت به یک زاویه خاص تفسیر میکند. به این صورت که مدارکنترل مدت زمانی که سیگنال PWM یک یا on یا high است را اندازه میگیرد و آن را به یک زاویه نسبت میدهد. مدت زمان high بودن سیگنال معمولا 1 تا 2 میلی ثانیه است. سپس مدارکنترل، این مدت زمان اندازه گیری شده را با موقعیت مرکزی (به طور معمول 1.5 میلی ثانیه) مقایسه میکند و شفت موتور را برای حرکت به سمت زاویه موردنظر تنظیم میکند. اگر این زمان از موقعیت مرکزی کمتر بود، موتور در یک جهت می چرخد و اگر بیشتر بود، موتور در جهت مخالف میچرخد.

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

سوالات پرتکرار درباره سروو موتور

1.تفاوت سروو موتور با یک موتور DC معمولی چیست؟

برخلاف یک موتور DC، سروو موتور سیستم کنترل حلقه بسته با مکانیزم های فیدبکی مثل پتانسیومتر یا انکدر(رمزگذار) دارد که به آن قابلیت کنترل دقیق موقعیت و توقف در یک زاویه مشخص را میدهد در حالی که موتورDC به صورت ذاتی نمی تواند تا این حد دقیق باشد.

2.چرا سروو موتور من تکان میخورد یا به نرمی و آرامی حرکت نمیکند؟

تکان خوردن یا حرکت نامنظم موتور میتواند به خاطر مشکلات تغذیه، نویز در سیگنال یا محدودیت های مکانیکی باشد. پس مطمئن شوید که موتور به یک منبع ثابت و پایدار متصل است، سیم کشی ها را به درستی انجام دهید و مطمئن شوید که موتور از نظر مکانیکی نیز محدودیتی ندارد.

آیا من میتوانم سروو موتور را به چرخش دائمی دربیاورم؟

بله، بعضی از مدل ها میتوانند برای چرخش دائمی استفاده شوند، به این طریق که مکانیزم فیدبک داخلی قطع شود و مدارکنترل تنظیم شود. با این کار عملا سروو موتور خود را به یک موتور DC دنده ای که کنترل موقعیت آن غیرفعال است، تبدیل میکنید.

مدار اتصال آردوینو با سروو موتور و پتانسیومتر

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

مدار اتصال آردوینو با سروو موتور و پتانسیومتر

  1. سیم قرمز (VCC) سروو موتور را به پایه 5 ولت آردوینو متصل کنید.
  2. سیم مشکی یا قهواه ای (GND) سروو موتور را به پایه GND آردوینو متصل کنید.
  3. سیم نارنجی یا زرد ( سیگنال ورودی) سروو موتور را به پایه دیجیتال PWM آردوینو متصل کنید.
  4. سر مثبت پتانسیومتر را به پایه 3.3 ولت آردوینو متصل کنید.
  5. سر GND را به پایه GND متصل کنید.
  6. پایه سیگنال را به پایه A0 با هر پایه ورودی آنالوگ دیگری متصل کنید. (باید آنالوگ باشد.)

در اینجا شرح پایه یا پین اوت پتانسیومتر را داریم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

پتانسیومتر

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

کد زیر، سروو موتور متصل به پایه 5 را به کار می اندازد، داده آنالوگ را از پایه A0 که پتانسیومتر به آن وصل است می خواند، این داده را به یک زاویه از بازه 0 تا 180 درجه نسبت میدهد و به صورت مداوم موقعیت سروو موتور را براساس مقدار پتانسیومتر به روز میکند. یک تاخیر کوچک به حرکت نرم و آرام موتور کمک میکند.

دراین قسمت، کد را خط به خط توضیح میدهیم و می توانید کد نهایی را در انتهای همین مطلب بیابید.

#include <Servo.h>

این خط، شامل کتابخانه Servo.h است که تابع های لازم برای کنترل موتورسروو با آردوینو را درون خود دارد.

Servo servoMotor;

اینجا، یک شی یا object را در کلاس Servo به نام servoMotor تعریف میکنیم. از این شی در کنترل موتور سروو متصل به آردوینو استفاده میکنیم.

void setup() {

تابع setup() یک تابع خاص است که تنها یک بار و آن هم وقتی برد آردوینو متصل یا ریست شده، اجرا میشود.

  servoMotor.attach(5);
}

درون تابع setup()، از یک متد یا تابع دیگری به نام attach() استفاده میکنیم. این تابع متعلق به همان شی servoMotor است که قبلا تعریف کردیم. این تابع سروو موتور را به پایه 5 دیجیتال آردوینو متصل کرده و ارتباط موتور با برد را برقرار میکند.

void loop() {

تابع loop() تابع خاص دیگری است که درون آن کد اصلی را مینویسیم و به صورت مداوم هم اجرا میشود.

  int potValue = analogRead(A0);

درون تابع  loop()، از تابع دیگری به نام analogRead() استفاده میکنیم. این تابع مقدار آنالوگ را از پایه A0 آنالوگ میخواند و این مقدار در متغیر potValue  ذخیره میشود.

  int servoAngle = map(potValue, 0, 1023, 0, 180);

در این قسمت با استفاده از تابع map()، مقدار ذخیره شده در متغیر potValue  که عددی بین 0 تا 1023 است را به یکی از زاویه های موجود در بازه  0 تا 180 درجه نسبت میدهیم. این مقدار در متغیر servoAngle ذخیره میشود.

  servoMotor.write(servoAngle);

تابع یا متد write()، زاویه موتور سروو را به آنچه که در متغیر servoAngle ذخیره شده تنظیم میکند. این تابع هم متعلق به همان شی servoMotor است که قبلا تعریف کردیم.

delay(15);
}

یک تاخیر کوتاه 15 میلی ثانیه ای با استفاده از تابع delay() اضافه میکنیم. این تاخیر به حرکت  آرام موتور و کاهش تکان های آن کمک میکند.

نتیجه راه اندازی سروو موتور

خروجی در نهایت به این شکل کار میکند:

موارد موجود در فایل : سورس کامل

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

2 نظر

  1. سلام و خسته نباشید
    اگر بخوایم همین برنامه رو با این تفاوت که A0 سیگنال خروجی یک سنسور EMG رو بگیره ، بنویسیم باید چه تغییری در برنامه بدیم؟

    1. سلام عزیز
      برای یادگیری برنامه نویسی آردوینو میتوانید از دوره آموزش آردوینو کمک بگیرید

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

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