هذا الدليل جزء من: التحكم في محرك سيرفو 16 أو 32 باستخدام PCA9685
تساعدك هذه المجموعة من الدروس التعليمية المصحوبة بمقاطع فيديو على التحكم في 32 محرك سيرفو أو أكثر باستخدام أردوينو أونو، أو نانو، أو ميني، أو إي إس بي 32. جميع الأكواد متوفرة.
التحكم في محرك سيرفو 32 باستخدام وحدة PCA9685 و ESP32 V4
في هذا الدليل، ستتعلم كيفية التحكم في ما يصل إلى 32 محرك سيرفو باستخدام وحدة تحكم دقيقة ESP32 متصلة بوحدة PCA9685. هذا مفيد بشكل خاص للمشاريع التي تتطلب تشغيل عدة محركات سيرفو في وقت واحد دون استخدام واي فاي. سيكون الناتج إعدادًا وظيفيًا بالكامل حيث يمكنك التحكم في موضع كل محرك سيرفو بشكل فردي.

ستقوم هذه التعليمات بإرشادك من خلال مكونات الأجهزة اللازمة، وتعليمات التوصيل، ونظرة عامة على الشيفرة المطلوبة لتحقيق هذا التحكم. لمشاهدة عرض تفصيلي، يمكنك مشاهدة الفيديو المرتبط (في الفيديو عند 00:00).
شرح الأجهزة
المكونات الرئيسية المستخدمة في هذا المشروع هي المتحكم الدقيق ESP32 ووحدة محرك PWM PCA9685. يعمل ESP32 كجهاز التحكم الرئيسي الذي يرسل إشارات إلى وحدة PCA9685، والتي بدورها تتحكم في محركات السيرفو. يمكن لوحدة PCA9685 التعامل مع ما يصل إلى 16 محرك سيرفو لكل وحدة، مما يسمح بتوصيل وحدتين للتحكم في إجمالي 32 سيرفو.
يعمل وحدة PCA9685 باستخدام اتصال I2C، مما يعني أن لديها سلكين رئيسيين لنقل البيانات: SDA (خط البيانات) و SCL (خط الساعة). كما أنها تتطلب مصدر طاقة لتشغيل السيرفو، عادةً عند 5 فولت. يعمل ESP32 كجهاز رئيسي، موفراً إشارات التحكم اللازمة لوحدات PCA9685 الفرعية.
تفاصيل ورقة البيانات
| الصانع | أدا فروت |
|---|---|
| رقم الجزء | PCA9685 |
| جهد المنطق/الإدخال والإخراج | 3.3 فولت إلى 5.5 فولت |
| جهد الإمداد | ٥ ف |
| التيار الناتج (لكل قناة) | ~20 مللي أمبير |
| التيار الذروي (لكل قناة) | حوالي 25 ملي أمبير |
| توجيه تردد PWM | 60 هرتز |
| عتبات منطق الإدخال | 0.3*VDD(منخفض)، 0.7*فDD(مرتفع) |
| سقوط الجهد / ردي إس (أون)/ تشبع | 0.5 فولت كحد أقصى |
| الحدود الحرارية | ١٢٥ °م |
| حزمة | HTSSOP-28 |
| ملاحظات / متغيرات | 16 قناة وحدة تحكم PWM |
- استخدم مصدر طاقة خارجي للمشغلات (5 فولت، 2 أمبير موصى به).
- تأكد من وجود تأريض صحيح بين ESP32 و PCA9685.
- تحقق من إعدادات تردد PWM لأفضل أداء للخدمة.
- قم بتعديل حدود عرض النبضة بناءً على مواصفات السيرفو.
- كن حذرًا من سحب التيار عند تشغيل عدة سيرفو.
تعليمات التوصيل

لتوصيل PCA9685 بESP32، ابدأ بتوصيل الطاقة والأرضي. قم بتوصيل VCCقم بتوصيل دبوس PCA9685 بمصدر طاقة 5 فولت، وقم بتوصيل دبوس GND بأحد دبابيس GND على ESP32. يضمن ذلك أن كل من الوحدة و ESP32 يشتركان في أرضية مشتركة.
بعد ذلك، بالنسبة لتواصل I2C، قم بتوصيل دبابيس SDA على PCA9685 إلى GPIO 21 على ESP32 ودبابيس SCL إلى GPIO 22. هذا الإعداد يسمح لـ ESP32 بالتواصل مع وحدة PCA9685 بشكل صحيح. تأكد من استخدام أسلاك قصيرة لتجنب الضجيج في خطوط التواصل، خاصة إذا كنت تعمل مع عدة سيرفو.
كما هو موضح في الصورة أعلاه، بالنسبة للوحة PCA9685 رقم 2 (على اليسار)، تأكد من لحام هذه المسار لتعيين عنوان I2C بحيث يكون مختلفًا عن اللوحة 1 (على اليمين).
أمثلة شفرة وتجربة شاملة
يقوم الكود بتهيئة وحدات PCA9685 ويحدد تردد PWM. تتضمن هوية المفتاح في الكودboard1وboard2، والتي تمثل وحدتي PCA9685 المرتبطتين بـ ESP32. الـsetup()تقوم الدالة بتهيئة المراقب التسلسلي وتعيين تردد PWM لكل من اللوحين.
void setup() {
Serial.begin(9600);
Serial.println("32 channel Servo test!");
board1.begin();
board2.begin();
board1.setPWMFreq(60); // Analog servos run at ~60 Hz updates
board2.setPWMFreq(60);
}هذا الاقتباس يظهر عملية الإعداد، حيث يتم تهيئة الاتصال التسلسلي، ويتم تعيين تردد PWM لمحركات السيرفو.setPWMFreq(60)تضمن الوظيفة أن تحصل السيرفو على التردد الصحيح لتشغيل سلس.
في الحلقة، يقوم حلقة for بالتكرار عبر الزوايا من 0 إلى 180 درجة، مرسلاً أوامر عرض النبضة إلى الخوادم المتصلة بكل من لوحات PCA9685. الوظيفةangleToPulseيحول الزاوية إلى عرض النبضة المقابل.
void loop() {
for(int angle = 0; angle < 181; angle += 10) {
for(int i = 0; i < 16; i++) {
board2.setPWM(i, 0, angleToPulse(angle));
board1.setPWM(i, 0, angleToPulse(angle));
}
}
delay(100);
}هذا المقتطف من الشيفرة يوضح كيفية التحكم في السيرفو في حلقة. تزداد زاوية السيرفو بمقدار 10 درجات، وsetPWMيتم استدعاء الدالة لكلتا اللوحتين لتحريك السيرفو إلى الزاوية المحددة. التأخير يسمح بوجود توقف قصير بين الحركات.
عرض / ماذا تتوقع
عند الانتهاء من توصيل الأسلاك وتحميل الشيفرة، يجب أن ترى المحركات تتحرك بزيادات من 0 إلى 180 درجة. سيحدث هذا لجميع المحركات الـ 32 المتصلة بوحدتي PCA9685 في الوقت نفسه. إذا لم تستجب أي محرك، تحقق من مصدر الطاقة وتأكد من أن جميع الاتصالات آمنة (في الفيديو عند 12:30).
توقيت الفيديو
- 00:00 بدء
- ٠٠:٣٦ المقدمة
- 04:01 شرح الأسلاك (ESP32 فقط)
- 06:26 إعداد Arduino IDE لـ ESP32
- 08:34 شرح الكود
- 13:40 عرض تشغيل 32 محرك سيرفو
هذا الدليل هو جزء من: التحكم في محرك سيرفو 16 أو 32 باستخدام PCA9685
- كود أردوينو وفيديو لمتحكم السيرفو PCA9685 ذو 16 قناة و12 بت V1
- Control 16 Servo Motors Using a PCA9685 Module and Arduino V2 Sketch #1: One-by-One
- التحكم في 16 محرك سيرفو باستخدام وحدة PCA9685 وكود أردوينو V2: التحكم الفردي في السيرفو
- Controlling 16 Servo Motors Using a PCA9685 Module and Arduino V2 Sketch #3: All Servos Together
- التحكم في محرك سيرفو 32 باستخدام وحدة PCA9685 وبرنامج Arduino V3 الرسم التخطيطي #1: جميع السيرفوهات معًا
- التحكم في 32 سيرفو عبر الواي فاي باستخدام ESP32 و PCA9685 من خلال الكمبيوتر المكتبي أو الهاتف المحمول V5
/*
* المصدر الأصلي للمكتبة: https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library
*
* هذا هو كود Arduino لوحدة التحكم في سيرفو 16 قناة PCA6985
* للتحكم في 32 محرك سيرفو باستخدام لوحة ESP32 بدون واي فاي
*
* احصل على هذا الكود والأسلاك من الفيديو هذا: http://robojax.com/RJT268
*
* هذا هو الفيديو V4 عن PCA9685: https://youtu.be/JFdXB8Za5Os
*
* شاهد الفيديو للحصول على التفاصيل (V1) وعرض توضيحي http://youtu.be/y8X9X10Tn1k
*
* كتب/تم تحديثه بواسطة أحمد شمشيري لقناة فيديو Robojax www.Robojax.com
* التاريخ: 15 ديسمبر 2019، في أجاكس، أونتاريو، كندا
*
* إخلاء المسؤولية: هذا الكود "كما هو" ولأغراض تعليمية فقط.
*
* أو قدم تبرعًا باستخدام PayPal http://robojax.com/L/?id=64
*
* هذا الكود "كما هو" بدون ضمان أو مسؤولية. حر في الاستخدام طالما أنك تحتفظ بهذه الملاحظة سليمة.*
* تم تحميل هذا الكود من Robojax.com
* هذا البرنامج هو برنامج مجاني: يمكنك إعادة توزيعه و/أو تعديله
* تحت شروط رخصة GNU العامة كما نُشرت بواسطة
* مؤسسة البرمجيات الحرة، إما الإصدار 3 من الرخصة، أو
* (حسب خيارك) أي إصدار لاحق.
*
* هذا البرنامج موزع على أمل أن يكون مفيدًا،
* لكن بدون أي ضمان؛ حتى بدون ضمان ضمني بـ
* قابلية البيع أو الملائمة لغرض معين. انظر إلى
* رخصة GNU العامة لمزيد من التفاصيل.
*
* يجب أن تكون قد تلقيت نسخة من رخصة GNU العامة
* مع هذا البرنامج. إذا لم يكن، راجع <https://www.gnu.org/licenses/>.
*/
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// يُطلق عليه هذا الاسم، ويستخدم العنوان الافتراضي 0x40
Adafruit_PWMServoDriver board1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver board2 = Adafruit_PWMServoDriver(0x41);
// اعتمادًا على طراز محرك السيرفو الخاص بك، قد تختلف الحد الأدنى والحد الأقصى لعرض النبضة، أنت
// أريد أن تكون هذه صغيرة/كبيرة بقدر الإمكان دون الوصول إلى الحد الأقصى.
// لأقصى مدى. سيتعين عليك تعديلها حسب الحاجة لتتناسب مع السيرفو الذي
// لدَي!
// شاهد الفيديو V1 لفهم السطرين أدناه: http://youtu.be/y8X9X10Tn1k
#define SERVOMIN 125 // هذا هو عدد طول النبضة 'الحد الأدنى' (من أصل 4096)
#define SERVOMAX 575 // هذه هي 'الحد الأقصى' لعدد طول النبض (من أصل 4096)
int servoNumber = 0;
void setup() {
Serial.begin(9600);
Serial.println("32 channel Servo test!");
board1.begin();
board2.begin();
board1.setPWMFreq(60); // تعمل السيرفو التناظرية بتحديثات حوالي 60 هرتز
board2.setPWMFreq(60);
// yield();
}
// تم تحديث الكود داخل loop() بواسطة Robojax
void loop() {
for( int angle =0; angle<181; angle +=10){
for(int i=0; i<16; i++)
{
board2.setPWM(i, 0, angleToPulse(angle) );
board1.setPWM(i, 0, angleToPulse(angle) );
}
}
// روبيوكس PCA9865 تحكم سيرفو 16 قناة
delay(100);
}
/*
* زاوية إلى نبضة(int ang)
* تحصل على الزاوية بالدرجات وتعيد عرض النبضة
* كما تطبع القيمة على شاشة التسلسل
* كتبها أحمد شمشيري لموقع روبوجَکس، Robojax.com
*/
int angleToPulse(int ang){
int pulse = map(ang,0, 180, SERVOMIN,SERVOMAX); // قم بربط زاوية الخريطة من 0 إلى 180 مع الحد الأدنى للـ Servo والحد الأقصى للـ Servo.
Serial.print("Angle: ");Serial.print(ang);
Serial.print(" pulse: ");Serial.println(pulse);
return pulse;
}
الأشياء التي قد تحتاجها
-
أمازونشراء PCA9685 من أمازونamzn.to
-
إي باياشترِ PCA9685 من eBayebay.us
-
علي إكسبريساشترِ PCA9685 من علي إكسبريسs.click.aliexpress.com
-
بانجوداشترِ PCA9685 من بانجودbanggood.com
الموارد والمراجع
لا توجد موارد حتى الآن.
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
آدا فروت - مكتبة سائق السيرفو PWM - ماستر
Adafruit-PWM-Servo-Driver-Library-master.zip0.02 MB