You are currently viewing Introduction To Servo Motors And Control With Arduino
Demonstrating small and large servo motors.

مقدمة في محركات السيرفو (Servo Motors) والتحكم فيها باستخدام الأردوينو

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

محرك سيرفو

التعرف على محركات السيرفو

تم تصميم محرك سيرفو خصيصًا لتوفير تحكم دقيق في الموضع الزاوي أو الخطي والسرعة والتسارع. وخلافًا للمحركات العادية التي تدور باستمرار، يتم التحكم في محركات السيرفو عن طريق نبضة كهربائية متفاوتة العرض يتم إرسالها عبر سلك التحكم. تحدد هذه النبضة زاوية حركة المحرك أو موضعه.

محرك سيرفو سليم ومفكك، منظر داخلي

العناصر المهمة لمحرك السيرفو

يتكون محرك السيرفو للهوايات من مكونات مهمة مختلفة:

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

محرك سيرفو مفكك؛ منظر داخلي

كيف يعمل محرك السيرفو؟

تعمل محركات السيرفو على مبدأ التغذية الراجعة السلبية (feedback)، حيث تقوم دائرة التحكم بضبط خرج المحرك لمطابقة أمر الإدخال. إليك نظرة خطوة بخطوة على هذه العملية:

  1. إشارة الإدخال: يرسل Arduino إشارة PWM إلى محرك السيرفو. يتراوح عرض هذه النبضة عادةً ما بين 0.5 مللي ثانية و2.5 مللي ثانية، وهو ما يتوافق مع نطاق حركة محرك السيرفو(عادةً من 0 إلى 180 درجة).
  2. اكتشاف الأخطاء: تقيس المقومة المتغيرة الزاوية الحالية لعمود خرج المؤازر ويولد جهدًا يمثل هذا الموضع. تقارن دائرة التحكم هذا الجهد (الموضع الفعلي) مع الجهد المقابل لنبضة الإدخال (الموضع المطلوب).
  3. التعديل: إذا كان هناك تباين بين الموضع المطلوب والموضع الفعلي، تقوم دائرة التحكم بحساب الضبط المطلوب وترسل الإشارات المناسبة لتصحيح موضع المحرك.
  4. حلقة التغذية الراجعة (feedback): تستمر عملية التعديل هذه بناءً على التغذية الراجعة (feedback) حتى يتطابق الموضع الفعلي مع الموضع المطلوب.
    هذه الآلية، المعروفة باسم نظام التحكم في الحلقة المغلقة، موضحة في الشكل أدناه:

فهم إشارة PWM للتحكم في محركات السيرفو

مخطط نظام التحكم ذو الحلقة المغلقة لتحديد موضع المحرك

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

تتكون إشارة PWM لمحركات السيرفو من سلسلة من النبضات. تحدث كل نبضة خلال فترة محددة، عادةً ما تكون 20 مللي ثانية (مللي ثانية)، وهو ما يقابل تردد 50 هرتز. الجانب الحاسم في PWM في التحكم في الماكينات هو مدة الوقت "العالي" في كل نبضة. تحدد هذه المدة، والمعروفة باسم عرض النبضة، موضع عمود خرج المؤازر.

إليك كيف تبدو إشارة PWM النموذجية عند التحكم في محرك سيرفو:

شكل موجة إشارة PWM للتحكم في السيرفو، 50 هرتز

جدول إشارات PWM لتحديد مواقع السيرفو

يوضح الجدول التالي كيف تتوافق عروض النبضات المختلفة، ضمن النطاق النموذجي، مع مواضع محددة لذراع السيرفو:

عرض النبض موضع السيرفو
1.0 ms
0 degrees
1.5 ms
90 degrees
2.0 ms
180 degrees
  1. وضع 0 درجة: يؤدي عرض النبضة البالغ 1.0 مللي ثانية إلى محاذاة محرك السيرفوللذراع عند 0 درجة. هذا هو الحد الأدنى لعرض النبضة الذي يمكن تطبيقه للحركة.
  2. وضع 90 درجة: يعمل عرض النبضة البالغ 1.5 مللي ثانية على تحريك ذراع السيرفو إلى وضع محايد أو متوسط عند 90 درجة. وغالباً ما يعتبر هذا الوضع الافتراضي للمعايرة.
  3. الموضع 180 درجة: يؤدي عرض النبضة 2.0 مللي ثانية إلى تمديد السيرفو إلى الحد الأقصى للدوران عند 180 درجة.

SG90 Micro وMG996R Servo MG996R

يعتبر عزم الدوران وجهد التشغيل واستهلاك التيار والحجم من الاعتبارات الرئيسية للمحركات المؤازرة.

SG90 Micro Servo و MG996R هما أكثر موديلات السيرفو شيوعًا:

SG90 Micro Servo MG996R Servo
عزم الدوران
1.2 kg·cm @ 4.8V, 1.6 kg·cm @ 6V
11 kg·cm @ 4.8V, 13 kg·cm @ 6V
جهد التشغيل
3.5 – 6V
4.8 – 7.2V
تيار عدم التحميل
100 mA
220 mA @ 4.8V, 250 mA @ 6V
تيار السكون
650 mA
650 mA
السرعة القصوى
60 degrees in 0.12s
60 degrees in 0.20s
الوزن
9g
55g

أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ

السن الإشارة اللون
1
أرضي
أسود
2
الطاقة
أحمر
3
التحكم
أصفر

أجهزة اختبارمحرك السيرفو

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

وحدة اختبار السيرفو

إعداد مشروع Arduino للتحكم في محرك السيرفو1: Sweep

توصيل محرك سيرفو بـ Arduino سهل ولا يتطلب الكثير من الأسلاك. إليك دليل بسيط لتبدأ في مشروعك الأول باستخدام Arduino:

متطلبات الأجهزة:

لوحة اردوينو (أي طراز)
محرك السيرفو SG90 أو ما شابهه
مصدر طاقة مستقل لمحرك السيرفو

إعداد توصيل Arduino:

وصِّل السلك الأرضي لمحرك السيرفو (عادةً ما يكون بني أو أسود) مع كل من سلك التأريض الخاص بمصدر الطاقة الخارجي وأرضي ال Arduino.
قم بتوصيل سلك طاقة محرك السيرفو(الأحمر) بالطرف الموجب لمصدر الطاقة الخارجي.
وصِّل سلك التحكم في محرك السيرفو (عادةً ما يكون برتقالي أو أصفر) بأحد دبابيس التحكم في محرك السيرفو(PWM) في اردوينو؛ وغالباً ما يُستخدم الدبوس 9.

مخطط الأسلاك ل "المشروع 1: المسح" - التحكم في السيرفو بالأردوينو

برمجة الأردوينو:

للتحكم في محرك السيرفو، سنستخدم مثال Sweep المتوفر في Arduino IDE. يأمر هذا النص البرمجي محرك السيرفو بالتحرك من 0 إلى 180 درجة والعكس، لتوضيح عمليات المؤازرة الأساسية.

/* Sweep
 by BARRAGAN http://barraganstudio.com
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 https://www.arduino.cc/en/Tutorial/LibraryExamples/Sweep
 */

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
    myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
    for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
        // in steps of 1 degree
        myservo.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position
    }
    for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
        myservo.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position
    }
}
    

إعداد مشروع إعداد Arduino للتحكم في المؤازرة 2: Knob

إن توصيل محرك سيرفو بـ Arduino للتحكم به باستخدام المقومة المتغيرة أمر سهل ولا يتطلب أي أسلاك معقدة. إليك كيفية البدء بمشروعك المؤازر الأول باستخدام برنامج "Knob":

متطلبات الأجهزة:

لوحة اردوينو (أي طراز)
محرك السيرفو SG90 أو ما شابهه
مصدر طاقة مستقل لمحرك السيرفو
المقومة المتغيرة

إعداد توصيل Arduino:

وصِّل السلك الأرضي لمحرك السيرفو (عادةً ما يكون بني أو أسود) مع كل من سلك التأريض الخاص بمصدر الطاقة الخارجي وأرضي ال Arduino.
قم بتوصيل سلك طاقة محرك السيرفو(الأحمر) بالطرف الموجب لمصدر الطاقة الخارجي.
وصِّل سلك التحكم في محرك السيرفو (عادةً ما يكون برتقالي أو أصفر) بأحد دبابيس التحكم في محرك السيرفو(PWM) في اردوينو؛ وغالباً ما يُستخدم الدبوس 9.
وصِّل المقومة المتغيرة: وصِّل أحد السنون الخارجية بـ 5 فولت والسن الخارجي الآخر بالأرضي. يجب توصيل الدبوس الأوسط بمدخل تناظري في الأردوينو، مثل A0.

مخطط الأسلاك ل "المشروع 2: المقبض" - التحكم في السيرفو بالأردوينو

برمجة الأردوينو:

للتحكم في محرك السيرفو باستخدام المقومة المتغيرة سنستخدم مثال "Knob" المتوفر في Arduino IDE. يقرأ هذا النص البرمجي موضع المقومة المتغيرة ويأمر محرك السيرفو بالتحرك وفقًا لذلك، مما يوضح عملية المؤازرة التفاعلية. أثناء ضبطك المقومة المتغيرة، سيتحرك محرك السيرفوعبر نطاقه من 0 إلى 180 درجة، مطابقًا الموضع للزاوية التي يمليها إعداد المقبض.

/*
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott http://people.interaction-ivrea.it/m.rinott

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob
 */

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = A0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup() {
    myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
    val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
    val = map(val, 0, 1023, 0, 180);     // scale it for use with the servo (value between 0 and 180)
    myservo.write(val);                  // sets the servo position according to the scaled value
    delay(15);                           // waits for the servo to get there
}
    

لوحة تشغيل محرك السيرفو PCA9685

يعد التحكم في محركات السيرفو مباشرةً من Arduino أمرًا سهلاً، ولكن قد تواجه قيودًا، خاصةً إذا كان مشروعك يتضمن عدة أجهزة أو مكونات أخرى تعتمد على PWM. يعد استخدام جميع دبابيس PWM المتاحة أو تعارضات المكتبة المحتملة على موارد المؤقت من التحديات الشائعة التي يمكن أن تعيق قابلية التوسع في تصميماتك.

لإدارة أجهزة سيرفومتعددة بكفاءة دون زيادة التحميل على الأردوينو، فإن دمج لوحة تشغيل السيرفو مخصصة، مثل تلك المزودة بشريحة PCA9685، هي استراتيجية ممتازة. تستخدم هذه اللوحة اتصال I2C، مما يبسط التوصيلات إلى سلكين فقط - CL (الساعة) و SDA (البيانات) - بغض النظر عن عدد محركات السيرفو التي يتم التحكم فيها. وهي تدعم التحكم في ما يصل إلى 16 سيرفو لكل لوحة، ويمكن توصيلها بسلاسل متسلسلة مع لوحات PCA9685 الأخرى. يسمح هذا الإعداد بالتحكم في ما يصل إلى 992 سيرفوعن طريق تسلسل لوحات متعددة، وهو مثالي للمشاريع الكبيرة.

تحتوي كل لوحة على توصيلات بسيطة:

GND: الوصلة الأرضية.
OE: تمكين الإخراج، وعادةً ما تُترك غير موصولة للحفاظ على تمكين جميع المخرجات.
SCL: خط الساعة لاتصالات I2C.
SDA: إشارة بيانات لاتصال I2C.
VCC: الإمداد المنطقي عند +5 فولت.
V+: طاقة لمحركات السيرفو، والتي يمكن توفيرها أيضًا عبر موصل محمي في الجزء العلوي من اللوحة لتوفير حماية أكبر ضد القطبية العكسية.
تتميز اللوحة بمجموعات من الموصلات ذات 3 سنون لكل محرك سيرفو، مما يبسّط عملية التوصيل إلى حد كبير ويوفر حلاً قويًا للمشاريع التي تتطلب تحكمًا مؤازرًا واسع النطاق.

لوحة تشغيل السيرفو PCA9685

لإدارة 16 محركًا والتحكم بها بفعالية باستخدام برنامج تشغيل قائم على PCA9685 مع Arduino، اتبع هذه الخطوات المفصلة لإعداد المكونات وتوصيلها بشكل صحيح:

توصيل بالأردوينو
تستخدم لوحة تشغيل محرك السيرفو PCA9685 اتصال I2C ويتطلب أربع وصلات فقط إلى Arduino الخاص بك. إليك كيفية توصيله اعتمادًا على طراز Arduino الخاص بك:

أردوينو كلاسيكي (أونو، إلخ)
+ 5 فولت -> VCC (يعمل على تشغيل شريحة PCA9685، وليس محركات السيرفو)
GND -> GND
Analog 4 -> SDA
Analog 5 -> SCL

تشغيل محركات السيرفو:

يعمل VCC على لوحة PCA9685 على تشغيل الرقاقة نفسها فقط. لتشغيل محركات السيرفو، يجب عليك أيضًا توصيل دبوس V+، والذي يمكنه التعامل مع ما يصل إلى 6 فولت حتى لو كان VCC عند 3.3 فولت.
يوصى باستخدام كتلة طرفية مستقطبة لتوصيل طاقة محركات السيرفو.
نظرًا لأن محركات السيرفو يمكن أن تسحب تيارًا كبيرًا، خاصةً تحت الحمل، يجب عليك التفكير في مصادر الطاقة هذه:
مزود طاقة تبديلي بجهد 5 فولت 2 أمبير لمزودات الطاقة الصغيرة أو الأقل.
حامل بطارية 4xAA - يوفر 6 فولت من الخلايا.

توصيل محركات السيرفو:

قم بتوصيل كل محرك السيرفو بلوحة PCA9685 باستخدام مقبسها القياسي ذو 3 سنون. تأكد من أن السلك الأرضي (عادة ما يكون أسود أو بني) يطابق الصف السفلي من رؤوس المسامير على اللوحة وأن سلك الإشارة (عادة ما يكون أصفر أو أبيض) يطابق الصف العلوي.

إعداد Arduino لمشروع التحكم في محركات السيرفو المزدوجة باستخدام PCA9685 ومقاييس الجهد

يعد التحكم في اثنين من محركات السيرفو باستخدام Arduino Uno ولوحة تشغيل PCA9685 باستخدام مقاومتين متغيرتين مشروعًا ممتازًا لفهم ميكانيكا حركة السيرفو ومبادئ معالجة المدخلات التناظرية. سيرشدك هذا الدليل خلال إعداد الأجهزة، وتوصيل المكونات، وبرمجة الأردوينو للتحكم الدقيق في محركات السيرفو.

متطلبات الأجهزة:

أردوينو أونو: لوحة التحكم الدقيقة الأساسية للمشروع.
لوحة محرك المؤازر PCA9685: تتيح لك التحكم في ما يصل إلى 16 محرك مؤازر.
اثنان من محركات السيرفو الصغيرة SG90 (أو ما شابهها): هذه هي المشغلات للمشروع.
مقاومتين متغيرتين: توفر هذه المدخلات للتحكم في مواضع محركات السيرفو.
مزود طاقة مستقل للمضاعفات: يُفضل أن يكون 5 فولت أو 6 فولت، بما يكفي لتشغيل عدة محركات سيرفو.
أسلاك التوصيل: لإجراء التوصيلات بين المكونات.
إعداد توصيل Arduino:

توصيلات الطاقة:

من Arduino 5 فولت إلى PCA9685 VCC: يعمل على تشغيل المنطق على PCA9685.
طاقة خارجية (5 فولت أو 6 فولت) إلى PCA9685 V+: يشغل محركات السيرفو.
GND من كلا مصدري الطاقة إلى Arduino GND: يوفر أرضية مشتركة.
توصيلات I2C لـ PCA9685
من SDA على Arduino إلى SDA على PCA9685
SCL على اردوينو إلى SCL على PCA9685
تسمح هذه الموصلات بالاتصال عبر ناقل I2C.

توصيلات محركات السيرفو:

وصِّل الماكينتين بالقناتين (على سبيل المثال 0 و15) على PCA9685. تأكد من أن اتجاه الأسلاك الأرضية وأسلاك الطاقة والإشارة تتطابق مع التوصيل بالسنون PCA9685.
توصيلات المقاومتين متغيرتين:
وصِّل الدبابيس الخارجية لكل مقياس جهد مع 5 فولت و GND في Arduino.
وصِّل الدبوس الأوسط للمقاومة المتغيرة واحد ب A0 والآخرى ب A1 على الأردوينو. سيوفر ذلك المدخل المتغير للتحكم في محركي السيرفو.

مخطط الأسلاك لمشروع التحكم في محركين سيرفو باستخدام PCA9685 ومقاومتين متغيرتين

برمجة الأردوينو:

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

/**
 * Author: Omar Draidrya
 * Date: 2024/05/07
 * This code controls servos using the PCA9685 PWM driver and potentiometers.
 */

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// Initialize the PCA9685 using the default address (0x40).
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

void setup() {
    Serial.begin(9600);   // Start serial communication for debugging purposes.
    pwm.begin();          // Initialize the PCA9685 module.

    // Set the frequency to 60 Hz, good for servo control.
    pwm.setPWMFreq(60);

    // Setup the analog pins as input.
    pinMode(A0, INPUT);
    pinMode(A1, INPUT);
}

void loop() {
    // Read the potentiometers.
    int potVal0 = analogRead(A0);  // Read the first potentiometer.
    int potVal1 = analogRead(A1);  // Read the second potentiometer.

    // Map the potentiometer values to servo pulse lengths.
    int servoPos0 = map(potVal0, 0, 1023, 150, 600); // Change values 150 to 600 depending on your servo specifications.
    int servoPos1 = map(potVal1, 0, 1023, 150, 600);

    // Set the servo positions.
    pwm.setPWM(0, 0, servoPos0);   // Set servo on channel 0.
    pwm.setPWM(15, 0, servoPos1);  // Set servo on channel 15.

    delay(20);  // Small delay to reduce jitter.
}
    

omartronics

مرحبًا بكم في OmArTronics، مركز عشاق التكنولوجيا والعقول المبدعة! اسمي عمر، مؤسس هذا الموقع الإلكتروني وقناة اليوتيوب، وأنا مهندس شغوف ذو خلفية في الهندسة الكهربائية والميكانيكية، وأتابع حاليًا دراسة الماجستير في الميكاترونيكس في ألمانيا.

اترك تعليقاً