Guía completa: Controlador PCA9685 con Arduino y más

  • El PCA9685 es un controlador de PWM de 16 canales que se comunica mediante I2C.
  • Puede controlar tanto luces LED como servos y su frecuencia es ajustable hasta 1600 Hz.
  • Es posible conectar hasta 62 módulos en un mismo bus I2C, alcanzando 992 salidas PWM controlables.
  • El uso de librerías como la de Adafruit simplifica el trabajo con este componente en plataformas como Arduino.

pca9685

El módulo controlador PCA9685 para Arduino y otras plataformas es una solución ampliamente utilizada cuando se necesita controlar varios dispositivos que operan con señales PWM. Aunque inicialmente fue concebido para controlar LEDs, su versatilidad ha permitido que también sea una opción frecuente para el control de servos. Este chip es extremadamente popular en proyectos de robótica y automatización por su capacidad de controlar múltiples dispositivos con precisión y simplicidad.

Este artículo no solo te mostrará cómo utilizar el PCA9685 en combinación con Arduino y otros microcontroladores, sino que también detallará cada uno de los aspectos técnicos que necesitas conocer para aprovechar al máximo este componente. Vamos a explicarlo todo desde cómo conectarlo hasta cómo manejar librerías de código para que puedas controlar tus motores y servos con total facilidad.

¿Qué es el PCA9685 y para qué se utiliza?

pca9685 pin-out

El PCA9685 es un controlador PWM (Pulse Width Modulation) diseñado para gestionar hasta 16 salidas, ideal para controlar luces LED y servomotores. Se comunica mediante el bus I2C, lo que significa que únicamente necesita dos pines para conectarse a un microcontrolador como Arduino o Raspberry Pi. A través del uso de direcciones específicas, puedes incluso conectar hasta 62 de estos módulos al mismo bus I2C, logrando controlar cerca de 992 salidas PWM. Esto lo convierte en una opción muy potente para proyectos que requieran gestionar muchos dispositivos de forma coordinada.

El uso más extendido del PCA9685 es en proyectos donde se necesita una señal PWM. Un ejemplo claro es el control de servos, los cuales se manejan a partir de señales de PWM. Además, el controlador tiene una precisión de 12 bits, lo que le permite generar señales muy finas, con frecuencia ajustable hasta un máximo de 1600 Hz.

Rebajas ARCELI 16 Canales...
ARCELI 16 Canales...
No hay valoraciones

Características y ventajas del PCA9685

Una de las principales ventajas del PCA9685 es que quita la carga del microcontrolador en cuanto a la generación constante de señales PWM. Esto es especialmente útil en proyectos que implican el control de muchos dispositivos, ya que permite que el procesador principal se enfoque en otras tareas.

  • 16 canales independientes: Cada uno de los 16 canales puede emitir una señal PWM independiente, lo que permite controlar dispositivos como servos, motores y luces LED.
  • Control I2C: El PCA9685 utiliza una interfaz I2C para comunicarse con el controlador principal (Arduino, Raspberry Pi, etc.), y solo requiere dos cables para la comunicación (SDA y SCL).
  • Múltiples módulos en un solo bus: Se pueden conectar hasta 62 módulos PCA9685 en el mismo bus I2C, logrando controlar hasta 992 salidas PWM.
  • Frecuencia ajustable: Soporta frecuencias de hasta 1600 Hz, aunque para el control de servos típicos se usa una frecuencia de 50-60 Hz.

Conexión entre Arduino y PCA9685

Arduino PCA9685

La conexión entre el módulo PCA9685 y un Arduino es sencilla, y se realiza mediante los pines I2C (SCL y SDA) y los pines de alimentación. En la siguiente tabla se especifican las conexiones típicas para varios modelos de Arduino:

Pin PCA9685 Arduino Uno/Nano Arduino Mega Arduino Leonardo
GND GND GND GND
5V 5V 5V 5V
SCL A5 21 3
SDA A4 20 2

En esta configuración, los pines A4 y A5 o sus equivalentes en la plataforma correspondiente, se conectan a los pines SDA (datos) y SCL (reloj) del módulo PCA9685. Además, es importante contar con una fuente de alimentación externa adecuada para los servomotores, especialmente si estás conectando múltiples servos, ya que el Arduino no proporciona suficiente corriente para manejarlos correctamente.

Se recomienda usar una fuente de 5V para alimentar los servos, y asegúrate de conectar adecuadamente los pines de alimentación. Si usas más de 16 servos, también se recomienda soldar un condensador de 1000uF en la placa para estabilizar la alimentación.

Configuración en el código

Para poder gestionar las salidas PWM del PCA9685, se utiliza una librería desarrollada por Adafruit. Puedes descargarla desde su página de GitHub. Aquí te mostramos un ejemplo básico para configurar el módulo y mover un 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); }

Este simple código realiza un movimiento de barrido en el servo conectado al canal 0, llevándolo de 0 grados a 180 grados lentamente. Puedes usar la función setPWM() para controlar cada una de las salidas del PCA9685 de manera independiente.

Moviendo varios servos a la vez

Una de las grandes ventajas del PCA9685 es que te permite controlar varios servos simultáneamente. A continuación te mostramos cómo puedes mover varios servomotores a distintas posiciones dentro del mismo ciclo de código:

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); }

En este caso, definimos una función llamada setServo que recibe como parámetros el número de servo y su ángulo, calculando el ancho de pulso apropiado y moviéndolo a la posición deseada. Así podrás controlar fácilmente varios canales.

Cómo ajustar los límites para distintos servos

No todos los servos tienen el mismo rango de valores para los ángulos de 0° a 180°. En algunos casos, tendrás que ajustar estos valores de forma personalizada. A continuación te mostramos cómo puedes hacer estos ajustes para distintos servos:

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); }

Este código permite ajustar los valores de mínimo y máximo para cada servo conectado al PCA9685, lo que será sumamente útil si usas servos con distintos intervalos de señal.

Con todo esto en mente, ya tienes todo lo necesario para configurar, conectar y codificar tu primer proyecto utilizando el PCA9685. Ya sea que estés trabajando en un robot con múltiples grados de libertad, o necesites controlar muchos dispositivos en paralelo, este módulo te permitirá hacerlo de manera eficiente y precisa.

Ya sea que estés trabajando con servos o salidas PWM, el PCA9685 facilita enormemente el control de hasta 16 canales utilizando solo dos pines de tu microcontrolador. Con un poco de experiencia y un buen código, puedes crear aplicaciones muy potentes sin sobrecargar el procesador principal.


Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.