التحكم بمحرك سيرفو servo motor
أنواع المحركات
توجد عدة أنواع من المحركات _أشهرها
1-محرك دي سي motor-DC
2- محرك خطوة stepper motor
3- محرك سيرفو servo motor
لاحظ أيضا أن محركات السيرفو تنقسم لقسمين
سيرفو الزاوية hobby (angle ) servo | سيرفو الدورات الكاملة continuous rotation servo |
---|---|
حسب الدخل (عادة عرض نبضات) تـتحرك الذراع إلى الزاویة المطلوبة و تقف عندھا. ھذا النوع أكثر شیوعا. | يـدور مثل محرك دي سي. ویمكـنك التـحـكم بسرعـته واتجاھـه یحتـوي داخلیا على bridge-H للتكـبیر والتـحكـم. (ھـذا النوع أصبح نادر الوجود) |

التوصيل
يحتوي محرك السيرفو على ثلاث أطراف توصيل 2 منها تستخدم للتغذية (VCC, GND) والطرف الآخر للتحكم (Pulse).

سيرفو الزاوية
المحركات الرخيصة غير موثوقة كثيرا ً وبعضها تكون تالفة قبل استخدامها. لاحظ أن المحركات عادة تأتي بنطاق تشغيل من الزوايا (مثلاً 0 إلى 180 درجة -نصف دورة فقط) لكن في الواقع هي لا تتحمل هذه الزوايا . مع التجربة يمكنك ملاحظة النطاق الآمن و الذي لا يسبب اهتزاز المحرك (تقريبا 15-170 درجة). يستخدم الأمر ()moto.write هنا لتحديد الزاوية حيث يقوم السيرفو بالتموضع حسب الزاوية المعطاة.
#include "Servo.h"
Servo moto; //any name should do
void setup(){
moto .attach(13);
moto .write(170);} // to set the angle
void loop(){}
سيرفو دوراني
تختلف طريقة التحكم في حال استخدام محرك دوراني (يدور دورة كاملة وليس زوايا فقط) full rotation servo حيث يمكنك التحكم بسرعة الدوران و الإتجاه بشكل أسهل من محرك الدي سي. بعد تضمين المكتبة وتعريف الكائن (المحرك) بإمكاننا استخدام الأوامر التالية للتحكم بدوران المحرك:
سيرفو الزاوية hobby (angle ) servo | سيرفو الدورات الكاملة continuous rotation servo |
---|---|
تحدید المنفذ المتصل للتحكم بالمحرك | ;moto.attach(10) |
الدوران بأقصى سرعة مع عقارب الساعة | ;moto.write(170) |
الدوران بأقصى سرعة عكس عقارب الساعة | ;moto.write(15) |
أمر آخر للتحكم بدقة في حركة المحرك | ;(1300)moto.writeMicroseconds |
إيقاف المحرك | ;()moto.detach |
عادة القيم (2000،1500،1000 ) تستخدم (للأمر ()moto.writeMicroseconds ) للحركة بأي اتجاه أو إيقاف المحرك ، لكن يجب عليك تجربة محركك
#include "Servo .h"
Servo moto ;
moto .attach(13); //pin connected to motor
moto .writeMicroseconds(1300); //1300=clockwise
delay(2000);
moto .writeMicroseconds(1700); //1700=counterClockWise
delay(2000);
moto .detach(); //stops the motor
التحكم بمحرك سيرفو باستخدام المقاومة المتغيرة
في هذا التمرين سيتم قراءة القيمة المدخلة من المقاومة المتغيرة وإدخالها في متغير x، ومن ثم تحويل قيمته الى مدى مجال حركة المحرك السيرفو وهي من 10 الى 175 درجة باستخدام الأمر map. وأخيرا إعطاء الأمر لمحرك السيرفو بالحركة حسب قيمة المتغير.

#include "Servo.h"
Servo moto;
int X = 0;
void setup(){
pinMode(A0, INPUT);
moto.attach(13);}
void loop(){
X = analogRead(A0); // reed Potentiometer value
moto.write(map(X, 0, 1023, 15, 170)); // map the value to (15-170)
delay(1000); }