Modul Pengontrol PCA9685 untuk Arduino dan platform lainnya adalah solusi yang banyak digunakan ketika Anda perlu mengontrol beberapa perangkat yang beroperasi dengan sinyal PWM. Meskipun awalnya dirancang untuk mengontrol LED, keserbagunaannya memungkinkannya juga menjadi pilihan umum untuk mengendalikan servo. Chip ini sangat populer dalam proyek robotika dan otomasi karena kemampuannya mengendalikan banyak perangkat dengan presisi dan sederhana.
Artikel ini tidak hanya akan menunjukkan kepada Anda cara menggunakan PCA9685 yang dikombinasikan dengan Arduino dan mikrokontroler lainnya, tetapi juga akan merinci setiap aspek teknis yang perlu Anda ketahui untuk mendapatkan hasil maksimal dari komponen ini. Kami akan menjelaskan semuanya mulai dari cara menghubungkannya hingga cara mengelola pustaka kode sehingga Anda dapat mengontrol motor dan servo Anda dengan mudah.
Apa itu PCA9685 dan kegunaannya?
El PCA9685 adalah pengontrol PWM (Modulasi Lebar Pulsa) yang dirancang untuk mengelola hingga 16 output, ideal untuk mengendalikan lampu LED dan motor servo. Ia berkomunikasi melalui bus I2C, yang berarti hanya membutuhkan dua pin untuk terhubung ke mikrokontroler seperti Arduino atau Raspberry Pi. Melalui penggunaan alamat tertentu, Anda bahkan dapat menghubungkan hingga 62 modul ini ke bus I2C yang sama, mengendalikan sekitar 992 output PWM. Hal ini menjadikannya pilihan yang sangat kuat untuk proyek yang memerlukan pengelolaan banyak perangkat secara terkoordinasi.
Penggunaan yang paling luas PCA9685 Ini adalah proyek yang memerlukan sinyal PWM. Contoh yang jelas adalah pengendalian servo, yang dikendalikan dari sinyal PWM. Selain itu, pengontrol memiliki akurasi 12 bit, yang memungkinkannya menghasilkan sinyal yang sangat halus, dengan frekuensi yang dapat disesuaikan hingga maksimum 1600 Hz.
Fitur dan manfaat PCA9685
Salah satu keuntungan utama dari PCA9685 adalah menghilangkan beban mikrokontroler dalam hal menghasilkan sinyal PWM secara konstan. Hal ini sangat berguna dalam proyek yang melibatkan pengendalian banyak perangkat, karena memungkinkan prosesor utama untuk fokus pada tugas lain.
- 16 saluran independen: Masing-masing dari 16 saluran dapat mengeluarkan sinyal PWM independen, memungkinkan Anda mengontrol perangkat seperti servo, motor, dan lampu LED.
- kendali I2C: PCA9685 menggunakan antarmuka I2C untuk berkomunikasi dengan pengontrol utama (Arduino, Raspberry Pi, dll.), dan hanya membutuhkan dua kabel untuk komunikasi (SDA dan SCL).
- Beberapa modul dalam satu bus: Hingga 62 modul PCA9685 dapat dihubungkan pada bus I2C yang sama, mengendalikan hingga 992 output PWM.
- Frekuensi yang dapat disesuaikan: Mendukung frekuensi hingga 1600 Hz, meskipun frekuensi 50-60 Hz digunakan untuk kontrol servo tipikal.
Koneksi antara Arduino dan PCA9685
Hubungan antara Modul PCA9685 dan Arduino sederhana, dan dilakukan dengan menggunakan pin I2C (SCL dan SDA) dan pin daya. Tabel berikut menentukan koneksi khas untuk berbagai model Arduino:
Sematkan PCA9685 | Arduino Uno/Kakak | arduino mega | arduino leonardo |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
SCL | A5 | 21 | 3 |
SDA | A4 | 20 | 2 |
Dalam konfigurasi ini, pin A4 dan A5 atau yang setara pada platform yang sesuai, sambungkan ke pin SDA (data) dan SCL (jam) pada modul PCA9685. Selain itu, penting untuk memiliki catu daya eksternal yang sesuai untuk motor servo, terutama jika Anda menghubungkan beberapa servo, karena Arduino tidak menyediakan arus yang cukup untuk menggerakkannya dengan benar.
Disarankan untuk menggunakan a pasokan 5V untuk memberi daya pada servo, dan pastikan Anda menyambungkan pin daya dengan benar. Jika Anda menggunakan lebih dari 16 servo, disarankan juga untuk menyolder kapasitor 1000uF di papan untuk menstabilkan daya.
Konfigurasi dalam kode
Untuk mengelola output PWM dari PCA9685, perpustakaan yang dikembangkan oleh Adafruit digunakan. Anda dapat mengunduhnya dari halaman GitHub Anda. Di sini kami tunjukkan contoh dasar untuk mengkonfigurasi modul dan memindahkan servo:
#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); }
Kode sederhana ini melakukan gerakan sapuan pada servo yang terhubung ke saluran 0, membawanya dari 0 derajat hingga 180 derajat secara perlahan. Anda dapat menggunakan fungsinya setPWM() untuk mengontrol setiap output PCA9685 secara independen.
Memindahkan beberapa servo secara bersamaan
Salah satu keuntungan besar dari PCA9685 adalah memungkinkan Anda mengontrol beberapa servo secara bersamaan. Inilah cara Anda dapat memindahkan beberapa motor servo ke posisi berbeda dalam siklus kode yang sama:
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); }
Dalam hal ini, kita mendefinisikan suatu fungsi yang disebut setServo yang menerima nomor servo dan sudutnya sebagai parameter, menghitung lebar pulsa yang sesuai dan memindahkannya ke posisi yang diinginkan. Dengan cara ini Anda dapat dengan mudah mengontrol banyak saluran.
Cara menetapkan batasan untuk servo yang berbeda
Tidak semua servo memiliki rentang nilai sudut yang sama dari 0° hingga 180°. Dalam beberapa kasus, Anda harus menyesuaikan nilai-nilai ini secara khusus. Inilah cara Anda membuat pengaturan ini untuk servo yang berbeda:
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); }
Kode ini memungkinkan Anda untuk menyesuaikan nilai minimum dan maksimum untuk setiap servo yang terhubung ke PCA9685, yang akan sangat berguna jika Anda menggunakan servo dengan rentang sinyal berbeda.
Dengan mempertimbangkan semua ini, Anda sekarang memiliki semua yang Anda perlukan untuk mengatur, menghubungkan, dan membuat kode proyek pertama Anda menggunakan PCA9685. Baik Anda mengerjakan robot dengan berbagai derajat kebebasan, atau perlu mengontrol banyak perangkat secara paralel, modul ini akan memungkinkan Anda melakukannya secara efisien dan akurat.
Baik Anda bekerja dengan servo atau output PWM, PCA9685 membuatnya sangat mudah untuk mengontrol hingga 16 saluran hanya dengan menggunakan dua pin pada mikrokontroler Anda. Dengan sedikit pengalaman dan kode yang bagus, Anda dapat membuat aplikasi yang sangat kuat tanpa membebani prosesor utama secara berlebihan.