كود أردوينو وفيديو لمتحكم السيرفو PCA9685 ذو 16 قناة و12 بت V1

كود أردوينو وفيديو لمتحكم السيرفو PCA9685 ذو 16 قناة و12 بت V1

في هذا الدرس، سنستعرض كيفية استخدام متحكم السرفو PCA9685 ذي 16 قناة وبدقة 12 بت من شركة NXP Semiconductor. تتيح لك هذه الوحدة التحكم بما يصل إلى 16 محرك سرفو أو تعتيم مجموعة من مصابيح LED بدقة باستخدام تعديل عرض النبضة (PWM). بنهاية هذا الدرس، سيكون لديك إعداد عملي قادر على التحكم في عدة محركات سرفو بشكل فردي أو بشكل متزامن.

PCA9685 module-0

لتوضيح محتوى الشرح بشكل أكبر، أشجعك على مشاهدة الفيديو المصاحب (في الفيديو عند 00:00) للحصول على عرض مرئي لعملية الإعداد والبرمجة.

شرح الأجهزة

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

تحتوي اللوحة على دبابيس مخصصة للطاقة (VCC) والأرضي (GND) والاتصال (SDA وSCL). يُستخدم دبوس SDA لنقل البيانات، بينما يمثل دبوس SCL إشارة الساعة، ويتصلان بالدبابيس التناظرية للأردوينو A4 وA5 على التوالي. يضمن هذا الإعداد تواصلاً موثوقاً بين الأردوينو ووحدة PCA9685.

تفاصيل ورقة البيانات

المصنّعإن إكس بي لأشباه الموصلات
رقم القطعةPCA9685
جهد المنطق/الإدخال/الإخراج3.3 V إلى 5.5 V
جهد التغذية2.3 V إلى 5.5 V
تيار الإخراج (لكل قناة)25 mA كحد أقصى
التيار الأقصى (لكل قناة)100 mA كحد أقصى
إرشادات تردد PWM24 هرتز إلى 1.6 كيلوهرتز
عتبات منطقية للإدخال0.3 V (منخفض) / 0.7 V (مرتفع)
هبوط الجهد / Rالمصرف-المصدر (عند التشغيل)/ التشبع0.5 فولت كحد أقصى
الحدود الحرارية-40 °C إلى 125 °C
حزمةHTSSOP-28
ملاحظات / متغيراتمتحكم PWM ذو 16 قناة

  • تأكد من وجود مصدر طاقة بقيمة 5 فولت وبتيار كافٍ (يوصى بتيار 1 أمبير).
  • لا تزود محركات السيرفو بالطاقة مباشرة من الأردوينو لتجنب التلف.
  • استخدم دبابيس I2C الصحيحة: SDA إلى A4 و SCL إلى A5.
  • عدل قيم عرض النبضة وفقًا للسرفوهات الخاصة بك.
  • افحص توصيل الأسلاك للتأكد من القطبية الصحيحة: GND وVCC والإشارة.
  • ضع في اعتبارك استخدام مشتت حراري للتطبيقات ذات التيار العالي.

تعليمات الأسلاك

Arduino wiring for PCA9685 to control 16 servo motors
Arduino wiring for PCA9685 to control 16 servo motors

لتوصيل PCA9685 بـ Arduino، ابدأ بتوصيل مصدر الطاقة والأرضي. وصل دبوس VCC في PCA9685 بمخرج 5V في الـ Arduino. ثم وصل دبوس GND في PCA9685 بالأرضي (GND) في الـ Arduino. بعد ذلك، وصل دبوس SDA في PCA9685 بالدبوس A4 في الـ Arduino، ودبوس SCL بالدبوس A5.

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

أمثلة برمجية وشرح تفصيلي

في قسم الإعداد في الشيفرة، نهيئ وحدة PCA9685 باستخدامpwm.begin()واضبط تردد PWM باستخدامpwm.setPWMFreq(60);. يحدد هذا تردد الاتصال لمحركات السيرفو.

void setup() {
  Serial.begin(9600);
  Serial.println("16 channel Servo test!");
  pwm.begin();
  pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
}

داخل الحلقة، نتحكم في محركات السرفو عن طريق ضبط قيم PWM المطابقة للزوايا المطلوبة. الدالةangleToPulse(int ang)يحوّل الزاوية إلى عرض نبضة مناسب، وهو أمر أساسي لتحقيق تموضع دقيق للسيرفو.

void loop() {
  for( int angle =0; angle<181; angle +=20){
    delay(500);
    pwm.setPWM(0, 0, angleToPulse(angle) );
  }
}

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

int angleToPulse(int ang){
   int pulse = map(ang,0, 180, SERVOMIN,SERVOMAX);
   Serial.print("Angle: ");Serial.print(ang);
   Serial.print(" pulse: ");Serial.println(pulse);
   return pulse;
}

عرض توضيحي / ما المتوقع

بمجرد توصيل كل شيء بشكل صحيح ورفع الكود، يجب أن ترى محرك السيرفو يتحرك عبر الزوايا المحددة بزيادات مقدارها 20 درجة. إذا لم يتصرف محرك السيرفو كما هو متوقع، فافحص الأسلاك للتأكد من الاتصالات الصحيحة وتأكد من أن مصدر الطاقة كافٍ (في الفيديو عند 12:30).

علامات زمنية للفيديو

  • 00:00- مقدمة عن PCA9685
  • 02:30- تعليمات الأسلاك
  • 05:00- استعراض الكود
  • 10:15- عرض توضيحي للتحكم في محرك السيرفو
  • 12:30- استكشاف الأخطاء الشائعة وإصلاحها

الصور

PCA9685 module-0
PCA9685 module-0
PCA9685 module-1
PCA9685 module-1
PCA9685 module-2
PCA9685 module-2
PCA9685 module-3
PCA9685 module-3
PCA9685 module
PCA9685 module
Arduino wiring for PCA9685 to control 16 servo motors
Arduino wiring for PCA9685 to control 16 servo motors
36-Resources for this sketch
اللغة: C++
37-PCA6985 16-channel 12-bit servo controller, simple code
اللغة: C++
تم النسخ!

الموارد والمراجع

لا توجد موارد حتى الآن.

ملفات📁

لا توجد ملفات متاحة.