به نام خدا
سروو موتور (Servo motor) یا موتور کنترل نوعی از موتورهای الکتریکی است که با هدف بکارگیری در سیستمهای کنترل فیدبک طراحی میشود. این موتور ها قدرت زیادی دارند و میتوانند وزن زیادی را متحمل شوند. زاویه چرخش سروو موتور ها از ۰ تا ۱۸۰ درجه است اما سروو موتور هایی وجود دارند که میتوانند ۳۶۰ درجه هم دور بزنند. با استفاده میکرو کنترل ها و دادن پالس به آن می توانیم موقعیت شافت را بصورت دقیق مشخص کنیم ، سرعت عملکرد سروو موتور ها بسیار زیاد است . چون میزان لختی یا اینرسی در آن بسیار کم است و همچنین قدرت زیادی دارند از آنها در موارد مختلف مانند هواپیما های مدل ، چرخش تخم های دستگاه جوجه کشی ، ساختن انواع بازو های الکترونیکی ، ساختن ربات های انسان نما و … مورد استفاده قرار می گیرند .
برای راه اندازی این نوع موتور ها ، باید پالسی بین ۱ تا ۲ میلی ثانیه ایجاد کرد.
لوازم مورد نیاز برای انجام پروژه :
- آردوینو (arduino) — خرید از فروشگاه
- سروو(servo) موتور (مدلش مهم نیست) — خرید از فروشگاه
- پتانسیومتر ۱۰ کیلو — خرید از فروشگاه
اتصالات :
- سیم زرد سروو(servo) به پین ۹ آردوینو (arduino)
- سیم قرمز سروو(servo) به ۵v Vcc
- سیم قهوه ای سروو(servo) به Gnd
- Vcc و Gnd پتانسیومتر رو خودتون وصل کنید
- خروجی پتانسیومتر به پین A0 آردوینو (arduino)
این هم از کد :
#include <Servo.h> Servo myservo; int pot; void setup() { myservo.attach(9); } void loop() { pot = analogRead(A0); pot = map(pot, 0, 1023, 0, 180); myservo.write(pot); }
فراخوانی کتابخانه سروو جهت ارتباط برقرار کردن با سروو(servo) موتور
#include <Servo.h>
ایجاد یک شی جدید از جنس سروو با نام myservo
Servo myservo;
ایجاد یک متغییر با نام pot که قرار است مقدار آنالوگ پتانسیومتر در آن ریخته شود
int pot;
شروع حلقه ی محدود Setup
void setup() {
مشخص کردن سریال کاری دریچه ی سریال
Serial.begin(9600);
معرفی پایه ای که سروو به آن متصل است و پایان حلقه ی Setup
myservo.attach(9); }
شروع حلقه ی loop
void loop() {
خواندن مقدار آنالوگ پتانسیومتر (پین A0 آردوینو) و ریختن آن در رجیستر pot
pot = analogRead(A0);
تناسب بندی توسط تابع map بین مقدار آنالوگ پتانسیومتر از ۰ تا ۱۰۲۳ بین درجه ی سروو(servo) از ۰ تا ۱۸۰
pot = map(pot, 0, 1023, 0, 180);
دستور دادن به سروو(servo) توسط تابع write و رفتن در زاویه ی مورد نظر توسط پتانسیومتر
myservo.write(pot);
نوشتن زاویه ی سروو(servo) در دریچه ی سریال
Serial.println(pot);
صبر برای قرار گیری سروو(servo) در زاویه ی مورد نظر و پایان حلقه ی loop
delay(100); }
اگر بخواهیم سروو(servo) به صورت خودکار و بدون پتانسیومتر در درجه ای دلخواه قرار گیرد برنامه بدین شکل تغییر میکند :
#include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() { myservo.write(180 تا ۰ از دلخواه درجه نوشتن); }
اگه مشکلی داشتین تو قسمت نظرات بنویسید تا رفعش کنم….
یه اموزش هم برای موتور های ۳۶۰ درجه بزارید لطفا یا بگید چجوری با اردوینو کنترلش کنم خیلی نیاز دارم ممنون
سروو موتور ۳۶۰ درجه فرق زیادی با سروو ی ۱۸۰ درجه نداره !!! فقط برای سروو ی ۱۸۰ در قسمت write میتونید یه عدد از ۰ تا ۱۸۰ وارد کنید و سروو تو همون زاویه میمونه ولی در سروو موتور ۳۶۰ در قسمت write هر عددی وارد کنید موتور به همون تعداد دور میزنه!!! من اینجوری راه انداختمش…
۱- دریچه ی سریال چیه و چرا ۹۶۰۰ انتخاب کردین
۲-مقدار ۰-۱۰۲۳ چی هست؟ واحدش چیه؟
ممنون از مطلب بسیار مفیدتون
سلام ، ممنون بابت توضیحات کامل شما دوست عزیز…
سروو موتور من در حالت استارت اولیه لرزش داره ، چطوری میتونم لرزشش رو بگیرم ؟
سلام
ممنون از آموزش خوبتون.
آیا میشه سرعت سروو موتور رو کنترل کرد؟
با سلام
ضمن تشکر از توجه شما، خیر سرعت سروو موتور ثابت است و فقط میتوانید زاویه را کنترل کنید.
سلام خسته نباشید من دو تا سرو موتور MG996R رو با اردینو میخوام روشن کنم رو شن نمیشه…این برنامه هم دادم اما روشن نشد…
باید چیکار کنم؟؟؟
پروژه دنبال کننده خورشیدی هست..
با سلام
این سرو نیاز به جریان بیشتر از توان آردوینو دارد. از منبع تغذیه مجزا استفاده کنید. سپس موارد را از همین طریق اطلاع رسانی کنید.
سلام اگه میشه برنامه ای بزارین که بشه با اردینو پتانسیومتر رفت و برگشت سرو ها رو درست کرد.برای رباط بازو با چهار درجه ازادی وقابلیت۱۸۰درجه چرخش دارد.لطفا سریع جواب بدید
با سلام و تشکر از شما
کاربر گرامی دیجی اسپارک مرکز ارایه کدهای مورد علاقه شما به صورت رایگان نمیباشد. شما میتوانید به آموزشهایی از جمله تشخیص میدان مغناطیسی و کنترل سرو موتور Servo با سنسور Reed switch و یا آموزش کار با ماژول ولوم کشویی ۱۰ کیلو اهم Slide Potentiometer و آردوینو مراجعه کرده سپس سوالاتتان را برای رسیدن به پاسخ نهایی مطرح کنید. لطفا صفحه حمایت از دیجی اسپارک را مطالعه بفرمایید.
سلام، سروو ۳۶۰ درجه جهت و سرعت چرخشش فقط قابل تنظیمه.به این صورت که:
servo.write(89-100)=سرعت۰
servo.write(180)= سرعت( بیشترین)، جهت(چپگرد)
servo.write(101)= سرعت( کمترین)، جهت(چپگرد)
servo.write(0)= سرعت( بیشترین)، جهت(راست گرد)
servo.write(88)= سرعت( کمترین)، جهت(راست گرد)
برای اطلاع بیشتر:
https://forum.arduino.cc/index.php?topic=521760.0
با سلام
از توجه شما سپاسگزارم. پیشنهاد میشود موارد اینچنینی را همانند توضیحاتتان، ارایه بفرمایید. هدف ما تولید محتوای فارسی و کمک به توسعه وب فارسی میباشد.
سلام من تازه میخوام آردوینو رو شروع کنم لطفا برای یاد گیری مرجع خوب معرفی کنید
برا راه اندازی یک سروو ۱٫۸ کیلو وات هم میشه از آردوینو استفاده کرد
سلام
در سایت آموزش های آردوینو کامل دسته بندی شده است. آموزش ها به زبان فارسی و کدهای هر آموزش تحلیل شده است. در ابتدا پیشنهاد میکنم از سری آموزش های پکیج سنسور شروع نمایید. جهت دسترسی به آموزش ها از لینک زیر اشتراک تهیه کنید. در هر مرحله در صورت برخورد به مشکل از طریق بخش نظرات با نویسنده آموزش در ارتباط باشید.
خرید اشتراک دیجی اسپارک
پکیج سنسور آنالوگ و دیجیتال Arduino Sensor Kit با ۳۷ سنسور متنوع و آموزش راه اندازی
در خصوص سوال دوم بله باید از درایور موتور مناسب سرو موتور انتخابی برای کنترل جریان و ولتاژ کافی استفاده کنید.
سلام برای من ارور کتابخانه میده . نمیدونم باید کجا کتابخانه رو دانلود کنم .
توی منابع کتابخونه ام هم #include نیست .
لطفا کمکم کنید .
با سلام
کاربر گرامی درخصوص روش نصب کتابخانه از آموزش نصب کتابخانه آردوینو اقدام بفرمایید. سپس نتیجه را از همین طریق و یا آموزش لینک شده، اعلام بفرمایید.
درود
بابت اموزش کامل تون و وبسایت پر از آموزشتون تشکر میکنم.
میخواستم ببینم آیا میشه سرعت چرخش سروو رو تنظیم کرد؟
سپاس فراوان
با سلام
بله امکان پذیر است.
در این خصوص بایستی از تابع delay و یا استفاده از توابع switch case و for شرط های زمانی جهت حرکت شافت سرو موتور در نظر بگیرید.
متونید کدش رو بگید؟
سروو سرعتش زیاده میخوام کم کنم
راستی میخوام تابع زاویه و زمان یا همون delay رو هم داشته باشه با تشکر
با سلام
امکان نوشتن کد در کامنت ها وجود ندارد. در این خصوص درخواست خود را از طریق لینک زیر ارسال کنید.
پرتال پشتیبانی فروشگاه
ببخشید من مى خوام تو یک برنامه یک سروو رو با یک پتانسیومتر و یک سروو دیگه رو با پتانسیومتر دیگه کنترل کنم چطور مى تونم یک سروو دیگه توى برنامه بزارم با نام دیگه .
با سلام
کافیست سرو دوم را با متغیر متفاوت دیگری تعریف نمایید. به عنوان مثال اگر دو سرو دارید به صورت زیر تعریف نمایید:
myservo1;
myservo2;
و به همین ترتیب در کدها تعمیم دهید.
سلام
برای کنترل ۲۰۰ عدد سروو بصورت همزمان چه ایده ای دارید؟
با سلام
برای این منظور بایستی از آی سی های درایور PWM مانند PCA9685 استفاده کنید. در کل موردی که مد نظر دارید نیازمند طراحی یک مدار مجزا برای فرمان است.
سلام
برای راه اندازی ۳ استپر موتور و ۴ تا سروو موتور به صورت همزمان با آردوینو چه چیزی لازم هست؟
با سلام
در این خصوص بایستی از درایور موتورها استفاده کنید.
به عنوان مثال شیلد درایور موتور L293 قابلیت اتصال دو استپر موتور، چهار موتور و دو سرو موتور را دارد.
سلام خسته نباشید
برای کنترل سروو باید پین pwm باشد؟
با سلام
بله از پایه های PWM بردهای میکروکنترلر استفاده کنید.
سلام میخواستم وقتی که دکمه رو زدم سروو بره چپ وبعد از اینکه ول کردم بیاد سر جاش
با سلام
کاربر گرامی در این خصوص بایستی از توابع شرطی در برنامه نویسی آردوینو استفاده کنید که نیاز به دانش برنامه نویسی خواهد داشت.
سلام.
برای اولین بار هست که با سروو کار میکنم و چون آشنایی ندارم بعضی چیزهای ساده برام سوال هست. یه سروو MG996R گرفتم و با آردوینو اونو فعال کردم. اما چندتا ایراد توی کار میبینم.
اول اینکه سروو بصورت دایم چیزی در حدود ۱۰۰mA جریان می کشه. یعنی وقتی سیم مثبت و منفی سروو رو وصل میکنیم، آمپر صفر هست. اما به محض اتصال سیم (نارنجی) PWM سروو حدود ۱۰۰mA جریان میکشه. فرقی هم نمیکنه که تو چه زاویه ای باشه. (این جریان غیر از جریان هنگام چرخش زاویه سروو هست).
آیا این طبیعی هست؟
و از اون مهمتر، اگر طبیعی هست، راهی به نظر تون میرسه که این جریان کشی بی مورد رو حذف کنم؟
چون میخوام پروژه نهایی رو با باطری راه اندازی کنم و مدیریت جریان خیلی برام اهمیت داره.
دوم اینکه انگار سروو تو حالت ثابت هم دایم درگیر هست. مثلا به سروو دستور میدم بره به زاویه ۹۰ درجه. بعد از انجام دستور، انگار هنوز هم موتور سروو خیلی کم درگیر هست و صدا های ریز ریز میده. حتی گاهی سروو تکون های ریزی هم میخوره که نشون میده موتور سروو دایم داره حرکت های کمی میکنه. فرقی هم نداره سروو تو چه زاویه ای باشه.
آیا این مورد هم طبیعی هست؟
برد آردوینو، هم 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);
}
ممنون میشم اگه راهنمایی بفرمایید.
با سلام
در نظر داشته باشید سرو موتور MG996 دارای ولتاژ ورودی ۴٫۸ ~ ۶ است و برای راه اندازی به ولتاژ ۶ ولت نیاز دارید که در این ولتاژ جریان عبوری بین ۵۰۰ تا ۹۰۰ میلی آمپر است و به همین دلیل به تنهایی با برد آردوینو راه اندازی نمیشود.
مجدد سلام
ممنون از پاسخگویی.
شاید درست این بود که در مطلب بالا عرض میکردم برای راه اندازی این سروو از منبع تغذیه مجزا استفاده کردم که زمین اون رو با آردواینو مشترک کردم. تصورم این بود که با گفتن مقدار آمپری که سروو تو حالت بی باری میکشه، متوجه عرضم میشید.
لذا ممنون میشم با توجه به این موضوع پاسخ سوالاتم رو بفرمایید.
ضمنا از ولتاژ ۶ ولت برای راه اندازی سروو استفاده کردم.
با سلام
ضمن تشکر از توضیحات کامل شما، این مورد توسط بنده تست نشده است و در صورتیکه تست آن اجرا شود، حتما نتیجه را اعلام خواهم کرد. لذا از دیگر دوستانی که در این خصوص تجربه ای دارند، تقاضا میکنم در بحث شرکت کنند.
مجدد سلام
علت رو پیدا کردم. ظاهرا بعد از دستور تغییر زاویه به سروو، آردوینو دایما پالس PWM رو ارسال میکنه. یعنی ارسال پالس PWM به هیچ وجه توسط آردوینو قطع نمیشه.
اگر بخوام دقیقتر توضیح بدم؛ وقتی دستور ;servo3.write(0) رو به سروو میدیم؛ تا زمانی که دستور ;(servo3.write(105 به سروو داده نشده، پالس PWM برای قرار گرفتن در زاویهی صفر درجه بطور دایم توسط آردوینو تولید میشه و به هیچ وجه قطع نمیشه. این حالت هنگام ارسال زاویه ۱۰۵ درجه و یا هر زاویه دیگه هم به همین صورت ادامه داره.
حالا سوالم اینه که چطور میتونم بعد از ارسال مثلا زاویه صفر درجه به سروو و قرار گرفتن سروو در زاویه مد نظر، ارسال پالس PWM توسط آردوینو تا زمان ارسال دستور جدید قطع بشه؟
سلام مطلب خیلی خوبی بود
فقط اگه امکانش هست آموزش کنترل کردن سروو موتور بدون کتابخانه رو هم بزارید.
با سلام
این مورد تست نشده است و پیشنهاد میشود از دستورات کتابخانه استفاده کنید.
سلام خسته نباشی من با برد نانو یک رادیو کنترل ساختم که همه چیش درسته فقط موقع برنامه نوشتن کامپایل نمیکنه اخرش ارور میده که عدد صفر کد برگشت نیست کد زیر اخرش فکر کنم ارور مربوطشه . تازه کارم این یعنی چی ممنون میشم کمکم کنید
/sdk/hardware/tools/avr/bin/avr-g++ -no-canonical-prefixes -std=gnu++11 -c -g -Os -w -mmcu=atmega328p -DF_CPU=16000000L -DUSB_VID=null -DUSB_PID=null -DARDUINO=10812 -DIDE=”ArduinoDroid” -DARDUINO_ARCH_AVR -DARDUINO_AVR_UNO /build/sketch_sep03a.cpp -o /build/sketch_sep03a.cpp.o /sdk/hardware/tools/avr/bin/avr-gcc -no-canonical-prefixes -Os -Wl,–gc-sections -Wl,-T /sdk/hardware/tools/avr/avr/lib/ldscripts/avr5.x -mmcu=atmega328p -o /build/sketch_sep03a.cpp.elf /build/sketch_sep03a.cpp.o /coreBuild/core.a -L/build -lm /coreBuild/core.a(main.cpp.o): In function `main’:
/sdk/hardware/arduino/cores/arduino/main.cpp:11: undefined reference to `setup’
/sdk/hardware/arduino/cores/arduino/main.cpp:14: undefined reference to `loop’
collect2: error: ld returned 1 exit status
Return code is not 0
با سلام
با توجه به اینکه سوال با آموزش مرتبط نیست و روند احرای پروژه مشخص نیست، امکان راهنمایی وجود ندارد.
سلام روز بخیر من برای پروژه باید ۷ سرو موتور به وسیله برد اردوینو نانو کنترل کنم که یک پایه pwm کم دارم باید چکار کنم هم در برنامه نویسی هم برای پین خروجی
با سلام
از مبدل ها میتوانید استفاده کنید.
ماژول درایور سرو موتور ۱۶ کاناله ۱۲ بیتی PWM با تراشه PCA9685
سلام اگر بخوام همزمان از کتابخونه تایمر ۱ و سروو استفاده کنم چیکار کنم؟
با سلام
سوال شما کامل نیست.
زمانی که از کتابخانه تایمر ۱ استفاده میکنم دیگه خروجی های PWM که برای سروو استفاده شده کار نمیکنه باید چیکار کنم که هم وقفه تایمر ۱ داشته یاشم و همم بتونم از سروو استفاده کنم؟
با سلام
این مورد وابسته به برنامه نویسی است.
سلام من طبق همین راه حل آخر به صورت خودکار و بدون پتانسیومتر رفتم ولی هی ایرور include’does not name a type
با سلام
کد به درستی انتقال داده نشده است. کد را بررسی کنید.
سلام
جسارتا کدام کد اشتباه هست چون من هرچی که توی خود برنامه بالا توی عکس بود نوشتم
با سلام
کد برنامه در دسترس است. اگر با اروری مواجه شده اید ارور را ضمیمه کنید تا بررسی شود.
خیلی ممنون این کد کجا هستش؟
با سلام
چه کدی را میفرمایید. کد پروژه در متن آموزش قرار گرفته شده است.
سلام جناب خسته نباشید من سرو موتور mg90s رو سیم زرد در اردینو به پایه ۹ و سیم قرمز به ۵v وسیم قهوه ای رو gnd وصل کردم و سیم رو متصل کردم به کامپیوتر با ویندوز ۱۰ و اینکه بعد از کتابخانه روی servo و بعد sweep اپلود کردم ولی هیچ حرکتی ندیدم تو این باره خیلی مشکل دلرم و اینکه مینی پلاتر و مینی سی ان سی درست کردم روی محور x y حرکت دارم ولی نمیتونم سرو موتور تکون بدم خلاصه تو کد نویسی و پیدا کردن مشکل جدی دارم لطفا کمکم کنید ممنون میشم
با سلام
کاربر گرامی در نظر داشته باشید تغذیه سرو موتور را بایستی از منبع تغذیه جداگانه تامین کنید.
سلام
من یک سرو موتور mg 945 دارم که ۳۶۰ درجه هست و با چند تا کد مختلف تست کرم و هیچ نتیجه ای نگرفتم روش خاصی برای راه اندازی داره؟ منبع تغذیه ۵ ولت مجزا بهش دادم ولی هیچ حرکتی نداره صرفا بعد از اتصال باتری یک صدای کوچک میده
با سلام
بهتر است از یک درایور سروموتو برای این منظور استفاده کنید. تغذیه شامل ولتاژ و جریان کافی هم برای ماژول تامین کنید.