کنترل زاویه حرکت servo motor یا سروو موتور با آردوینو

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

در برخی از پروژه های آردوینو لازم است تا موتور در زاویه مشخصی بایستد، به همین دلیل نمی توان از موتورهای معمولی در ساخت آن ها استفاده کرد. به طور مثال فرض کنید می خواهید یک بازوی مکانیکی برای رباتی طراحی کنید که باید در زوایه های دقیقی بایستد و یا حرکت کند، به طور حتما برای ساخت این ربات نمی توان از یک موتور DC معمولی استفاده کرد، چراکه نمی توان، بازوی ربات را در زاویه مشخص متوقف و یا حرکت داد. به طور کلی در این سبک پروژه ها، که نیاز داریم یک قطعه را در زوایای بسیار دقیق حرکت دهیم بهتر است از سروو موتورها (servo motor) استفاده کنیم.

بعد قبل
کنترل زاویه حرکت servo motor یا سروو موتور با آردوینو
کنترل زاویه حرکت servo motor یا سروو موتور با آردوینو
کنترل زاویه حرکت servo motor یا سروو موتور با آردوینو

کنترل زاویه حرکت servo motor یا سروو موتور با آردوینو

کنترل زاویه حرکت servo motor یا سروو موتور با آردوینو
بعد قبل

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

به طور معمول یک سروو موتور دارای 3 رشته سیم است، که دو رشته از سیم ها مربوط به تغذیه servo motor و رشته سوم سیم مربوط به سیگنال فرمان حرکت موتور می باشد. ولتاژ تغذیه سروو موتورها بسته به مدل و شرکت سازنده آن بین 5 الی 24 ولت DC می باشد، که برای فهمیدن آن کافی است دیتاشیت مدل servo motor خود را که قصد راه اندازی آنرا دارید از طریق اینترنت دانلود و سپس مطالعه نمائید. به صورت کلی راه اندازی یک سروو موتور بسیار ساده می باشد، تنها لازم است ابتدا دو سیم مربوط به تغذیه در سروو موتور را به منبع تغذیه متصل کنید و سپس بنا به زاویه ای که احتیاج دارید موتور در آن بایستد یک پالس PWM با مدت زمان مشخص بر روی پایه سیگنال سروو موتور ایجاد کنید.

شابد در نگاه اول محاسبه و ساخت یک پالس با مدت زمان مشخص برای حرکت دادن یک servo motor در زاویه مشخص کار سخت و ناامید کننده ای به نظر برسد. اما نگران نباشید! امروزه با وجود میکروکنترلرها و بردهای مینی کامپیوتر این کار از آب خوردن نیز ساده تر شده است. به همین دلیل در این پروژه از مبحث آموزش آردوینو قصد داریم تا شما را با نحوه راه اندازه و کنترل زاویه حرکت یک سروو موتور توسط بردهای آردوینو آشنا کنیم.

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

برد آردوینو Arduino UNO R3 مدل DIP1 عدد
سروو موتور میکرو SG90 مدل 180 درجه1 عدد
رگولاتور ولتاژ 5 ولت L78051 عدد
LCD کاراکتری مدل 16×2 با Backlighting آبی1 عدد
ولوم 10kΩ1 عدد
تک سوئیچ 2 پایه DIP سایز 6x6x5 میلیمتر1 عدد
برد بورد (پروجکت برد) مدل GL1 عدد
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی)1 عدد
آداپتور 12V ولت 2A آمپر مدل بین راهی ساخت ایران1 عدد

توضیحات ساخت پروژه کنترل زاویه حرکت سروو موتور

در این پروژه برای تعیین زاویه حرکت سروو موتور از یک پتانسیومتر 10 کیلو اهمی استفاده شده است، به این ترتیب که ابتدا توسط پتانسیومتر زاویه مورد نظر چهت چرخش servo motor را تعیین می کنیم و سپس برای اعمال آن به سروو موتور از کلید فشاری استفاده می کنیم. از آنجا که جریان مصرفی سروو موتورها مخصوصا در زیر بار، زیاد است نمی توانیم ولتاژ تغذیه آنرا از برد آردوینو تامین کنیم، چراکه اینکار باعث صدمه دیدن و سوختن برد آردوینو می شود.

به همین دلیل در این پروژه برای تامین ولتاژ تغذیه سروو موتور از یک منبع تغذیه خارجی با ولتاژ 12 ولت استفاده شده است. از آنجا که تغذیه سروو موتور ما در این آزمایش 5 ولت است، ولتاژ 12 ولت ورودی را توسط یک آی سی رگولاتور ولتاژ به شماره 7805 ولتاژ را به سطح 5 ولت رسانده ایم و در نهایت آنرا به سروو موتور متصل کرده ایم.

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

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

نکات مهم در راه اندازی سروو موتور و آزمایش پروژه

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

نکته : در صورتیکه ولتاژ تغذیه سروو موتور شما 12 ولت است می توانید تراشه 7805 را از مدار حذف کنید و ولتاژ 12 ولت را به صورت مستقیم به servo motor متصل کنید.

نکته : فراموش نکنید برای کار کردن سروو موتور باید طبق نقشه شماتیک بالا حتما سیم قطب منفی منبع تغذیه خارجی (منبع تغذیه سروو موتور) را با پایه منفی (GND) منبع تغذیه آردوینو، به یکدیگر متصل کنید. در حقیقت باید منفی هر دو منبع تغذیه سروو موتور و برد آردوینو با هم مشترک شوند.

نحوه اتصال LCD کاراکتری به برد آردوینو

ال.سی.دی های کاراکتری به صورت کلی دارای 16 پایه هستند که در این پروژه برای اتصال آن به برد آردوینو کافی است طبق جدول زیر اتصالات را انجام دهید. همچنین لازم به ذکر است پایه های 7 و 8 و 9 و 10 در LCD کاراکتری به جایی متصل نمی شوند.

نحوه اتصال LCD کاراکتری به برد آردوینو

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

آموزش دستورات و توابع مهم در برنامه راه اندازی سروو موتور با آردوینو

فراخوانی کتابخانه Servo.h

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

تعریف یک servo motor در برنامه

یکی از ویژگی های بسیار کاربردی کتابخانه Servo.h امکان تعریف و راه اندازی تعداد نامحدود servo motor می باشد. به طور مثال در برد آردوینو NANO و یا UNO ما تعداد 13 پایه دیجیتال داریم که این به این معنا است که ما می توانیم توسط این کتابخانه 13 عدد servo motor را به صورت مجزا راه اندازی و کنترل کنیم. و یا در بردهای آردوینو سری مگا می توانیم تا 48 عدد servo motor را راه اندازی و کنترل کنیم که این یک آپشن فوق العاده محسوب می شود.

به این ترتیب برای اینکه بتوانیم هر servo motor را به صورت مجزا کنترل کنیم باید طبق دستور زیر برای هریک از آن ها یک نام متفاوت در برنامه تعریف کنیم یا به عبارتی یک آبجکت با نام متفاوت برای هر servo motor از کلاس Servo تعریف کنیم.

معرفی پایه سیگنال servo motor که توسط آن به آردوینو متصل شده

برای اینکه به آردوینو بفهمانیم که کدام سروو موتور به کدام پایه متصل شده باید از دستور زیر استفاده کنیم. در این دستور ابتدا نام آبجکتی که در مرحله قبل برای هر سروو موتور انتخاب کرده ایم را می نویسیم و سپس با نوشتن دستور attach() در مقابل آن به پایه ای که servo motor به آن متصل شده است اشاره می کنیم.

دستور attach() به غیر از تعریف شماره پایه آردوینو که servo motor به آن متصل شده است، 2 ورودی اختیاری دیگر هم می تواند بگیرد. که این ورودی ها شامل دو ورودی زیر می شود:

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

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

تعیین زاویه حرکت servo motor

با استفاده از دستور زیر می توانید به servo motor مورد نظر خود دستور دهید در کدام زاویه قرار بگیرد.

خواندن زاویه ای که سروو موتور در آن قرار دارد

برای فهمیدن زوایه ای که servo motor در آن توقف کرده است کافیست دستور زیر را استفاده کنید. در دستور زیر زاویه خوانده شده و سپس در یک متغیر با نام angle از جنس Int ریخته می شود.

خواندن مقدار طول پالس اعمال شده به سروو موتور

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

ویدئو آموزش راه اندازی و کنترل زاویه حرکت سروو موتور با برد آردوینو

 اطلاعات پروژه

 رمز فایل : www.electronics98.com

 حجم فایل : 200 کیلوبایت

 محیط برنامه نویسی : Arduino (IDE)

 برنامه نویسی شده به زبان : ترکیبی از برنامه نویسی به زبان سی (C) یا سی پلاس پلاس (++C)

 نویسنده : فرهاد اکبری

 تاریخ انتشار : 24 می 2019

18 دیدگاه

  1. اگر زاویه رو محدود کنم نمایشگر هم حل میشه چون که همون‌طور که گفتم نمایش گر هم پرپر میزنه

  2. با سلام
    مهندس جان برنامه تون خیلی خیلی عالی و بدون نقص بود و خیلی ممنون از این محتوای عالی تون
    فقط یک سوال داشتم : اگر بخوایم به سروو یک دستور بدیم که با زدن هر بار دکمه برای مثال 10 درجه بچرخه باید چیکار کنیم ؟؟؟ یعنی پتاسیومتر را حذفش کنیم بجاش باز زدن یکبار دکمه سروو 10 درجه بچرخه تا برسه به انتها و در آخرین باری که دکمه زده میشه و زاویه به اتمام میرسه سروو برگرده به حالت اولیه !؟!؟
    و یا اینکه هر 10 درجه یکبار بصورت خودکار بچرخه و مابین هر چرخش 5 ثانیه توقف کنه !؟
    خیلی ممنون میشم اگر پاسخ سوالم رو بدید
    واقعا خیلی جاها رو گشتم ولی تنها جایی بود که نزدیکترین کارایی رو برای من داشت فقط سایت شما بود ، تنها این 2 تا سوال رو اگر برام پاسخ بدید واقعا ممنون تون میشم
    با تشکرات فراوان

  3. سلام دوست عزیز
    ابتدا از لطف و محبت شما کمال تشکر را دارم و امیدوارم در تمامی مراحل زندگی شاد و پیروز باشید.
    با استفاده از برنامه ارائه شده در این پروژه تغییر و تعیین زاویه برای سروو موتور بسیار ساده است شما می توانید با نوشتن دستور زیر در برنامه، زاویه سروو را در هر مقداری که می خواهید به راحتی تنظیم کنید:

    در دستور بالا تنها کافی است بجای عبارت angle زاویه مورد نظر خود را وارد کنید.
    حالا فرض کنید می خواهید با زدن یک کلید در هر بار زاویه سروو موتور 10 درجه تغییر پیدا کند، برای این موضوع کافی است ابتدا یک ورودی در برنامه آردوینو برای اتصال کلید تعریف کنید، سپس در حلقه Loop یک دستور شرطی تعریف کنید که با یک شدن و یا صفر شدن آن ورودی به مقدار یک متغیر عدد 10 اضافه شود و سپس مقدار آن متغیر را در دستور بالا قرار دهید تا سرو به آن مقدار تغییر زاویه دهد و در پایان شرط دستوری شرطی دیگر بنویسید که اگر مقدار متغیر بیشتر از عدد 180 یا 360 شدن مقدار متغیر برابر 1 شود.

 شرایط و قوانین ثبت دیدگاه

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

 لطفاً بیش‌از‌حدِ معمول، شکلک یا ایموجی استفاده نکنید و از کشیدن حروف یا کلمات با صفحه‌کلید بپرهیزید.

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

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