تحكم محرك السيرفو: دليل شامل
النقاط الرئيسية للتعلم:
تعريف التحكم في محرك السيرفو: يتيح التحكم في محرك السيرفو التلاعب الدقيق بموضع المحرك وسرعته وتسرعه من خلال الإشارات الإلكترونية.
آلية التغذية الراجعة: تضمن نظام التغذية الراجعة، والذي غالباً ما يكون مقاوماً متغيراً أو مرمزاً، أن يتماشى إخراج المحرك بدقة مع الإدخال المعطى للتحكم.
إشارة PWM: تعد تقنية التوقيت النبضي (PWM) حاسمة لتحديد موضع السيرفو عن طريق تغيير مدة النبضات الكهربائية.
Arduino ومحركات السيرفو: يعتبر استخدام لوحة Arduino طريقة شائعة وفعالة لبرمجة وتحكم محركات السيرفو بحد أدنى من الإعدادات المادية.
تطبيقات محركات السيرفو: تعتبر محركات السيرفو أساسية للمشاريع التي تتطلب تحكماً دقيقاً بالموقع، مثل الروبوتات والأنظمة الآلية.
محرك السيرفو هو محرك مصمم للدقة العالية والدقة في الدوران. يختلف عن المحرك الكهربائي العادي بقدرته على الاحتفاظ بموقع محدد بدلاً من الدوران المستمر. هذه الخاصية تجعل محركات السيرفو مثالية للروبوتات والأتمتة ومشاريع الهواة.
يشرح هذا المقال كيفية عمل التحكم في محرك السيرفو وأنواع محركات السيرفو المختلفة وأساليب التحكم والجهاز المختلفة. كما يقدم أمثلة على تطبيقات محركات السيرفو والمشاريع.
ما هو محرك السيرفو؟
يُعرف محرك السيرفو بأنه جهاز قابض يسمح بالتحكم الدقيق بموقع (زاوية) وسرعة وتسرع. يتكون محرك السيرفو النموذجي من ثلاثة مكونات رئيسية: محرك كهربائي مباشر، دائرة تحكم، وجهاز تغذية راجعة.
يقوم المحرك الكهربائي بتزويد السيرفو بالطاقة ويتصل بأسنانيات تقلل من السرعة وتزيد من عزم الدوران على العمود المرفقي الخارجي.

العمود المرفقي الخارجي هو الجزء من السيرفو الذي يدور ويحرك الحمل.
تتمثل مهمة دائرة التحكم في استقبال ومعالجة الإشارات الواردة من جهاز تحكم خارجي. تقوم هذه الإشارات بإخبار السيرفو بموقع وسرعة وإتجاه الحركة. كما تقوم دائرة التحكم بإرسال الطاقة إلى المحرك الكهربائي لتحريكه.
عادة ما يكون الجهاز الرجعي مقاوماً متغيراً أو مرمزاً يقيس الموقع الحالي للعمود المرفقي الخارجي.

يقوم الجهاز الرجعي بإرسال بيانات الموقع مرة أخرى إلى دائرة التحكم، والتي تقوم بتعديل قوة المحرك الكهربائي لتتناسب مع الموضع الفعلي والمطلوب من الإشارة الواردة.
يضمن الحلقة الرجعية بين دائرة التحكم والجهاز الرجعي أن يمكن للسيرفو التحرك بدقة وإبقاء أي موقع ضمن نطاق حركته.
كيفية التحكم في محرك السيرفو؟
يتم التحكم في محركات السيرفو بإرسال إشارة PWM (التوقيت النبضي) إلى خط الإشارة للسيرفو. تعد تقنية PWM هي تقنية تقوم بتبديل الإشارة سريعاً لإنشاء نبضات بأطوال مختلفة. يحدد عرض النبضات موضع العمود المرفقي الخارجي.
على سبيل المثال، عند إرسال إشارة PWM بعرض نبضة 1.5 ميلي ثانية (ms)، سيتحرك السيرفو إلى الموضع المحايد (90 درجة).

عند إرسال إشارة PWM بعرض نبضة 1 ميلي ثانية، سيتحرك السيرفو إلى الموضع الأدنى (0 درجة). عند إرسال إشارة PWM بعرض نبضة 2 ميلي ثانية، سيتحرك السيرفو إلى الموضع الأقصى (180 درجة).
تبلغ تردد الإشارة PWM 50 هرتز، مما يعني أنها تتكرر كل 20 ميلي ثانية. يمكن أن يتراوح عرض النبضة من 1 ميلي ثانية إلى 2 ميلي ثانية خلال هذه الفترة.
هناك العديد من الطرق لإنشاء وإرسال إشارات PWM إلى محركات السيرفو. بعض الأساليب الأكثر شيوعاً هي:
استخدام لوحة Arduino أو وحدة تحكم أخرى
استخدام مقاوم متغير أو مستشعر آلي آخر
استخدام جويستيك أو جهاز إدخال رقمي آخر
استخدام جهاز تحكم أو قائد سيرفو مخصص
في الأقسام التالية، سنستكشف كلًا من هذه الأساليب بمزيد من التفصيل ونرى بعض الأمثلة لكيفية عملها.
التحكم في محرك السيرفو باستخدام Arduino
تعتبر Arduino واحدة من أكثر المنصات شعبية للتحكم في محركات السيرفو. تحتوي لوحات Arduino على مخارج PWM مضمنة يمكن استخدامها لإرسال الإشارات إلى السيرفو. كما تحتوي Arduino على مكتبة Servo التي تسهل كتابة الكود للتحكم في السيرفو.
للحصول على التحكم في محرك السيرفو باستخدام Arduino، ستحتاج إلى:
لوحة Arduino (مثل Arduino UNO)
محرك سيرفو قياسي (مثل SG90)
أسلاك جامبر
لوح تجارب (اختياري)
يتم توصيل السلك الأحمر من السيرفو بـ 5V على اللوحة Arduino. يتم توصيل السلك الأسود من السيرفو بـ GND على اللوحة Arduino. يتم توصيل السلك الأبيض من السيرفو بـ pin 9 على اللوحة Arduino.
لبرمجية اللوحة Arduino، ستحتاج إلى استخدام Arduino IDE (عبر الإنترنت أو غير متصل). يمكنك استخدام أحد الأمثلة من مكتبة Servo أو كتابة كود خاص بك.
يوضح الكود التالي كيفية تدوير محرك السيرفو ذهابًا وإيابًا عبر 180 درجة باستخدام حلقة for:
#include <Servo.h> // تضمين مكتبة Servo
Servo myservo; // إنشاء كائن Servo
int pos = 0; // متغير لموقع
void setup() {
myservo.attach(9); // توصيل كائن Servo بـ pin 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // حلقة من 0 إلى 180 درجة
myservo.write(pos); // كتابة الموضع إلى كائن Servo
delay(15); // انتظر 15 ميلي ثانية
}
for (pos = 180; pos >= 0; pos -= 1) { // حلقة من 180 إلى 0 درجة
myservo.write(pos); // كتابة الموضع إلى كائن Servo
delay(15); // انتظر 15 ميلي ثانية
}
}
يستخدم هذا الكود حلقتين لزيادة وتقليل قيمة المتغير position من 0 إلى 180 درجة والعكس. ثم يقوم بكتابة هذه القيمة إلى كائن Servo باستخدام myservo.write(pos). كما يضيف تأخير لمدة 15 ميلي ثانية بين كل خطوة لتباطؤ الحركة.
قم بتحميل هذا الكود إلى لوحتك Arduino باستخدام زر Upload في IDE، وشاهد كيف يتحرك محرك السيرفو ذهابًا وإيابًا بشكل سلس.
التحكم في محرك السيرفو باستخدام مقاوم متغير
مقاوم متغير هو مستشعر آلي يمكنه تغيير مقاومته اعتمادًا على مدى دوران مفتاحه. يمكنك استخدام مقاوم متغير كجهاز إدخال للتحكم في محرك السيرفو.
للحصول على التحكم في محرك السيرفو باستخدام مقاوم متغير، ستحتاج إلى:
لوحة Arduino (مثل Arduino UNO)
محرك سيرفو قياسي (مثل SG90)
مقاوم متغير (10k أوم)
أسلاك جامبر
لوح تجارب
يظهر مخطط التوصيل لربط مقاوم متغير ومحرك سيرفو بلوحة Arduino أدناه:
يتم توصيل السلك الأحمر من مقاوم متغير بـ 5V على اللوحة Arduino. يتم توصيل السلك الأسود من مقاوم متغير بـ GND على اللوحة Arduino. يتم توصيل السلك الأخضر من مقاوم متغير بـ pin A0 على اللوحة Arduino.
يتم توصيل السلك الأحمر من السيرفو بـ 5V على صف آخر على اللوحة التجريبية. يتم توصيل السلك الأسود من السيرفو بـ GND على صف آخر على اللوحة التجريبية. يتم توصيل السلك الأبيض من السيرفو بـ pin D9 على صف آخر على اللوحة التجريبية.
لبرمجية اللوحة Arduino، ستحتاج إلى استخدام نفس الكود في المثال السابق ولكن مع تغيير بعض السطور:
#include <Servo.h> // تضمين مكتبة Servo
Servo myservo; // إنشاء كائن Servo
int potpin = A0; // pin متصل بمقاوم متغير
int val = 0; // متغير لقراءة قيمة مقاوم متغير
void setup() {
myservo.attach(9); // توصيل كائن Servo بـ pin D9
}
void loop() {
val = analogRead(potpin); // قراءة قيمة من مقاوم متغير (0 -1023)
val = map(val,0,1023,0,180); // تحويل نطاق القيم (0 -180)
myservo.write(val); // كتابة القيمة المحولة إلى كائن Servo
delay(15); // انتظر 15 ميلي ثانية
}
يستخدم هذا الكود الدالة analogRead(potpin) لقراءة القيمة من مقاوم متغير متصل بـ pin A0. ثم يستخدم الدالة map(val,0,1023,0,180) لتحويل نطاق القيم من 0 -1023 إلى 0 -180 درجة. ثم يقوم بكتابة القيمة المحولة إلى كائن Servo باستخدام الدالة myservo.write(val). كما يضيف تأخير لمدة 15 ميلي ثانية بين كل خطوة، كما في المثال السابق.
يمكنك تحميل هذا الكود إلى لوحتك Arduino باستخدام زر Upload في IDE. يجب أن ترى محرك السيرفو يتحرك وفقًا لموضع مقاوم متغير.
التحكم في محرك السيرفو باستخدام جويستيك
جويستيك هو جهاز إدخال رقمي يمكنه اكتشاف الاتجاه والحجم من الحركة على طول محوريين. يمكنك استخدام جويستيك للتحكم في محرك السيرفو عن طريق ربط المحور x للجويستيك بزاوية السيرفو.
للحصول على التحكم في محرك السيرفو باستخدام جويستيك، ستحتاج إلى ما يلي:
لوحة Arduino (مثل Arduino UNO)
محرك سيرفو قياسي (مثل SG90)
وحدة جويستيك (مثل KY-023)
أسلاك جامبر
لوح تجارب
يظهر مخطط التوصيل لربط وحدة جويستيك ومحرك سيرفو بلوحة Arduino أدناه:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
يتم توصيل السلك الأحمر من وحدة الجويستيك بـ 5V على اللوحة Arduino. يتم توصيل السلك الأسود من وحدة الجويستيك بـ GND على اللوحة Arduino. يتم توصيل السلك الأخضر من وحدة الجويستيك بـ pin A0 على اللوحة Arduino.
يتم توصيل السلك الأحمر من السيرفو بـ 5V على صف آخر على اللوحة التجريبية. يتم توصيل السلك الأسود من السيرفو بـ GND على صف آخر على اللوحة التجريبية. يتم توصيل السلك الأبيض من السيرفو بـ pin D9 على صف آخر على اللوحة التجريبية.
لبرمجية اللوحة Arduino، ستحتاج إلى استخدام نفس الكود في المثال السابق ولكن مع تغيير بعض السطور:
#include <Servo.h> // تضمين مكتبة Servo
Servo myservo; // إنشاء كائن Servo
int joyX = A0; // pin متصل بمحور x للجويستيك
int val = 0; // متغير لقراءة قيمة الجويستيك
void setup() {
myservo.attach(9); // توصيل كائن Servo بـ pin 9
}
void loop() {
val = analogRead(joyX); // قراءة قيمة من محور x للجويستيك (0 - 1023)
val = map(val, 0, 1023, 0, 180); // تحويل نطاق القيم (0 - 180)
myservo.write(val); // كتابة القيمة المحولة إلى كائن Servo
delay(15); // انتظر 15 ميلي ثانية