ویژگی های موتور سروو دنده فلزی MG995
سروو موتور یکی از انواع موتورهاست که میتواند با دقت بالا بچرخد. اگر شما میخواهید یک شئ را با زاویه و فاصله خاص بچرخانید، میتوانید از سروو موتورها استفاده کنید. کاربرد این موتورها در ماشین اسباببازی، هلیکوپتر و هواپیماهای RC، رباتیک و … میباشد. سروو موتورها بر اساس واحد Kg/cm رتبه بندی میشوند. واحد Kg/cm بیان میدارد که موتور چه وزنی را میتواند در یک فاصله معین جابهجا کند. برای مثال 6Kg/cm به این معناست که این موتور میتواند یک شئ 6 کیلوگرمی را که در فاصله 1 سانتی متری شفت آن قرار دارد جابهجا کند.
مهمترین ویژگیهای این موتور عبارتاند از:
- گشتاور: 5Kgf.cm در ولتاژ 4.8 ولت و 10Kgf.cm در ولتاژ 6 ولت
- سرعت: 2s/60º در ولتاژ 4.8 ولت و 0.16s/60º در ولتاژ 6 ولت
- ولتاژ کاری: 4.8 تا 7.2 ولت
- فرکانس: 50 هرتز
دیتاشیت سروو موتور MG-995 را میتوانید از اینجا دانلود کنید.
معرفی پایه های (Pinout) موتور سروو دنده فلزی MG995
این موتور دارای 3 پایه به شرح زیر است:
- PWM: سیگنال کنترل موتور – رنگ نارنجی
- VCC: ولتاژ موتور 4.8 تا 7.2 ولت – رنگ قرمز
- GND: زمین – رنگ قهوهای
پین اوت (Pinout) این موتور را میتوانید در تصویر زیر مشاهده کنید.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
آردوینو UNO R3 | × | 1 | |
موتور سروو دنده فلزی MG995 توان 13 کیلو – 180 درجه | × | 4 | |
ماژول درایور PWM / سروو 12 بیتی 16 کاناله PCA9685 | × | 1 | |
سیم جامپر نری-مادگی | × | 1 |
نرم افزارهای مورد نیاز
آردوینو IDE |
تذکر
برای ادامه آموزش راهاندازی، میتوانید به تعداد دلخواه 1 تا 16 عدد سروو موتور تهیه نمایید.
ما در این آموزش از 4 عدد سروو موتور استفاده کردهایم.
راه اندازی موتور سروو دنده فلزی MG995 با آردوینو
گام اول: سیم بندی
مطابق مدار زیر سروو موتورها را به آردوینو و درایور وصل کنید.
اخطار
گام دوم: نصب کتابخانه
به Library manager رفته و کلمه Servo را سرچ کنید و در ادامه مانند شکل زیر کتابخانه آن با نام Adafruit PWM Servo Driver Library را نصب کنید.
گام سوم: کد
کد زیر را روی آردوینو خود آپلود کنید.
/*
TowerPro-MG995-Servo-Motor
modified on 21 Dec 2020
by Amir Mohammad Shojaee @ Electropeak
Home<iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="“Home” — Electropeak" src="https://electropeak.com/learn/embed/#?secret=GmiMedt8HR" data-secret="GmiMedt8HR" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
based on Arduino - Adafruit library
*/
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVOMIN 150 // This is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX 600 // This is the 'maximum' pulse length count (out of 4096)
#define USMIN 600 // This is the rounded 'minimum' microsecond length based on the minimum pulse of 150
#define USMAX 2400 // This is the rounded 'maximum' microsecond length based on the maximum pulse of 600
#define SERVO_FREQ 50 // Analog servos run at ~50 Hz updates
// our servo # counter
uint8_t servonum = 0;
void setup() {
Serial.begin(9600);
Serial.println("4 channel Servo test!");
pwm.begin();
pwm.setOscillatorFrequency(27000000);
pwm.setPWMFreq(SERVO_FREQ); // Analog servos run at ~50 Hz updates
delay(10);
}
// You can use this function if you'd like to set the pulse length in seconds
// e.g. setServoPulse(0, 0.001) is a ~1 millisecond pulse width. It's not precise!
void setServoPulse(uint8_t n, double pulse) {
double pulselength;
pulselength = 1000000; // 1,000,000 us per second
pulselength /= SERVO_FREQ; // Analog servos run at ~60 Hz updates
Serial.print(pulselength); Serial.println(" us per period");
pulselength /= 4096; // 12 bits of resolution
Serial.print(pulselength); Serial.println(" us per bit");
pulse *= 1000000; // convert input seconds to us
pulse /= pulselength;
Serial.println(pulse);
pwm.setPWM(n, 0, pulse);
}
void loop() {
// Drive each servo one at a time using setPWM()
Serial.println(servonum);
for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
pwm.setPWM(servonum, 0, pulselen);
}
delay(500);
for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
pwm.setPWM(servonum, 0, pulselen);
}
delay(500);
servonum++;
if (servonum > 3) servonum = 0; // Testing the first 4 servo channels
}
در ابتدای این برنامه دو کتابخانه مورد نیاز پیوست شده است. در ادامه دادههای مربوط به سروو موتور ثبت میشود. در ادامه و در حلقه اصلی برنامه، هر استپر موتور به ترتیب 180 درجه در جهت مستقیم و 180 درجه هم در جهت معکوس میچرخند. فقط دقت داشته باشید اگر از سروو موتورهای بیشتر یا کمتر از 4 عدد استفاده میکنید، تعداد آن را در خط آخر برنامه تغییر دهید.
تصویر زیر خروجی سریال مانیتور میباشد. زمانی که هر کدام یک از سروو موتور ها به چرخش در میآید، شماره آن نیز در سریال مانیتور ظاهر میگردد.