دليل التحكم المؤازر الأردوينو: SG90، و PWM، و PCA9685

ملخص سريع

دليل محرك سيرفو Arduino يغطي الماكينات الصغيرة SG90 وأساسيات إشارة PWM والتحكم متعدد المؤازرة مع برنامج التشغيل PCA9685 I2C. يمشي عبر أجهزة توصيل الأسلاك مباشرة إلى دبابيس Arduino، ويتحكم في الزاوية باستخدام مكتبة Servo، ويوسع ما يصل إلى 16 جهازًا أو أكثر باستخدام وحدة PCA9685. تم تضمين التعليمات البرمجية التي تم اختبارها لجميع التكوينات.

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

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

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

ما يغطيه هذا البرنامج التعليمي المؤازر

وعلى وجه التحديد، بنهاية هذا الدليل، سوف تكون قادرًا على:

  • فهم كيفية عمل محركات المؤازرة داخليًا (محرك التيار المستمر، والتروس، ومقياس الجهد، والتحكم في الحلقة المغلقة)
  • اشرح أيضًا كيف تتحكم إشارات PWM في موضع المؤازرة عند 50 هرتز
  • بعد ذلك، قارن بين الماكينات SG90 وMG996R واختر الماكينة المناسبة لمشروعك
  • توصيل وبرمجة مشروع مسح مؤازر أردوينو من الصفر
  • Control a servo with a potentiometer using analogRead and map functions
  • علاوة على ذلك، استخدم برنامج التشغيل المؤازر PCA9685 للتحكم في ما يصل إلى 16 سيرفو في وقت واحد
  • قم بتشغيل عدة أجهزة مؤازرة بأمان دون الإضرار ب Arduino الخاص بك
  • أخيرًا، قم باستكشاف مشكلات المؤازرة الشائعة وإصلاحها مثل الارتعاش والسخونة الزائدة والانقطاع عن العمل

كيف تعمل المحركات المؤازرة: الأساسيات

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

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

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

  • محرك تيار مستمر: أولاً، هذا هو المحرك الأساسي الذي يحول الطاقة الكهربائية إلى حركة دورانية. أنها توفر قوة الغزل الخام.
  • قطار التروس: بعد ذلك، مجموعة من تروس التخفيض (البلاستيك في SG90، والمعدن في MG996R) التي تقلل من عدد دورات المحرك العالية في الدقيقة إلى إنتاج أبطأ وعزم دوران أعلى عند العمود.
  • مقياس الجهد: ثم يتم توصيل مقاومة متغيرة صغيرة بعمود الخرج. يقوم باستمرار بإبلاغ الزاوية الحالية للعمود إلى دائرة التحكم.
  • دائرة التحكم: أخيرًا، يوجد PCB صغير داخل المؤازرة يقارن الموضع المطلوب (من إشارة PWM) بالموضع الفعلي (من مقياس الجهد) ويدفع المحرك لسد الفجوة.
Servo motor intact and disassembled showing DC motor gears and potentiometer
محرك مؤازر سليم ومفكك، منظر داخلي
Disassembled servo motor showing internal gear train control board and potentiometer
محرك مؤازر مفكك يوضح المكونات الداخلية

التحكم في الحلقة المغلقة: كيف يعرف المؤازرة أين يذهب

كل سيرفو يعتمد عليه التحكم في الحلقة المغلقة. باختصار، إليك كيفية العمل خطوة بخطوة:

  1. أولاً، يرسل Arduino إشارة PWM التي تشفر الزاوية المطلوبة.
  2. بعد ذلك، تقوم دائرة التحكم في السيرفو بقراءة عرض النبضة وتحسب موضع الهدف.
  3. بعد ذلك، تقوم دائرة التحكم بقراءة مقياس الجهد لتحديد الوضع الحالي للعمود.
  4. بعد ذلك، إذا كان هناك اختلاف بين الهدف والموضع الحالي، تقوم الدائرة بتشغيل محرك التيار المستمر في الاتجاه الصحيح.
  5. أخيرًا، بمجرد أن تتوافق قراءة مقياس الجهد مع الهدف، يتوقف المحرك ويحتفظ بوضعه.

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

Closed-loop control system block diagram for servo motor positioning with feedback
مخطط نظام التحكم ذو الحلقة المغلقة لتحديد موضع المحرك المؤازر

شرح إشارة PWM المؤازرة: كيف يتحكم عرض النبضة في الزاوية

تعديل عرض النبض (PWM) هو الطريقة التي يتحدث بها Arduino مع محرك سيرفو. بدلاً من إرسال مستوى الجهد، يرسل الأردوينو سلسلة من النبضات الرقمية بتردد ثابت. في جوهر الأمر، فإن عرض كل نبضة يخبر المؤازرة بالزاوية التي يجب الانتقال إليها.

بالنسبة لماكينات الهوايات القياسية، تعمل إشارة PWM عند 50 هرتزمما يعني أن نبضة واحدة تخرج كل 20 مللي ثانية. وفي كل نافذة مدتها 20 مللي ثانية، لا يهم إلا الجزء العالي (عرض النبضة). عادةً، يتم تعيين عرض النبضة بين 1.0 مللي ثانية و2.0 مللي ثانية إلى النطاق الكامل لحركة المؤازرة من 0 إلى 180 درجة.

PWM signal waveform showing pulse width modulation at 50 Hz for servo motor control
شكل موجة إشارة PWM للتحكم المؤازر عند 50 هرتز

عرض نبض PWM مقابل جدول موضع المؤازرة

يوضح الجدول أدناه كيفية تعيين عروض النبض المختلفة لمواضع مؤازرة محددة. ضع في اعتبارك أن القيم الدقيقة يمكن أن تختلف قليلاً اعتمادًا على طراز المؤازرة:

عرض النبض (مللي ثانية)موضع المؤازرةدورة التشغيل عند 50 هرتز
0.5 مللي ثانية0 درجة (الحد الأدنى، بعض الماكينات)2.5%
1.0 مللي ثانية0 درجة (الحد الأدنى القياسي)5%
1.25 مللي ثانية45°6.25%
1.5 مللي ثانية90 درجة (وضع الوسط)7.5%
1.75 مللي ثانية135°8.75%
2.0 مللي ثانية180 درجة (الحد الأقصى القياسي)10%
2.5 مللي ثانية180 درجة (كحد أقصى، بعض الماكينات)12.5%

تتعامل مكتبة Arduino Servo مع معظم هذا تلقائيًا. على سبيل المثال، عند الاتصال سيرفو.اكتب(90)، تولد المكتبة نبضة تبلغ 1.5 مللي ثانية عند 50 هرتز لتحريك المؤازرة إلى الموضع المركزي. ومع ذلك، فإن فهم إشارة PWM الأساسية يساعد كثيرًا عند استكشاف أخطاء الارتعاش وإصلاحها، أو معايرة النطاقات المخصصة، أو العمل مع برنامج التشغيل PCA9685.

SG90 vs MG996R: اختيار المؤازرة المناسبة لمشروعك

إن جهاز مؤازر صغير SG90 و المؤازر القياسي MG996R هما أكثر خدمات الهوايات شيوعًا في مشاريع Arduino. يعتمد الاختيار الذي تختاره على احتياجات عزم الدوران والحجم والمتانة لمشروعك. فيما يلي مقارنة جنبًا إلى جنب:

SG90 micro servo motor with mounting horn for Arduino projects
محرك مؤازر صغير SG90 مع قرن متصل به
المواصفاتجهاز مؤازر صغير SG90مؤازر MG996R
عزم دوران المماطلة1.2 كجم-سم عند 4.8 فولت، 1.6 كجم-سم عند 6 فولت11 كجم-سم عند 4.8 فولت، 13 كجم-سم عند 6 فولت
جهد التشغيل3.5 إلى 6 فولت4.8 إلى 7.2 فولت
تيار عدم التحميل100 مللي أمبير220 مللي أمبير عند 4.8 فولت، 250 مللي أمبير عند 6 فولت
تيار المماطلة650 مللي أمبير900 مللي أمبير عند 4.8 فولت، 1400 مللي أمبير عند 6 فولت
سرعة التشغيل0.12 ثانية لكل 60 درجة عند 4.8 فولت0.15 ثانية لكل 60 درجة عند 4.8 فولت
الوزن9 g55 g
نوع العتادتروس بلاستيكيةتروس معدنية
نطاق الدوران180°180°
حالة الاستخدام المثاليةمشاريع خفيفة الوزن، وإمالة عمومية، وروبوتات صغيرة الحجمأذرع روبوتية ومفاصل عالية التحميل ومركبات RC
الإيجابياترخيصة وخفيفة الوزن ومنخفضة السحب للطاقةعزم دوران عالي، تروس معدنية متينة، دقيقة
السلبياتعزم الدوران المنخفض، يمكن أن تتجرد التروس البلاستيكيةأثقل وزناً، وسحب تيار أعلى، وأغلى ثمناً

باختصار، استخدم SG90 عندما يكون الوزن والمساحة محدودين والأحمال خفيفة. اختر MG996R عندما تحتاج إلى عزم دوران حقيقي، على سبيل المثال في مشروع الذراع الروبوتية 6-DOF حيث تحمل مفاصل الكتف والمرفق أحمالاً ثقيلة. تستخدم الكثير من تصميمات الأذرع الآلية، بما في ذلك أذرعنا، مزيجًا من الاثنين معًا: MG996R لمفاصل القاعدة الثقيلة وSG90 للمعصم والمقبض الأخف وزنًا.

أجهزة اختبار المؤازرة: أداة معايرة مفيدة

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

Servo tester module for testing and calibrating SG90 and MG996R servo motors
وحدة اختبار المؤازرة للمعايرة

تشغيل الماكينات بأمان: السحب الحالي والإمدادات الخارجية

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

لماذا لا يتم تشغيل الماكينات من طرف Arduino 5 V؟

يمكن لمنظم Arduino Uno 5 V توفير حوالي 500 مللي أمبير فقط. ومع ذلك، يمكن لجهاز SG90 واحد سحب ما يصل إلى 650 مللي أمبير في حالة التوقف، ويمكن أن يصل جهاز MG996R إلى 1400 مللي أمبير. لذلك، إذا كان المؤازرة تتطلب تيارًا أكبر مما يمكن للمنظم توفيره، فسوف ترى انخفاضًا في الجهد يؤدي إلى إعادة ضبط Arduino أو التصرف بشكل غير متوقع.

توصيات إمدادات الطاقة الخارجية

لتشغيل الماكينات بشكل موثوق، استخدم مصدر طاقة خارجيًا مخصصًا بجهد 5 إلى 6 فولت مع تيار كافٍ. على سبيل المثال، يعمل محول 5 فولت 2 أمبير بشكل جيد مع واحدة أو اثنتين من أجهزة SG90، في حين أن مصدر الطاقة 5 فولت 10 أمبير أفضل للمشروعات التي تحتوي على ستة أجهزة أو أكثر، مثل الذراع الآلية.

اتبع دائمًا قواعد الأسلاك هذه للتحكم في محرك سيرفو Arduino:

  • أرضية مشتركة: أولاً، قم بتوصيل أرضي مصدر الطاقة الخارجي بـ Arduino GND. بدون أرضية مشتركة، لن يكون لإشارة PWM أي مرجع ولن يستجيب المؤازرة.
  • قضبان طاقة منفصلة: بعد ذلك، قم بتوصيل سلك (الطاقة) الأحمر الخاص بالسيرفو بالطرف الموجب للمصدر الخارجي، وليس بمنفذ Arduino 5 V.
  • سلك الإشارة فقط: أيضًا، يجب أن يكون الاتصال الوحيد بين Arduino وservo هو سلك الإشارة (PWM).
  • مكثفات الفصل: أخيرًا، ضع مكثفًا كهربائيًا بسعة 100 فائق التوهج عبر قضبان الطاقة بالقرب من الماكينات لتقليل ارتفاع الجهد والارتعاش.

الرسم الحالي مرجع سريع

نموذج المؤازرةتيار عدم التحميلتيار المماطلةالإمداد الموصى به لكل جهاز مؤازر
SG90100 مللي أمبير650 مللي أمبير5 فولت، 1 أمبير على الأقل
MG996R220 مللي أمبير1400 مللي أمبير6 فولت، 2 أمبير على الأقل

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

أسلاك محرك سيرفو: فهم الأسلاك الثلاثة

قبل توصيل سيرفو الخاص بك بـ Arduino، تحتاج أولاً إلى فهم الموصل ثلاثي الأسلاك الذي تستخدمه جميع سيرفو الهوايات القياسية:

دبوسالإشارةلون السلك
1أرضي (GND)أسود أو بني
2الطاقة (VCC، 4.8 إلى 6 فولت)أحمر
3إشارة التحكم (PWM)برتقالي أو أصفر

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

المشروع 1: عملية المسح المؤازرة لـ Arduino – أول مشروع مؤازر لك

إن رسم الاجتياح هو المشروع الكلاسيكي للمبتدئين لـ تحكم مؤازر أردوينو. في الأساس، فهو يجعل المؤازرة تدور ذهابًا وإيابًا بين 0 و180 درجة بشكل مستمر. ونتيجة لذلك، يعلمك هذا المشروع أساسيات مكتبة Arduino Servo ويؤكد أيضًا أن توصيلاتك صحيحة.

الأجزاء اللازمة لمشروع الاجتياح

  • أردوينو أونو (أو أي لوحة أردوينو)
  • مؤازرة صغيرة SG90 (أو ما شابهها)
  • مزود طاقة خارجي 5 فولت للمُؤازر (موصى به)
  • اللوح وأسلاك التوصيل

اتصالات الأسلاك الاجتياح

سلك مؤازريتصل بـ
بني أو أسود (GND)GND لـ Arduino وGND للإمداد الخارجي
أحمر (VCC)مصدر إمداد خارجي 5 فولت موجب
برتقالي أو أصفر (إشارة)دبوس أردوينو الرقمي 9
Arduino servo sweep project wiring diagram showing SG90 connected to pin 9
مخطط الأسلاك لمشروع 1 اكتساح تحكم مؤازر أردوينو 1

اكتساح كود اردوينو

للبدء، افتح Arduino IDE وانتقل إلى ملف، أمثلة، مؤازرة، مسحأو فقط انسخ الكود أدناه. يأتي مثال Sweep مدمجًا في مكتبة Arduino Servo القياسية.

/* 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
    }
}

كيف يعمل رمز الاجتياح سطرًا تلو الآخر

على الرغم من أن رسم Sweep قصير، إلا أنه يغطي جميع المفاهيم الأساسية لـ محرك سيرفو PWM أردوينو التحكم:

  • #include <Servo.h> – أولاً، يقوم هذا الخط باستيراد مكتبة Arduino Servo، التي تتولى جميع توقيتات PWM نيابةً عنك.
  • سيرفو ماي سيرفو; - هذا ينشئ كائن مؤازر. يمكنك إنشاء ما يصل إلى 12 كائن مؤازر على Arduino Uno.
  • myservo.attach(9); - بعد ذلك، يخبر هذا المكتبة بإرسال إشارات PWM على الدبوس الرقمي 9.
  • myservo.write(pos); - ينقل هذا الأمر المؤازر إلى الزاوية المخزنة في المتغير نقاط البيع. تتراوح القيمة من 0 إلى 180.
  • وأخيراً الاثنان لـ تمسح الحلقات الزاوية من 0 إلى 180 ثم تعود من 180 إلى 0، مع تأخير 15 مللي ثانية بين كل خطوة للحصول على حركة سلسة.

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

المشروع 2: التحكم في المؤازرة باستخدام مقياس الجهد (المقبض)

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

الأجزاء اللازمة لمشروع المقبض

  • أردوينو أونو (أو أي لوحة أردوينو)
  • مؤازرة صغيرة SG90 (أو ما شابهها)
  • مقياس جهد 10 كيلو أوم
  • مزود طاقة خارجي 5 فولت للمُؤازر (موصى به)
  • اللوح وأسلاك التوصيل

توصيلات الأسلاك المقبض

المكوّندبوس أو سلكيتصل بـ
GND المؤازر (بني/أسود)GNDGND لـ Arduino وGND للإمداد الخارجي
مؤازر VCC (أحمر)VCCمصدر إمداد خارجي 5 فولت موجب
إشارة المؤازرة (برتقالي/أصفر)الإشارةدبوس أردوينو الرقمي 9
دبوس مقياس الجهد 1دبوس خارجيأردوينو 5 فولت
ممسحة مقياس الجهدالدبوس الأوسطدبوس أردوينو التناظري A0
دبوس مقياس الجهد 3دبوس خارجيشبكة GND للأردوينو
Arduino servo knob project wiring diagram with potentiometer and SG90 servo
مخطط أسلاك لمشروع 2 مقبض تحكم مؤازر أردوينو بمقياس الجهد

مقبض رمز اردوينو

بعد ذلك، افتح Arduino IDE وانتقل إلى ملف، أمثلة، مؤازر، مقبض، أو استخدم الرمز أدناه:

/*
 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
}

كيف يعمل رمز المقبض: القراءة التناظرية والخريطة

في الأساس، الوظيفتان الرئيسيتان في هذا المخطط هما analogRead() و رسم خريطة():

  • analogRead(A0) - أولاً، يقرأ هذا جهد مقياس الجهد ويعيد قيمة بين 0 و1023 (دقة ADC 10 بت).
  • خريطة (فال، 0، 1023، 1023، 0، 180) - بعد ذلك، يقوم هذا بتحويل النطاق من 0 إلى 1023 إلى نطاق من 0 إلى 180 درجة للمؤازرة.
  • myservo.write(val) – أخيرًا، يتم إرسال الزاوية المعينة إلى المؤازرة.

إذا كنت تريد تحكماً أدق في موضع المؤازر، يمكنك استخدام myservo.writeMicroseconds() بدلاً من myservo.write(). يتيح لك هذا ضبط عرض النبض مباشرة بالميكروثانية (على سبيل المثال، من 1000 إلى 2000)، مما يمنحك دقة أعلى بكثير من النطاق من 0 إلى 180 درجة. وأيضًا، إذا لم يصل المؤازرة إلى النطاق الكامل عند تدوير مقياس الجهد بالكامل، فحاول تعديل قيم الخريطة قليلاً، على سبيل المثال خريطة(val, 0, 1023, 1023, 10, 170).

برنامج تشغيل مؤازر PCA9685: يمكنك التحكم في ما يصل إلى 16 سيرفو باستخدام Arduino

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

PCA9685 16-channel servo driver board for controlling multiple servos with Arduino via I2C
لوحة تشغيل المؤازرة PCA9685 لـ Arduino

ما هو PCA9685 ولماذا استخدامه؟

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

علاوة على ذلك، يمكنك ربط ما يصل إلى 62 لوحة PCA9685 في سلسلة تعاقبية على ناقل I2C واحد، والذي يمنحك نظريًا 992 قناة مؤازرة. ومن الناحية العملية، تعد لوحة واحدة تحتوي على 16 قناة أكثر من كافية لمعظم المشاريع.

شرح توصيلات اللوحة PCA9685

تحتوي لوحة الاختراق PCA9685 على هذه التوصيلات الرئيسية:

  • VCC: الطاقة المنطقية (3.3 فولت أو 5 فولت من Arduino). هذا يشغّل رقاقة PCA9685 فقط، وليس الماكينات.
  • GND أرضي، يجب مشاركته مع Arduino ومصدر طاقة المؤازر.
  • SDA: خط بيانات I2C. وصِّل بـ Arduino A4 (Uno) أو دبوس SDA.
  • SCL: خط ساعة I2C. وصِّل بـ Arduino A5 (Uno) أو دبوس SCL.
  • V+: مدخل طاقة المؤازرة. قم بتوصيل مصدر طاقة خارجي من 5 فولت إلى 6 فولت هنا. يعمل هذا على تشغيل جميع قنوات المؤازر ال 16.
  • OE: تمكين الإخراج. اتركه مفصولاً (مسحوب منخفض داخلياً) لإبقاء جميع المخرجات نشطة.

متى يجب استخدام PCA9685 بدلاً من التحكم المباشر في Arduino

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

المشروع 3: التحكم المؤازر المزدوج باستخدام PCA9685 ومقاييس فرق الجهد

يوضح هذا المشروع كيفية التحكم في سيرفرين بشكل مستقل باستخدام لوحة التشغيل PCA9685 ومقياسي فرق الجهد. بمعنى آخر، فهو يجمع كل ما تعلمته حول الإدخال التناظري، وPWM المؤازر، واتصالات I2C في تصميم عملي واحد.

الأجزاء اللازمة لمشروع المؤازرة المزدوجة PCA9685

المكوّنالكمية
أردوينو أونو1
لوحة محرك سيرفو PCA96851
مؤازرة صغيرة SG90 (أو ما شابهها)2
مقياس جهد 10 كيلو أوم2
مصدر طاقة خارجي 5 فولت أو 6 فولت (2 أمبير على الأقل)1
اللوح وأسلاك التوصيلحسب الحاجة

PCA9685 الأسلاك المؤازرة المزدوجة

الاتصالمنTo
بيانات I2Cأردوينو A4 (SDA)PCA9685 SDA
ساعة I2C Clockأردوينو A5 (SCL)PCA9685 SCL
قوة المنطقأردوينو 5 فولتPCA9685 VCC
أرضية مشتركةشبكة GND للأردوينوPCA9685 GND GND والإمداد الخارجي GND
طاقة مؤازرةمصدر إمداد خارجي 5 فولت موجبمحطة PCA9685 V+ الطرفية PCA9685
المؤازر 1موصل 3 سنونالقناة PCA9685 القناة 0
المؤازرة 2موصل 3 سنونقناة PCA9685 القناة 15
ممسحة مقياس الجهد 1الدبوس الأوسطأردوينو A0
ممسحة مقياس الجهد 2الدبوس الأوسطأردوينو A1
دبابيس مقياس الجهد الخارجيالمسامير الخارجيةأردوينو 5 فولت و GND
Wiring diagram for dual servo control project using PCA9685 board and two potentiometers with Arduino
مخطط الأسلاك للتحكم المؤازر المزدوج مع PCA9685 ومقاييس الجهد

كود اردوينو PCA9685 مزدوج المؤازرة

بالنسبة لهذا المخطط، تحتاج إلى مكتبة Adafruit PWM Servo Driver. يمكنك تثبيته من Arduino Library Manager من خلال البحث عن "Adafruit PWM Servo Driver". يقرأ الكود كلاً من مقاييس الجهد ويعين قيمها لعرض النبضة المؤازرة:

/**
 * 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.
}

فهم قيم نطاق النبض PCA9685

في الشيفرة أعلاه، ستلاحظ تمرير قيم مثل 150 و600 إلى تعيينPWM(). هذه ليست درجات أو ميلي ثانية. بدلاً من ذلك، فهي عبارة عن عدد PWM 12 بت من إجمالي 4096 علامة في كل دورة. على سبيل المثال، القيمة 150 تبلغ تقريبًا 0.73 مللي ثانية عرض النبضة، والقيمة 600 تساوي 2.93 مللي ثانية تقريبًا. بالنسبة لمعظم الماكينات القياسية، هناك مجموعة من 150 إلى 600 يغطي الدوران الكامل من 0 إلى 180 درجة. ومع ذلك، قد تحتاج إلى تعديل هذه القيم لمضاعفتك المحددة لتجنب طنين التوقف النهائي.

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

استكشاف أخطاء أجهزة Arduino الشائعة وإصلاحها

حتى المصنعين ذوي الخبرة يواجهون مشكلات مؤازرة بين الحين والآخر. فيما يلي المشاكل الأكثر شيوعًا وحلولها.

ارتعاش المؤازرة أو الوخز

إذا اهتز جهاز المؤازرة الخاص بك أو ارتعش بدلاً من الحفاظ على وضع ثابت، فإن السبب الأكثر ترجيحًا هو عدم استقرار مصدر الطاقة. عندما يسحب المؤازرة طفرات التيار، ينخفض ​​جهد الإمداد للحظات، ونتيجة لذلك تفقد دائرة التحكم مرجعيتها. لإصلاح ذلك، استخدم مصدر طاقة خارجيًا مخصصًا بتيار مناسب وأضف مكثفًا كهربائيًا بسعة 100 إلى 470 فائق التوهج عبر قضبان الطاقة المؤازرة. بالإضافة إلى ذلك، يمكن أيضًا أن تسبب إشارات PWM المزعجة الصادرة عن التحكم المؤازر القائم على البرامج ارتعاشًا، وهو سبب وجيه آخر للنظر في برنامج تشغيل PWM لجهاز PCA9685.

السيرفر لا يتحرك نهائيا

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

ارتفاع درجة حرارة المؤازرة

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

مصدر طاقة صاخب وانقطاع التيار الكهربائي

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

نطاق نبض خاطئ أو دوران محدود

إذا لم يصل مؤازرك إلى النطاق الكامل من 0 إلى 180 درجة، فمن المحتمل أن تكون المشكلة هي حدود عرض النبضة في الكود الخاص بك. نظرًا لأن نماذج المؤازرة المختلفة يمكن أن تحتوي على نطاقات نبض مختلفة قليلاً، فقد تحتاج إلى تعديلها. للتحكم المباشر في Arduino، يمكنك تحديد حدود مخصصة باستخدام مؤازرة(دبوس، نبضة صغيرة، نبضة صغيرة، نبضة قصوى)على سبيل المثال مؤازرة(9، 544، 2400). وبالمثل، بالنسبة لـ PCA9685، قم بضبط الحد الأدنى والحد الأقصى لقيم عدد PWM (على سبيل المثال، 125 إلى 625 بدلاً من 150 إلى 600).

الأسلاك الأرضية خاطئة

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

الأسئلة المتداولة (الأسئلة الشائعة)

كم عدد الماكينات التي يمكنني التحكم بها باستخدام جهاز Arduino Uno واحد؟

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

هل يمكنني استخدام محرك سيرفو بدون مكتبة؟

نعم، يمكنك فعل ذلك تقنيًا باستخدام الدالة digitalWrite() وdelayMicrothans(). لكن هذا الأسلوب أقل دقة ويمنع وحدة المعالجة المركزية. نظرًا لأن مكتبة Servo تتعامل مع التوقيت تلقائيًا، فلا يوجد سبب وجيه للقيام بذلك يدويًا.

ما الفرق بين servo.write() و servo.writeMicroMicroseconds()؟

تأخذ الدالة servo.write() زاوية درجة (0 إلى 180) وتحولها إلى عرض النبضة. في المقابل، يتيح لك servo.writeMicrothans() ضبط عرض النبض الدقيق (عادةً من 1000 إلى 2000 لنا)، حتى تحصل على تحكم أفضل في الموضع.

لماذا تصدر المؤازرة طنيناً أو اهتزازاً في مواضع معينة؟

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

هل يمكنني تشغيل جهاز مؤازر من بطارية 9 فولت؟

بطارية 9 فولت ليست خيارًا جيدًا للماكينات. تحتاج معظم ماكينات الهوايات إلى 4.8 إلى 6 فولت، وبالإضافة إلى ذلك، فإن بطاريات 9 فولت لها سعة تيار محدودة للغاية (حوالي 500 مللي أمبير). استخدم مصدرًا مناسبًا بجهد 5 فولت بدلاً من ذلك.

إلى ماذا يرمز PCA9685؟

PCA9685 هو رقم جزء NXP Semiconductors لوحدة تحكم PWM ذات 16 قناة و12 بت مع واجهة I2C. في مجتمع المصنعين، يتم استخدامه بشكل أساسي كمحرك مؤازر، على الرغم من أنه يمكنه أيضًا التحكم في مصابيح LED وأجهزة PWM الأخرى.

هل يمكنني استخدام الماكينات MG996R وSG90 معًا في نفس المشروع؟

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

كيف يمكنني التحكم في مؤازر الدوران المستمر باستخدام Arduino؟

تعمل أجهزة التدوير المستمر بشكل مختلف لأن عرض النبضة يتحكم في السرعة والاتجاه بدلاً من الزاوية. تقوم نبضة تبلغ 1.5 مللي ثانية بإيقاف المحرك، وتقوم النبضات الأقصر بتدويره في اتجاه واحد، وتقوم النبضات الأطول بتدويره في الاتجاه الآخر. لا يزال بإمكانك استخدام مكتبة Servo: توقف servo.write(90)، وservo.write(0) بأقصى سرعة في اتجاه واحد، وservo.write(180) بأقصى سرعة في الاتجاه الآخر.

لماذا تتم إعادة تعيين الأردوينو الخاص بي عندما يتحرك المؤازر؟

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

هل يمكنني التحكم في مؤازر عبر البلوتوث باستخدام Arduino؟

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

المصادر والمكتبات والتنزيلات

فيما يلي مرجع سريع لجميع الأدوات والمكتبات والملفات التي تحتاجها للمشاريع في هذا البرنامج التعليمي:

مكتبات الاردوينو المستخدمة

  • سيرفو.ح - مدمج في Arduino IDE. لا حاجة للتثبيت. يُستخدم للمشروع 1 (الاجتياح) والمشروع 2 (المقبض).
  • برنامج تشغيل مؤازر PWM PWM من Adafruit - التثبيت من مدير مكتبة Arduino. ابحث عن “Adafruit PWM Servo Driver”. يُستخدم للمشروع 3 (المؤازر المزدوج PCA9685).
  • Wire.h - مدمج في Arduino IDE. مطلوب لاتصال I2C مع PCA9685.

تنزيل الكود ومخططات الأسلاك

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

الموصى بها الدروس القادمة على OmArTronics

بمجرد أن تشعر بالراحة مع التحكم الأساسي بمؤازرة Arduino، إليك بعض المشاريع الأكثر تقدمًا التي تستحق الاستكشاف بعد ذلك:

الخاتمة

في هذا البرنامج التعليمي، تعلمت كيفية عمل المحركات المؤازرة من الداخل: محرك التيار المستمر، ومجموعة التروس، وردود فعل مقياس الجهد، ونظام التحكم في الحلقة المغلقة. أنت الآن تفهم أيضًا كيف تترجم إشارات PWM عند 50 هرتز عرض النبضة إلى موضع زاوي دقيق. وأخيرًا، لقد أكملت ثلاثة مشاريع عملية: رسم Sweep للحركة الأساسية، ومشروع Knob للتحكم في الإدخال التناظري، ومشروع PCA9685 ثنائي المؤازرة للتوسيع إلى أجهزة متعددة.

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

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

3 رأي حول “Arduino Servo Control Guide: SG90, PWM, and PCA9685”

أضف تعليق