پروژه های آردینو

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

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

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

از سرو موتور در مواردی استفاده می شود که نیاز به حرکت یا موقعیت دقیق شافت وجود دارد.

این موارد برای کاربردهای با سرعت بالا پیشنهاد نمی شوند.

این موارد برای سرعت کم ، گشتاور متوسط ​​و کاربرد دقیق موقعیت ارائه می شوند.

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

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

یک سروو موتور سیمهای اصلی دارد ، یکی برای ولتاژ مثبت دیگری برای زمین و دیگری برای تنظیم موقعیت. سیم RED به برق متصل است ، سیم سیاه به زمین و سیم زرد به سیگنال متصل است.

بخوانید : پروگرام آردوینو با بلوتوث

خرید سرو موتور 

 

سروو موتور ترکیبی از موتور DC ، سیستم کنترل موقعیت ، چرخ دنده است.

موقعیت شفت موتور DC توسط الکترونیک کنترل در سروو تنظیم می شود ، بر اساس نسبت وظیفه PWM سیگنال پایه SIGNAL.

به زبان ساده الکترونیک کنترل با کنترل موتور DC موقعیت شافت را تنظیم می کند.

این داده ها در مورد موقعیت شافت از طریق پین SIGNAL ارسال می شود.

داده های موقعیت به کنترل باید به صورت سیگنال PWM از طریق پین Signal موتور سروو ارسال شود.

فرکانس سیگنال PWM (Pulse Width Modulated) براساس نوع سروو موتور می تواند متفاوت باشد.

نکته مهم در اینجا DUTY RATIO سیگنال PWM است.

بر اساس این DUTY RATION الکترونیک کنترل شافت را تنظیم می کند.

همانطور که در شکل زیر نشان داده شده است ، برای انتقال شافت به ساعت 9 درجه ، TURN ON RATION باید 1/18 باشد.

1 میلی متر زمان روشن و 17 میلی متر زمان خاموش در یک سیگنال 18 میلی متری

برای انتقال شافت به ساعت 12 درجه ، زمان روشن بودن سیگنال باید 1.5 میلی ثانیه و زمان خاموش 16.5 میلی ثانیه باشد.

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

این PWM در اینجا با استفاده از ARDUINO UNO تولید می شود

اجزای مدار

سخت افزار مورد نیاز :

  1. ARDUINO UNO
  2. منبع تغذیه
  3. خازن 100uF
  4. دکمه
  5. مقاومت 1KΩ
  6. موتور سروو

 

بخوانید : ساخت رسیور IR با استفاده از آردوینو

 

نمودار و توضیحات مدار موتور سروو آردوینو

 

در موارد عادی برای تنظیم فرکانس و بدست آوردن نسبت وظیفه مورد نیاز برای کنترل دقیق موقعیت سروو باید به رجیسترهای کنترل کننده برویم ، در ARDUINO نیازی به انجام چنین کارهایی نیست.

در ARDUINO کتابخانه های از پیش تعریف شده ای داریم که پس از فراخوانی یا درج پرونده هدر ، فرکانس ها و نسبت های وظیفه را بر این اساس تنظیم می کنند.

در ARDUINO ما به سادگی باید موقعیت سروو مورد نیاز را بیان کنیم و PWM به طور خودکار توسط UNO تنظیم می شود.

کارهایی که برای بدست آوردن موقعیت دقیق سروو باید انجام دهیم عبارتند از:

  1. #include <Servo.h>
  2. Servo sg90servo;
  3. Sg90.attach(servo_signal_pin_attached_to);
  4. Sg90.write(needed_position_ angle);

بخوانید : کنترل ماتریس 8×8 با آردوینو

شروع کار

ابتدا باید فرکانس سیگنال PWM را تنظیم کنیم و برای این منظور باید پرونده هدر  include Servo.h را فراخوانی کنیم ، با درج این فایل هدر در برنامه ، فرکانس به طور خودکار تنظیم می شود و ما باید از برخی شرایط خاص استفاده کنیم ، که کاربر را قادر می سازد موقعیت مورد نیاز سروو را مستقیماً و بدون هیچ گونه سر و صدا وارد کند.

اکنون ما باید یک نام برای سروو “Servo sg90sevo” تعریف کنیم ،

در اینجا “sg90servo” نام انتخاب شده است ، بنابراین هنگام نوشتن برای معجون ما قصد داریم از این نام استفاده کنیم ،

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

اکنون ما به UNO می گوییم که پایه سیگنال سروو از کجا وصل شده یا برای تولید سیگنال PWM به کجا نیاز دارد.

برای انجام این کار ما “(Sg90.attach (3 ” را داریم ، در اینجا ما به UNO می گوییم پین سیگنال سروو را در PIN3 متصل کرده ایم.

تنها چیزی که باقی مانده است برای تنظیم موقعیت است ، ما با استفاده از “(Sg90.write (30” می خواهیم موقعیت سروو را تنظیم کنیم ،

با این دستور دست سروو 30 درجه حرکت می کند ، بس. پس از آن هر زمان که نیاز به تغییر موقعیت سروو داریم ، باید دستور Sg90.write  را فراخوانی کنیم.

در این مدار دو دکمه خواهیم داشت که یک دکمه موقعیت سروو را افزایش می دهد و دیگری برای کاهش موقعیت سروو است.

آموزش کنترل Arduino Servo Motor به صورت گام به گام کد C آورده شده در زیر توضیح داده شده است.

کد کامل برنامه

volatile int i=0;//initializing a integer for incrementing and decrementing duty ratio.

#include <Servo.h>// header file for controlling servo

Servo servo;//defining the name usage as servo itself

void setup()

{

                pinMode(3, OUTPUT);   // sets the pin3 as output

                pinMode(0, INPUT);// sets the pin0 as output

                pinMode(1, INPUT);// sets the pin1 as output

}

void loop()

{

                servo.write(i);//set servo potion ‘i’ degrees

                if (digitalRead(0)==LOW)

                {

                                if (i<180)

                                {

                                                i++;//if pin0 is pressed and degrees is less than 180

                                                delay(30);

                                }

                }

                if (digitalRead(1)==LOW)

                {

                                if (i>0)

                                {

                                                i–;// if pin1 is pressed and degrees is greater than 0

                                                delay(30);

                                }

                }

}

این پروژه توسط گروه وی تات انجام شده wetat.ir

کپی با دکر منبع بلامانع است

نوشته های مشابه

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

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