وحدة وحدة تحكم PCA9685 لاردوينو والأنظمة الأساسية الأخرى هي حل مستخدم على نطاق واسع عندما تحتاج إلى التحكم في العديد من الأجهزة التي تعمل بإشارات PWM. على الرغم من أنه تم تصميمه في البداية للتحكم في مصابيح LED، إلا أن تعدد استخداماته سمح له أيضًا بأن يكون خيارًا متكررًا للتحكم في الماكينات. تحظى هذه الشريحة بشعبية كبيرة في مشاريع الروبوتات والأتمتة لقدرتها على التحكم في أجهزة متعددة بدقة وبساطة.
لن توضح لك هذه المقالة كيفية استخدام PCA9685 مع Arduino ووحدات التحكم الدقيقة الأخرى فحسب، بل ستوضح لك أيضًا بالتفصيل كل جانب من الجوانب التقنية التي تحتاج إلى معرفتها لتحقيق أقصى استفادة من هذا المكون. سنشرح كل شيء بدءًا من كيفية توصيله وحتى كيفية إدارة مكتبات الأكواد حتى تتمكن من التحكم في المحركات والماكينات الخاصة بك بسهولة تامة.
ما هو PCA9685 وما هو استخدامه؟
El PCA9685 عبارة عن وحدة تحكم PWM (تعديل عرض النبض) مصممة لإدارة ما يصل إلى 16 مخرجًا، وهي مثالية للتحكم في مصابيح LED والمحركات المؤازرة. فهو يتواصل عبر ناقل I2C، مما يعني أنه يحتاج فقط إلى طرفين للاتصال بوحدة تحكم دقيقة مثل Arduino أو Raspberry Pi. من خلال استخدام عناوين محددة، يمكنك حتى توصيل ما يصل إلى 62 من هذه الوحدات بنفس ناقل I2C، والتحكم في حوالي 992 مخرج PWM. وهذا يجعله خيارًا قويًا جدًا للمشاريع التي تتطلب إدارة العديد من الأجهزة بطريقة منسقة.
الاستخدام الأكثر انتشارًا PCA9685 إنه موجود في المشاريع التي تحتاج إلى إشارة PWM. ومن الأمثلة الواضحة على ذلك التحكم في الماكينات التي يتم التحكم فيها من خلال إشارات PWM. بالإضافة إلى ذلك، وحدة التحكم لديها دقة 12 بت، مما يسمح لها بتوليد إشارات دقيقة جدًا، بتردد قابل للتعديل يصل إلى 1600 هرتز كحد أقصى.
ميزات وفوائد PCA9685
واحدة من المزايا الرئيسية لـ PCA9685 هو أنه يزيل العبء عن المتحكم الدقيق فيما يتعلق بتوليد إشارات PWM باستمرار. وهذا مفيد بشكل خاص في المشاريع التي تتضمن التحكم في العديد من الأجهزة، لأنه يسمح للمعالج الرئيسي بالتركيز على المهام الأخرى.
- 16 قناة مستقلة: يمكن لكل قناة من القنوات الـ 16 إخراج إشارة PWM مستقلة، مما يسمح لك بالتحكم في الأجهزة مثل الماكينات والمحركات ومصابيح LED.
- التحكم في I2C: يستخدم PCA9685 واجهة I2C للتواصل مع وحدة التحكم الرئيسية (Arduino، Raspberry Pi، وما إلى ذلك)، ولا يتطلب سوى كابلين للاتصال (SDA وSCL).
- وحدات متعددة في حافلة واحدة: يمكن توصيل ما يصل إلى 62 وحدة PCA9685 على نفس ناقل I2C، والتحكم في ما يصل إلى 992 مخرج PWM.
- تردد قابل للتعديل: يدعم ترددات تصل إلى 1600 هرتز، على الرغم من استخدام تردد 50-60 هرتز للتحكم المؤازر النموذجي.
اتصال بين اردوينو وPCA9685
العلاقة بين وحدة PCA9685 واردوينو بسيط، ويتم تنفيذه باستخدام منافذ I2C (SCL وSDA) ومنافذ الطاقة. يحدد الجدول التالي التوصيلات النموذجية لنماذج Arduino المختلفة:
دبوس PCA9685 | Arduino Uno/نانو | ميجا اردوينو | اردوينو ليوناردو |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
SCL | A5 | 21 | 3 |
SDA | A4 | 20 | 2 |
في هذا التكوين، دبابيس A4 و A5 أو ما يعادلها على النظام الأساسي المقابل، قم بالاتصال بدبابيس SDA (البيانات) وSCL (الساعة) الخاصة بوحدة PCA9685. بالإضافة إلى ذلك، من المهم أن يكون لديك مصدر طاقة خارجي مناسب لمحركات السيرفو، خاصة إذا كنت تقوم بتوصيل عدة سيرفو، حيث أن Arduino لا يوفر تيارًا كافيًا لتشغيلها بشكل صحيح.
يوصى باستخدام أ إمدادات 5V لتشغيل الماكينات، وتأكد من توصيل دبابيس الطاقة بشكل صحيح. إذا كنت تستخدم أكثر من 16 سيرفو، فمن المستحسن أيضًا لحام مكثف 1000 فائق التوهج على اللوحة لتحقيق استقرار الطاقة.
التكوين في الكود
من أجل إدارة مخرجات PWM لـ PCA9685، يتم استخدام مكتبة طورتها Adafruit. يمكنك تنزيله من صفحة GitHub الخاصة بك. نعرض لك هنا مثالًا أساسيًا لتكوين الوحدة وتحريك المؤازرة:
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(); void setup() { servos.begin(); servos.setPWMFreq(60); // Configura la frecuencia PWM a 60Hz } void loop() { servos.setPWM(0, 0, 172); // Mueve el servo del canal 0 a la posición 0 grados delay(1000); servos.setPWM(0, 0, 565); // Mueve el servo a la posición 180 grados delay(1000); }
يقوم هذا الكود البسيط بتنفيذ حركة مسح على المؤازرة المتصلة بالقناة 0، حيث يأخذها من 0 درجة إلى 180 درجة ببطء. يمكنك استخدام الوظيفة مجموعةPWM() للتحكم في كل من مخرجات PCA9685 بشكل مستقل.
نقل العديد من الماكينات في نفس الوقت
واحدة من المزايا العظيمة لـ PCA9685 هو أنه يسمح لك بالتحكم في العديد من الماكينات في وقت واحد. إليك كيفية نقل محركات مؤازرة متعددة إلى مواضع مختلفة خلال نفس دورة التعليمات البرمجية:
void loop() { setServo(0, 30); setServo(2, 90); setServo(4, 180); delay(1000); } void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, 172, 565); servos.setPWM(n_servo, 0, duty); }
في هذه الحالة، نحدد دالة تسمى setServo الذي يستقبل رقم المؤازرة وزاويته كمعلمات، ويحسب عرض النبضة المناسب وينقله إلى الموضع المطلوب. بهذه الطريقة يمكنك التحكم بسهولة في قنوات متعددة.
كيفية وضع حدود للماكينات المختلفة
ليست كل الماكينات لها نفس نطاق القيم للزوايا من 0 درجة إلى 180 درجة. في بعض الحالات، سيتعين عليك ضبط هذه القيم بشكل مخصص. إليك كيفية إجراء هذه الإعدادات لخوادم مختلفة:
unsigned int pos0[16]= {172, 256, 246, 246, 246, 172, 246, 200}; unsigned int pos180[16]= {565, 492, 492, 492, 492, 565, 492, 550}; void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, pos0[n_servo], pos180[n_servo]); servos.setPWM(n_servo, 0, duty); }
يتيح لك هذا الرمز ضبط الحد الأدنى والحد الأقصى للقيم لكل أجهزة متصلة بـ PCA9685، الأمر الذي سيكون مفيدًا للغاية إذا كنت تستخدم أجهزة ذات نطاقات إشارة مختلفة.
مع وضع كل هذا في الاعتبار، لديك الآن كل ما تحتاجه لإعداد مشروعك الأول وتوصيله وترميزه باستخدام PCA9685. سواء كنت تعمل على روبوت يتمتع بدرجات متعددة من الحرية، أو تحتاج إلى التحكم في العديد من الأجهزة بالتوازي، فإن هذه الوحدة ستسمح لك بالقيام بذلك بكفاءة ودقة.
سواء كنت تعمل مع الماكينات أو مخرجات PWM، فإن PCA9685 يجعل من السهل جدًا التحكم في ما يصل إلى 16 قناة باستخدام دبوسين فقط على وحدة التحكم الدقيقة الخاصة بك. مع قليل من الخبرة والتعليمات البرمجية الجيدة، يمكنك إنشاء تطبيقات قوية جدًا دون زيادة التحميل على المعالج الرئيسي.