تقديم
للمحرك سيرفو ثلاث مرابط: l سلك أحمر: مربط يوصل بالقطب الموجب (الطاقة) l سلك أسود: مربط يوصل بالقطب السالب (الأرضية) l سلك أبيض: مربط الإشارة وبه يتم التحكم بزاوية دوران المحرك. |
|
يتكون المحرك سيرفو من ثلاث أشياء رئيسية:
l محرك عادي : يطلق عليه محرك DC أيضا. l دارة متحكمة: ومن خلالها يتم التحكم بزاوية الدوران. l دوائر مسننة: تقيد حركته وتساعد على الدوران في زاوية محددة.
|
|
|
التحكم بالمحرك سيرفو
المحرك سيرفو ليس كالمحرك الخطوي. وبالتالي فهو يقوم بدوران في مجال محدد فقط. من أجل هذا يجب أن تحدد طول الذبذبة الرقمية ليتمكن المحرك من الدوران على راحته. |
|
استعمالاتها
في الحوامات |
|
في الطائرات |
|
في الأذرع الآلية |
|
وفي الروبوتات ككل |
|
تحويل المحرك سيرفو إلى محرك عادي
يمكنك الاضطلاع على المقالين:
وإذا لم ترد أن تذهب إلى مقال آخر، أقول لك وباختصار قم بتفكيكه واستخرج المحرك منه بكل سهولة.
برمجة مباشرة
شيفرة بسيطة
لن تحتاج لكنترولور المحرك سيرفو بل يمكنك ايصاله مباشرة. فمن السهل جدا إيصال المحرك سيرفو بالميكروكنترولور. فمثلا باستعمال البطاقة Arduino يمكنك إيصاله كما هو مبين في الصورة التالية. تذكر أن المربط الثالث للمحرك يمكن إيصاله بإي من المرابط المنطقية للميكروكنترلور وقد تم إيصاله بالمربط 2 كما هو مبين في هذه الصورة. |
|
|
هذه شيفرة بسيطة من أجل التحكم بالمحرك سيرفو برمجيا:
|
#define motoPin 2 // المربط المنطقي المتصل بمربط الاشارة للمحرك
void setup() { pinMode(motoPin,OUTPUT); }
void loop() { for(int i = 0; i < 100; i++) { digitalWrite(motoPin,HIGH); delayMicroseconds(1850); digitalWrite(motoPin,LOW); delayMicroseconds(1850); }
for(int j = 0; j < 100; j++) { digitalWrite(motoPin,HIGH); delayMicroseconds(1250); digitalWrite(motoPin,LOW); delayMicroseconds(1250); } } |
إضافة مقاومة متغيرة
يمكنك أيضا أن تتحكم بالمحرك من خلال مقاومة متغيرة (potentiometer). ما عليك إلا أن تصل مربطي الطاقة للمحرك والمقاومة المتغيرة بمنبع الطاقة ثم صل مربط الاشارة للمحرك بالمربط المنطقي 9 مثلا للبطاقة. ثم صل مربط الاشارة للمقاومة المتغيرة بمربط تناظري للبطاقة. |
|
// Michal Rinott المؤلف الأصلي // تحديث محمد السهلي
#include <Servo.h> Servo myservo; // انشأ متغيرا يمثل المحرك سيرفو int potpin = 2; // المربط التناظري للبطاقة المتصل بمربط الإشارة للمقاومة المتغيرة int val; // متغير مساعد
void setup() { myservo.attach(9); // نصل المربط المنطقي 9 بمربط الاشارة للمحرك }
void loop() { val = analogRead(potpin); // قراءة قيمة المقاومة المتغيرة (ستكون محصورة بين 0 و 1023) val = map(val, 0, 1023, 0, 179); //تحويل القيمة إلى قيمة محصورة بين 0 و179 myservo.write(val); // نطبق القيمة المحولة على المحرك delay(15); // ننتظر لبعض الوقت } |
التحكم من خلال لوحة المفاتيح أو ما شابه
وهذه الشيفرة متوسطة التطور تمكنك من التحكم بالمحرك من خلال لوحة المفاتيح مثلا عن طريق المنفذ متتالي:
|
/* تحكم بواسطة جهاز خارجي بالمحرك سيرفو * copyleft 2006 Tod E. Kurt <عنوان البريد الإلكتروني هذا محمي من روبوتات السبام. يجب عليك تفعيل الجافاسكربت لرؤيته.> المؤلف الأصلي * http://todbot.com/ * * adapted from "http://itp.nyu.edu/physcomp/Labs/Servo" * ترجمة محمد السهلي */
// المربط المنطقي الموصل بالمحرك
int servoPin = 2;
int pulseWidth = 0; // وسع الذبذبة المخصصة لزاوية المحرك long lastPulse = 0; // آخر ذبذبة تم حسابها بالميليثانية int refreshTime = 20; // الوقت المخصص بين كل ذبذبتين int val; // متغير مساعدة لقراءة الأمر من المنفذ المتتالي
int minPulse = 500; // أصغر وسع للذبذبة int maxPulse = 2250; // أكبر وسع للذبذة
void setup() { pinMode(servoPin, OUTPUT); // مربط المحرك يعرف كمخرج pulseWidth = minPulse; // تهيئة المتغير Serial.begin(9600); // تهيئة سرعة التحويل Serial.println("Servo control program ready"); }
void loop() { val = Serial.read(); //قراءة قيمة القادمة من المنفذ المتتالي if (val >= '1' && val <= '9' ) { val = val - '0'; // تحويل القيمة إلى قيمة رقمية val = val - 1; // حصر القيمة بين 0 و 8 pulseWidth = (val * (maxPulse-minPulse) / 8) + minPulse; // تحويل إلى الميكروثانية Serial.print("Moving servo to position "); Serial.println(pulseWidth,DEC); } updateServo(); // تحديث موضع المحرك }
// servoPi, pulsemax-width, lastPulse, refreshTime تستعمل المتغيرات void updateServo() { // تحريك رأس المحرك في كل 20 ميليثانية if (millis() - lastPulse >= refreshTime) { digitalWrite(servoPin, HIGH); // تشغيل المحرك delayMicroseconds(pulseWidth); // طول الذبذبة digitalWrite(servoPin, LOW); // إيقاف المحرك lastPulse = millis(); // احتفاظ بقيمة الذبذبة } } |
تأليف محمد السهلي
{jumi [*3]}
المراجع
http://www.acroname.com/robotics/info/articles/servo/servo.html
http://www.engineersgarage.com/articles/servo-motor
http://www.pyroelectro.com/tutorials/servo_motor/servomotor.html
http://servocity.com/html/how_do_servos_work_.html
http://lizarum.com/assignments/physical_computing/2008/servo.html
http://idblab.blogspot.com/2011/03/class-3.html
http://makeprojects.com/Wiki/Servos
http://arduino.cc/playground/Learning/SingleServoExample#.T0YKLXwkh_c.facebook
التعليقات
متمنيا لك التوفيق والنجاح
واتمنى منك أن تنشر لنا موضوع مع البرنامج عن دارة تغذية موتور توجيه صحن الدش. لأن هذا الموضوع لم يوجد له شرح في الانترنت.