آموزش آردوینو: درس چهاردهم (سروو موتور)

جمعه, 11 تیر 1395 19:27
این مورد را ارزیابی کنید
(6 رای‌ها)

سری آموزش آردوینو: درس چهاردهم

در این درس یادخواهید گرفت که چگونه یک سروو موتور را توسط آردوینو کنترل کنید.

آموزش آردوینو: درس سیزدهم(موتورDC-یخش اول)

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

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

 

برد آردوینو و کابل رابط 

1 عدد
برد بورد 1 عدد
مقاومت متغییر 10 کیلو اهم 1 عدد
سروو موتور 1 عدد
خازن 100 میکرو فاراد 1 عدد


اتصالات مدار برای حرکت رفت و برگشتی:

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

سروو موتور دارای 3 سیم می باشد. رنگ بندی این سیم ها در موتورهای مختلف، متفاوت است، اما رنگ قرمز همیشه برای +5V و رنگ مشکی یا قهوه ای برای GND می باشد. سیم دیگر که مربوط به کنترل وضعیت است، معمولا زرد یا نارنجی خواهد بود. سیم کنترل به پین 9 متصل شده است.

ممکن است که سروو موتور شما پس از اتصال به صورت نامنظم کار کند، زمانی که به پورت USBمتصل است. دلیل آن این است که زمانی که سروو موتور شروع به کار می کند، توان زیادی می کشد، که این توان زیاد ناگهانی وقتی به برد آردوینو وارد می شود باعث ریست شدن آن خواهد شد. در این صورت شما می توانید از طریق اضافه کردن یک خازن با ظرفیت بالا (470میکرو فاراد یا بالاتر) بین پایه های GND و +5V بر روی بردبورد این مشکل را حل کنید.

خازن به عنوان یک منبع انرژی برای موتور عمل می کند، به این صورت که زمانی که موتور شروع به کار کرد، توانش ابتداییش را از خازن دریافت می کند.

پایه بلند خازن، پایه مثبت بوده و باید به +5V متصل شود. در کنار پایه منفی نیز معمولا یک علامت – روی بدنه مشخص شده است.

کد آردوینو برای حالت رفت و برگشتی:

برنامه زیر را روی برد آردوینو آپلود کنید. مشاهده خواهید کرد که سروو موتور بلافاصله شروع به چرخش در یک جهت و بعد از آن در  جهت مخالف خواهد چرخید.

این برنامه فقط برای حالت رفت و برگشتی می باشد و می توانید آن را در مثال های آماده برنامه در پوشه servo پیدا کنید.

 

#include <Servo.h>

int servoPin = 9;

Servo servo; 

int angle = 0;   // servo position in degrees

void setup()

{

  servo.attach(servoPin);

}

 

void loop()

{

  // scan from 0 to 180 degrees

  for(angle = 0; angle < 180; angle++) 

  {                                 

    servo.write(angle);              

    delay(15);                  

  }

  // now scan back from 180 to 0 degrees

  for(angle = 180; angle > 0; angle--)   

  {                               

    servo.write(angle);          

    delay(15);      

  }

}

نحوه عملکرد برنامه فوق را در فیلم زیر مشاهده می کنید:

 

 

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

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

#include <Servo.h>

پس از آن پین مربوط به کنترل سروو موتور را servopin  معرفی کنید.

در خط بعدی یک متغییر جدید از نوع servo معرفی کنید.

Servo servo; 

این کتابخانه به شما امکان معرفی کردن متغییری جدید از نوع servo را می دهد. متغییری مانند متغییرهای int  یا  float. این امکان وحود دارد که هشت متغییر از این نوع را معرفی کنید، به طور مثال برای دو مورد به صورت زیر عمل کنید:

Servo servo1;

Servo servo2;

در بخش setup لازم است که متغییر servo را به پین مربوط به کنترل سروو موتور مرتبط کنیم.

  servo.attach(servoPin);

متغییر angle برای تعیین موقعیت دقیق سروو  برحسب درجه می باشد.

در حلقه Loop از دو حلقه for استفاده شده است. یکی زاویه چرخش را افزایش می دهد و دیگری این زاویه را کاهش خواهد داد.

دستور زیر هم باعث می شود تا مکان خود را با توجه به زاویه تعیین شده تنظیم کند:

    servo.write(angle);  

 

نحوه اتصالات مدار برای کنترل دستی:

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

شما باید پتانسیومتر را اضافه کرده و پایه وسط آن را به پین A0 آردوینو متصل کنید.

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

 

#include <Servo.h>

 

int potPin = 0; 

int servoPin = 9;

Servo servo;

 

void setup()

{

  servo.attach(servoPin); 

}

 

void loop()

{

  int reading = analogRead(potPin);     // 0 to 1023

  int angle = reading / 6;              // 0 to 180-ish

  servo.write(angle); 

}

ویدئو مربوط به کنترل دستی در اینجا آورده شده است:

 

 

در اینجا متغییر دومی به نام potpin معرفی کنید.

برای تعیین موقعیت سروو مقادیر آنالوگ پین A0 خوانده می شود، که عددی بین 0 تا 1023 خواهد بود، در حالی که سروو موتور فقط تا 180 درجه قابلیت چرخش دارد. در این صورت می توان با تقسیم مقادیر ورودی آنالوگ بر 6، رنج عدد را بین 0 تا 170 تنظیم کرد، که مطلوب می باشد.

 

سرو موتور چیست ؟

سرو موتور ( Servo Motor ) متشکل از یک موتور الکتریکی ساده است که در کنار موتور تعدادی المان الکترونیکی به منظور کنترل زاویه ، سرعت و یا شتاب به شفت موتور متصل می شوند و کلیه المان ها به همراه موتور در یک پکیج واحد ارائه می شوند. سرو موتور ها ممکن است دارای گیربکس یا فاقد گیربکس باشد و اندازه های بسیار کوچک برای مصارف ساخت تجهیزات مکاترونیکی مانند ربات ها و هواپیما های مدل تا اندازه های بزرگ برای دستگاه های صنعتی ساخته می شوند. در حوزه میکروکنترلر ، آنچه که از سروو موتور مشاهده می نماییم معمولا یک موتور DC جاروبک دار است که به کمک یک سری چرخدنده ( گیربکس ) به یک پتانسیومتر داخلی وصل شده است و خروجی گیربکس نیز از طرف دیگر خارج شده است. پتانسیومتر فقط وضعیت خروجی را کنترل می کند و کاری به وضعیت موتور ندارد.

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

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

 

برد کنترل سرو موتور یک فرمان را به صورت یک پالس PWM با فرکانس 50 هرتز ( دوره تناوب : 20 میلی ثانیه ) دریافت می کند و بر اساس عرض پالس دریافتی ، زاویه ای که باید شافت در آن قرار بگیرد یا به عبارتی مقدار مقاومت مطلوب پتانسیومتر را مشخص می نماید. ( معمولا در صورتی که عرض پالس 1 میلی ثانیه باشد ، زاویه 0 و در صورتی که عرض پالس 2 میلی ثانیه باشد زاویه ماکزیمم در نظر گرفته می شود ، در مورد برخی از موتور ها ممکن است عرض پالس بازه متفاوتی مانند 0.5 تا 2.5 میلی ثانیه را داشته باشد ، اما روش کار به یک شکل است ) پس از مشخص شدن مقدار مقاومت مطلوب پتانسیومتر ، کنترلر موتور DC را روشن می کند و مادامی که مقدار مقاومت پتانسیومتر به مقدار مطلوب نرسیده است ، موتور را روشن نگه می دارد ، تعیین جهت موتور بر اساس مقدار فعلی پتانسیومتر و مقدار مطلوب ، توسط کنترلر تعیین می شود.

سرو موتور ها معمولا دارای 3 سیم هستند و 2 سیم مربوط به تغذیه است و همواره باید متصل باشد و یک سیم مربوط به PWM ( مدولاسیون عرض پالس )  است که با دریافت پالس معتبر ، کنترلر موتور را روشن می کند و در وضعیت جدید قرار می دهد ، در غیر اینصورت موتور وضعیت قبلی را حفظ می کند.

نقطه پایانی چرخش سروو موتور می تواند در موتورهای مختلف متفاوت باشد، ولی در اکثر سروو موتورها 170 درجه می باشد. در صورت استفاده از سروو موتور های continuous امکان چرخش تا 360 نیز وجود دارد.

 

کارهای دیگری که می توانید انجام دهید:

برنامه مربوط به بخش اول را دوباره اجرا کنید و این بار مدت  تاخیر زمانی را از 15 میلی ثانیه کمتر کنید. مشاهده کنید که سروو موتور چقدر سریعتر خواهد چرخید.

در برنامه مربوط به کنترل دستی سعی کنید به جای  کنترل سروو موتور توسط پتانسیومتر، آن را از طریق نمایشگر سریال کنترل کنید.

برای اینکه برنامه شما اعداد را به درجه از نمایشگر سریال بخواند، می توانید از دستور ()serial.parslnt استفاده کنید. این دستور اعداد را از نمایشگر سریال می خواند.

آموزش آردوینو: درس پانزدهم(موتورDC-یخش دوم)


 

ترجمه شده و تکمیل توسط صنعت بازار | منابع: .adafruit.com   - diginic.net

خواندن 11354 دفعه

کاربرانی که در این گفتگو شرکت کرده اند

نظرات (15)

  1. مهدی

سلام من با برد اردوینو uno و سروو برای ماشینم ساسات برقی درست کردم, ک بوسیله ولوم دریچه باز وبسته بشه, ولی در بیشتر مواقع ولوم کار نمیکنه و اگرم کار کنه بصورت قطع و وصل کار میکنه از ولوم 10 k استفاده کردم برای تغذیه هم از کاهنده استفاده کردم چون...

سلام من با برد اردوینو uno و سروو برای ماشینم ساسات برقی درست کردم, ک بوسیله ولوم دریچه باز وبسته بشه, ولی در بیشتر مواقع ولوم کار نمیکنه و اگرم کار کنه بصورت قطع و وصل کار میکنه از ولوم 10 k استفاده کردم برای تغذیه هم از کاهنده استفاده کردم چون اردوینو اورجینال نبود, میخاستم بدونم مشکل از کجاست, تمام پایه های برد رو هم لحیم کردم چندین بار هم چک شده مشکلی نداره البته اینم بگم وقتی با دستم روی پایه های ولوم فشار میدم درست کار میکنه, دوتا ولوم هم عوض کردم ولی بازهم همین مشکل رو دارم, ممنون میشم جواب بدین

ادامه مطلب
 
  1. بطالبلو

[quote name="جواد"]باسلام <br />ممنون از راهنماییهاتون<br /><br />من یک ربات سریال ساختم که چهار تا سروو موتور داره و هدفم این هست که با استفاده از یک ماتریس دیتا که توی هر سطرش مقادیر زاویه ای هر کدوم از موتور ها هست رو به آردوینو بدم تا در...

[quote name="جواد"]باسلام <br />ممنون از راهنماییهاتون<br /><br />من یک ربات سریال ساختم که چهار تا سروو موتور داره و هدفم این هست که با استفاده از یک ماتریس دیتا که توی هر سطرش مقادیر زاویه ای هر کدوم از موتور ها هست رو به آردوینو بدم تا در نهایت آخر ربات در مسیر مورد نطر قرار بگیره <br />میشه خواهش کنم راهنمایی ام کنید و یا اگه مثالی یا کد برنامه ای هست اطلاع بدین<br />ممنون[/quote]<br /><br />سلام دوست عزیز<br />پاسخ سوالتون رو فک کنم با استفاده از دو لینکی که در ادامه واستون میفرستم بتونید دریافت کنید.<br />موفق باشید <br /><br />http://forum.arduino.cc/index.php?topic=170597.0<;br /><br />https://programmingelectronics.com/tutorial-24-multi-dimensional-arrays-aka-matrix-old-version/

ادامه مطلب
 
  1. جواد

باسلام <br />ممنون از راهنماییهاتون<br /><br />من یک ربات سریال ساختم که چهار تا سروو موتور داره و هدفم این هست که با استفاده از یک ماتریس دیتا که توی هر سطرش مقادیر زاویه ای هر کدوم از موتور ها هست رو به آردوینو بدم تا در نهایت آخر ربات در مسیر...

باسلام <br />ممنون از راهنماییهاتون<br /><br />من یک ربات سریال ساختم که چهار تا سروو موتور داره و هدفم این هست که با استفاده از یک ماتریس دیتا که توی هر سطرش مقادیر زاویه ای هر کدوم از موتور ها هست رو به آردوینو بدم تا در نهایت آخر ربات در مسیر مورد نطر قرار بگیره <br />میشه خواهش کنم راهنمایی ام کنید و یا اگه مثالی یا کد برنامه ای هست اطلاع بدین<br />ممنون

ادامه مطلب
 
  1. بطالبلو

[quote name="Mahdi derakhshan"]سلام <br />بنده دارم مدلی از یک دستگاه پانچ پرس میسازم همراه با servo <br /><br />سوالم اینه که این سروو موتور که ما میخوایم هر ۰.۳ ثانیه باید جهتش عکس شه و خیلی باید سرعت چپ و راست شدنش بالا باشه برا ضربه زدن ، آیا...

[quote name="Mahdi derakhshan"]سلام <br />بنده دارم مدلی از یک دستگاه پانچ پرس میسازم همراه با servo <br /><br />سوالم اینه که این سروو موتور که ما میخوایم هر ۰.۳ ثانیه باید جهتش عکس شه و خیلی باید سرعت چپ و راست شدنش بالا باشه برا ضربه زدن ، آیا اصلا سرو موتورا انقد عکس العملشون بالاست؟؟ و این که میشه اصلا همچین چیزی؟[/quote]<br />سلام دوست عزیز<br />راستش من همچین سروویی ندیدم ولی با همچین گشتاوری که بتونه پانچ پرس رو انجام بده و اینکه دایرکشن ش عوض شه یکم سخته پیدا شه اگر وجود هم داشته باشه. باز هم کامنت های دوستان رو منتظر میمونیم شاید بقیه نظر مناسب تری داشته باشن و مورد مشابه رو بدونن چطوره<br />موفق باشید

ادامه مطلب
 
  1. Mahdi derakhshan

سلام <br />بنده دارم مدلی از یک دستگاه پانچ پرس میسازم همراه با servo <br /><br />سوالم اینه که این سروو موتور که ما میخوایم هر ۰.۳ ثانیه باید جهتش عکس شه و خیلی باید سرعت چپ و راست شدنش بالا باشه برا ضربه زدن ، آیا اصلا سرو موتورا انقد عکس...

سلام <br />بنده دارم مدلی از یک دستگاه پانچ پرس میسازم همراه با servo <br /><br />سوالم اینه که این سروو موتور که ما میخوایم هر ۰.۳ ثانیه باید جهتش عکس شه و خیلی باید سرعت چپ و راست شدنش بالا باشه برا ضربه زدن ، آیا اصلا سرو موتورا انقد عکس العملشون بالاست؟؟ و این که میشه اصلا همچین چیزی؟

ادامه مطلب
 
  1. بطالبلو

[quote name="ارسلان"]سروو مزخرف ترین وسیله ای هست که تا به حال دیدم باور کنین یکی از فروشگاه و دو تا از سایت گرفتم هر کدوم یه ایرادی داشته الان پروژم ناقص مونده[/quote]<br />سلام دوست عزیز<br />اتفاقا به نظر من سروو خیلی موتورهای کار...

[quote name="ارسلان"]سروو مزخرف ترین وسیله ای هست که تا به حال دیدم باور کنین یکی از فروشگاه و دو تا از سایت گرفتم هر کدوم یه ایرادی داشته الان پروژم ناقص مونده[/quote]<br />سلام دوست عزیز<br />اتفاقا به نظر من سروو خیلی موتورهای کار راه بنداز خوبین. خودم چنین پروژه با این موتورها راه اندازی کردم و واقعا کار باهاشون راحته :-) <br />مشکل چی بوده؟؟ چه ایرادی داشته؟ :-)

ادامه مطلب
 
  1. ارسلان

سروو مزخرف ترین وسیله ای هست که تا به حال دیدم باور کنین یکی از فروشگاه و دو تا از سایت گرفتم هر کدوم یه ایرادی داشته الان پروژم ناقص مونده

 
  1. بطالبلو

[quote name="samane madahi"]سلام<br />من میخوام وقتی سوییچ رو بزنم ،سروو از 0 ب 50 بره و وقتی دستمو بر میدارم سروو برگرده ب جای اولش و ی سوییچ دیگه بزارم ک وقتی میزنمش از 0 ب 50- بره<br />اگه میشه راهنمایی کنید[/quote]<br /><br...

[quote name="samane madahi"]سلام<br />من میخوام وقتی سوییچ رو بزنم ،سروو از 0 ب 50 بره و وقتی دستمو بر میدارم سروو برگرده ب جای اولش و ی سوییچ دیگه بزارم ک وقتی میزنمش از 0 ب 50- بره<br />اگه میشه راهنمایی کنید[/quote]<br /><br />سلام دوست عزیز <br />با دستور if و else ساده میتونید این کار رو انجام بدین! کافیه مثلا بگید وقتی پین شماره ای که میکروسوئیچ به اون وصله 1 باشه سروو حرکت کنه و به 50 بره و اگر پین بعدی 1 بود به -50 بره و else موتور به 0 برسه<br />امیدوارم کمک کرده باشم<br />دستورش رو ننوشتم تا خودتون کد بزنید و با سرچ و کد زدن بهتر یاد میگیرید تا اینکه کد مستقیما در اختیار قرار بگیره. موفق باشین :-)

ادامه مطلب
 
  1. samane madahi

سلام<br />من میخوام وقتی سوییچ رو بزنم ،سروو از 0 ب 50 بره و وقتی دستمو بر میدارم سروو برگرده ب جای اولش و ی سوییچ دیگه بزارم ک وقتی میزنمش از 0 ب 50- بره<br />اگه میشه راهنمایی کنید

 
  1. بطالبلو

[quote name="javad"]سرو موتور من دارای لرزش هستش و اصلا نمیچرخه... لطفا راهنمایی کنید...[/quote]<br /><br />سلام دوست عزیز<br />از همین برد آردوینو Uno استفاده می کنید و همین نوع سروو موتور؟؟ نوع برد و موتورتون رو بفرمایید!<br />برای چون...

[quote name="javad"]سرو موتور من دارای لرزش هستش و اصلا نمیچرخه... لطفا راهنمایی کنید...[/quote]<br /><br />سلام دوست عزیز<br />از همین برد آردوینو Uno استفاده می کنید و همین نوع سروو موتور؟؟ نوع برد و موتورتون رو بفرمایید!<br />برای چون معمولا وقتی به موتور تغذیه مورد نیازش نرسه این اتفاق میوفته که اگر بردتون Uno باشه نیاز به تغذیه جرا نداره<br />برای مثلا برای nano چون 3.3 ولت میده نیازه تا موتور ها رو با باتری تغذیه کنید.<br />امیدوارم مشکلتون حل شده باش :-)

ادامه مطلب
 
هیچ نظری در اینجا وجود ندارد
بارگذاری بیشتر ...

نظر خود را اضافه کنید.

ارسال نظر بعنوان یک مهمان
پیوست ها (0 / 3)
مکان خود را به اشتراک بگذارید

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

ما را دنبال کنید:

Copyright © 2017-2018 | Sanatbazar.com