راه اندازی سروو موتور با آردوینو | در این مقاله از آموزشگاه رباتیک ایران به نحوه راه اندازی سروو موتور با آردوینو میپردازیم و خواهیم دید که میتوانیم حرکتهای دورانی و چرخشهای کنترل شده داشته باشیم.
کاربرد سررو موتورها بسیار گسترده هست به طور مثال: رباتیک, اتوماسیون, صنعت و ….
راه اندازی سروو موتور با آردوینو
سروو موتور چگونه کار میکند؟
روند کار سروو موتور با استفاده از سیستم حلقه بستهای است که از آن برای کنترل حرکت و موقعیت خود استفاده میکند.
آموزشگاه رباتیک ایران
سیستم حلقه بسته در سروو موتورها سیستم فیدبک منفی, که در این سروو موتور (SG90) سیگنال کنترل موقعیت (فیدبک) توسط پتانسومتر که به انتهای شافت آن متصل شده است به یونیت کنترل (کنترلر) ارسال میکند.
کنترلر با مقایسه سیگنال فیدبک و داده ورودی موتور را به حرکت در میآورد تا شافت آن در جهت صحیح نسبت به داده ورودی حرکت کند و پس از قرار گیری در موقعیت صحیح متوقف میشود.
پایههای SG90
- سیم قرمز: برای تغذیه +۵ ولت سروو موتور استفاده میشود.
- سیم قهوهای: پایه Gnd آردوینو و همچنین در صورت استفاده از منبع تغذیه باید به این پایه متصل شود.
- سیم زرد: برای دریافت سیگنال از برد آردوینو استفاده میشود.
. سروو موتور SG90
سروو موتور SG90 با دریافت یکسری پالس از طریق ورودی خود کنترل میشود و محدوده آزاد دوران آن ۱۸۰ درجه میباشد.
این سرور موتور هر ۲۰ms پالس ورودی خود را چک میکند یعنی فرکانس دیتاهای ورودی برای کنترل باید ۵۰Hz باشد.
اگر عرض پالس ورودی ۱ms باشد به معنی این است که سروو موتور باید در موقعیت ۰ درجه قرار بگیرد همچنین پالس ۱.۵ms ,90 درجه و ۲ms ,180 درجه که انتهای بازه دورانی آن است حرکت کند و با اعمال پالسهای دلخواه بین ۱ms تا ۲ms می توانیم به موقعیت دلخواه خود دست پیدا کنیم.
آموزشگاه رباتیک اران
SG90 در حالت بدون بار و ایستا جریان ۱۰ میلی آمپر و در حالت حرکت بین ۱۱۰ تا ۲۵۰ میلی آمپر جریان مصرف میکند. ولتاژ کاری آن بین ۴.۸ تا ۶ ولت است که معمولا به تغذیه ۵ ولت متصل میشود.
**در بعضی موارد ممکن است در استفاده سروو موتور در حالتی که تغذیه آن به آردوینو متصل باشد در لحظهای که سروو جریان زیادی مصرف کند باعث ریست شدن برد آردوینو شود که با موازی کردن خازن با ظرفیت مناسب این مشکل رفع میشود. همچنین میتوانید با استفاده از منبع تغذیه جداگانه و متصل کردن پایه های GND آردوینو و سروو موتور به یکدیگر نیز این مشکل را رفع نمود.
ولتاژ کاری | ۴.۸ – ۶ ولت |
جریان بدون بار | ۱۰۰ میلی آمپر |
ماکزیمم سرعت | ۶۰ درجه در ۰.۱۲ ثانیه |
وزن | ۶ گرم |
گشتاور | ۱.۵ کیلوگرم بر سانتی متر |
راه اندازی سروو موتور SG90
قطعات مورد نیاز:
- برد بورد
- سروو موتور SG90
- برد آردوینو
سیم بندی پروژه:
طبق تصویر سیم قهوهای به GND آردوینو و سیم قرمز به Vcc متصل شده است, سیم زرد که مربوط به ارسال دیتا و کنترل سروو موتور است باید به یکی از پایههای خروجی آنالوگ متصل شود که در تصویر به پایه ۹ آردوینو وصل کردیم ولی شما میتوانید هر یک از خروجیهای آنالوگ را انتخاب کنید.
کد نویسی :
در این پروژه برای راه اندازی سروو موتور از کتابخانه Servo که بصورت پیش فرض بر روی نرم افزار آردوینو قرار دارد استفاده میکنیم.
برای افزودن کتابخانه مورد نظر به پروژه خودمون از قسمت Sketch => Include Library و بر روی کتابخانه Servo کلیک میکنیم, مهمترین دستورات کتابخانه Servo دستورات attach و write هستند که در ادامه درباره کاربرد هر دستور توضیح میدهیم.
کد زیر نمونه مثالی که هر ۱ ثانیه شافت سروو موتور در هریک از موقعیتهای ۰, ۴۵, ۹۰, ۱۳۵ و ۱۸۰ درجه قرار میگیرد:
راه اندازی سروو موتور
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ |
#include Servo IranServo; #define ControlWire 9 void setup() { IranServo.attach(ControlWire); } void loop() { IranServo.write(۰); delay(۱۰۰۰); IranServo.write(۴۵); delay(۱۰۰۰); IranServo.write(۹۰); delay(۱۰۰۰); IranServo.write(۱۳۵); delay(۱۰۰۰); IranServo.write(۱۸۰); delay(۱۰۰۰); } |
در خط ۱ و ۳ کتابخانه Servo را فراخوانی کردیم و در خط سوم از آن شئ با نام IranServo ساختهایم.
۱ ۲ ۳ |
#include Servo IranServo; |
خط چهارم به عبارت ContolWire مقدار عدد ۹ که تعیین کننده پایهای است که سیم کنترل سروو به آن متصل است میباشد.
۱ |
#define ControlWire 9 |
آموزشگاه خانه رباتیک ایران
تابع attach باید پایه سیم کنترلی را معرفی کنیم و برای این کار لازم است فقط عبارت ControlWire را در تابع بنویسیم:
۱ ۲ ۳ ۴ ۵ |
void setup() { // put your setup code here, to run once: IranServo.attach(ControlWire); } |
دستور Write() موقعیت شافت سروو موتور را در مکان دلخواه مان تنظیم میکند و طبق مثال کد ما بصورت زیر میشود:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ |
void loop() { // put your main code here, to run repeatedly: IranServo.write(۰); delay(۱۰۰۰); IranServo.write(۴۵); delay(۱۰۰۰); IranServo.write(۹۰); delay(۱۰۰۰); IranServo.write(۱۳۵); delay(۱۰۰۰); IranServo.write(۱۸۰); delay(۱۰۰۰); } |
شعبه بابل: پل کارگر به سمت کشوری، روبروی ماکروویو، جنب فروشگاه جانبو
شعبه ساری: خیابان مهدیه، نبش بهمن شرقی