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

سلام
تو جلسه های قبلی در مورد راه اندزای موتور DC مفصل صحبت کردیم یادتونه ؟ جلسه دهم .
این جلسه قصد دارم در مورد سروو موتورها صحبت کنم .
مثل روند بقیه جلسه ها اول از خود سروو موتور می گیم. سروو موتور در حقیقت همون موتور DC هست که تو ساختمان داخلیش یه فیدبک اضافه شده . فیدبکی که به ما کمک می کنه بتونیم موقعیت ( یا قشنگ تر بگم زاویه ) سروو رو دقیق تعیین کنیم. مثلا بهش بگیم برو تو زاویه 45 درجه وایسا ! حالا این که چجوری میفهه کجا وایسه رو اینجا به صورت دقیق آموزش داده .

حتما لینک پیشنهاد داده شده رو بخونید چون علاوه بر این که در مورد سروو حرف میزنه بهتون میگه فرق این موتور با موتور DC چیه . ( ناگفته نمونه که تعدادی از سروو موتورها هستن که از موتور AC ساخته می شن اما مورد بحث ما نیستن ولی اینجا بهشون اشاره شده که می تونید استفاده کنید.)

*** یکی ازمهم ترین خاصیت موتورهای سروو این هست که جریان مورد نیازشون در مقایسه با خود موتور های DC کمتره و همین یعنی یه امتیاز مثبت.

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

***********************************************************
سروو موتورها دو دسته بندی اساسی دارن .
دسته بندی اول سروو 180 و سروو 360 هست.
سرووهای 180 تنها زاویه ای بین 0 تا 180 (در عمل حدود 175 ) رو قبول می کنن و خارج از این نیم دایره نمی چرخن .
سروو 360 چی ؟ لابد فکر می کنید این سروو زاویه بین 0 تا 360 رو میگیره نه ؟ باید بگم که نخیر . اینجوریا نیست . سروو 360 اصلا زاویه نمی گیره . بلکه فقط دور می زنه . یعنی چی ؟
تو کدی که در آینده می زنیم خواهید دید که یه جا میگیم : (myservo.write(45 . این برای سروو های 180 یعنی سروو جان برو تو زاویه 45 درجه وایسا . اگر همین خط کد رو بدیم به یه سرو 360 این سروو 45 بار دور خودش می چرخه . یعنی هر عددی که در آرگومان این دستور نوشته بشه تعیین کننده تعداد دور هست.

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

***********************************************************

خب این جا معرفی اولیه سرووها تموم شد . حالا قصد داریم با استفاده از آردوینو راه اندازیش کنیم . این جا دو تا حالت مختلف بوجود میاد :
یکی این که سروویی که انتخاب می کنیم آمپر پایین باشه و برای تامین توان مصرفیش خود آردوینو پاسخگو باشه . سرووهایی مثل این سروو :
H512-SG90-500x500 برای راه اندازی این سرووها سیم بندی مثل شکل زیره :
Arduino-Servo-Basic
یعنی GND و VCC از آردوینو تامین میشه و سیم سیگنال سروو (که میشه سیم نارنجی ) وصل میشه به پین PWM شماره 9 . دقت کنید به جای پین شماره 9 هر پین PWM دیگه ای میشه .

حالت دومی که اتفاق می افته اینه که امپر مورد نیاز سروو از آمپری که آردوینو میتونه براش تامین کنه بیشتر بشه در این صورت نمی تونیم پاور موتورمون رو از آردوینو بگیریم . سرووهایی مثل این سروو :
MG995_Metal_Gear_Servo_2-500x500

برای تامین پاور قائدتا باید بریم سراغ منبع تغذیه های با آمپر بالا . پیشنهاد من 5 ولت 1 آمپره . حالا سیم بندیمون رو چجوری انجام بدیم ؟

2016-03-28_10-29-52


اگه به عکس دقت کنید اومده پین سیگنال سروو رو به پین دیجیتال شماره 9 وصل کرده
پاور سروو ( 5 ولت ) رو از منبع خارجی گرفته .
گراند سروو و گراند منبع و گراند آردوینو هر سه به هم وصل شدن .به این کار میگن زمین مشترک کردن. این نکته فوق العاده مهمه که اگه داریم توی پروژه هامون از منبع خارجی استفاده می کنیم گراند منبعمون با گراند آردوینومون یکی بشه . برای این که درک کنید یه مثال می زنم .
فرض کنید قراره دو عدد رو پیدا کنیم که اختلافشون 5 باشه . این دوتا عدد میتونن 0 و 5 باشن، میتونن 0.5 و 5.5 باشن، میتونن 1 و 6 باشن و هزارتا حالت دیگه . درسته ؟ اختلاف همه این عددها یکیه ولی هیچ دو دسته ایشون با هم مساوی نیستن . توی آردوینو هم دقیقا همینه . منطق کاری آردوینو 5 ولته یعنی حداقل ولتاژ 0 و حداکثر ولتاژ 5 ولته . منبعی هم که الان وصل کردیم 5 ولته . یعنی اختلاف حداکثر و حداقل ولتاژش 5 ولته . حالا ما با ایجاد زمین مشترک بین منبع و آردوینو داریم میگیم دامنه تغییر ولتاژ هر دو از 0 تا 5 ولت باشه نه هر دامنه تغییر دلخواهی چرا که تو عالم الکترونیک و میکروکنترلر 5 ولت و 5.5 ولت خیلی اختلاف دارن . بنابراین توی این مساله همیشه گراند مشترک رو رعایت کنید.

***********************************************************

خب سیم بندی که انجام شد میریم سراغ کد:
2016-03-28_10-39-32

قسمت 1 : معرفی کتابخونه سروو . این کتابخونه کتابخونه پیش فرض آردوینو هست و هیچ احتیاجی نداره که بخواین اضافه کنین به کتابخونه های آردوینو.
قسمت 2 : معرفی آبجت myservo از کلاس Servo
قسمت 3 : با این خط کد داریم میگیم پین pwm ای که سیم سیگنال سروو رو بهش وصل کردیم پین شماره 9 هست.
قسمت 4 : با دستور myservo.write داریم به سروو زاویه ای رو که میخوایم بهش برسه میگیم . اول بهش میگیم برو تو زاویه 0 درجه وایسا ، یک ثانیه بهش زمان میدیم ((delay(1000) ، بهش میگیم برو تو زاویه 90 درجه وایسا ، یک ثانیه بهش زمان میدیم ، بهش میگیم برو تو ازویه 180 وایسا ، یک ثانیه بهش زمان میدیم و در آخر بهش میگیم تو زاوه 90 وایسا . اینجا LOOP تموم میشه و دوباره بر میگرده از اول و میره تو موقعیت 0 بعد 90 بعد 180 و الی آخر .

One thought on “جلسه بیست و یکم : راه اندازی سروو موتور

  1. با سلام و تشکر از مطالب بسیار خوبتون،
    میخواستم ازتون خواهش کنم که لطف بفرمائید و یک جلسه رو هم به درایو استپ موتورها و همین طور نحوۀ درایو دو استپ موتور با استفاده از
    اردوینو اختصاص بدهید. با تشکر و امتنان

  2. سلام.دوست خوب لطف میکنی نرم افزار کد نویسی رو معرفی کنی .
    واگه قرار باشه به سروو بگیم 100 عدد 10درجه رو با هر بار یک ثانیه تاخیر در جهت عقربه های ساعت بگرد وبعد دوباره به جای اول خود یعنی 100 تا 10 درجه خلاف عقربه های ساعت برگرد چه باید کرد.

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

  4. باسلام
    ممنون از راهنماییهاتون

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

  5. سلام مهندس من ازگروه تجاری دنا هستم یه پروژه داریم اگه میشه با این شماره تماس بگیرید عربی09362760563

  6. سلام من یه سروو دارم 180 درجه مدل mg945 هرکاری کردم نتونستم درست حرکتش بدم . یا دوران های 10 درجه ای داره یا فقط میلرزه . از به منبع 5 ولت 1 آمپر خارجی هم براش استفاده کردم اما نتیجه نداد . همین سورس همین منبع رو وقتی به یه سروو 360 دیگه وصل میکنم قشنگ شروع میکنه چرخیدن اما این 180 درجه اصلا درست کار نمیکنه. ممنون میشم راهنمایی کنید

  7. سلام. طاعت قبول
    برای اولین بار هست که با سروو کار میکنم و چون آشنایی ندارم بعضی چیزهای ساده برام سوال هست. یه سروو MG996R گرفتم و با آردوینو اونو فعال کردم. اما چندتا ایراد توی کار میبینم.

    اول اینکه سروو بصورت دایم چیزی در حدود 100mA جریان می کشه. یعنی وقتی سیم مثبت و منفی سروو رو وصل میکنیم، آمپر صفر هست. اما به محض اتصال سیم (نارنجی) PWM سروو حدود 100mA جریان میکشه. فرقی هم نمیکنه که تو چه زاویه ای باشه. (این جریان غیر از جریان هنگام چرخش زاویه سروو هست).
    آیا این طبیعی هست؟
    و از اون مهمتر، اگر طبیعی هست، راهی به نظر تون میرسه که این جریان کشی بی مورد رو حذف کنم؟
    چون میخوام پروژه نهایی رو با باطری راه اندازی کنم و مدیریت جریان خیلی برام اهمیت داره.

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

    برد آردوینو، هم Uno هم Mega دارم. اما عملکرد سروو با هر دو یک شکل هست.
    دستوراتی که برای تست اولیه و راه اندازی موقت سروو استفاده کردم به این شرح هست:

    #include
    int servopin3 = 3; //Servo signal pin is attached to pin 3
    Servo servo3; // define a servo No 2

    void setup() {
    servo3.attach (servopin3);
    }

    void loop() {
    servo3.write(0);
    delay (10000);
    servo3.write(105);
    delay (10000);
    }

    ممنون میشم اگه راهنمایی بفرمایید.

پاسخ دادن به عربی لغو پاسخ

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