Le module Contrôleur PCA9685 pour Arduino et d'autres plates-formes est une solution largement utilisée lorsque vous devez contrôler plusieurs appareils fonctionnant avec des signaux PWM. Bien qu'il ait été initialement conçu pour contrôler les LED, sa polyvalence lui a permis d'être également une option fréquente pour contrôler les servos. Cette puce est extrêmement populaire dans les projets de robotique et d'automatisation pour sa capacité à contrôler plusieurs appareils avec précision et simplicité.
Cet article vous montrera non seulement comment utiliser le PCA9685 en combinaison avec Arduino et d'autres microcontrôleurs, mais détaillera également chacun des aspects techniques que vous devez connaître pour tirer le meilleur parti de ce composant. Nous allons tout expliquer, de la façon de le connecter à la façon de gérer les bibliothèques de codes afin que vous puissiez contrôler vos moteurs et servos en toute simplicité.
Qu'est-ce que le PCA9685 et à quoi sert-il ?
El PCA9685 est un contrôleur PWM (Pulse width Modulation) conçu pour gérer jusqu'à 16 sorties, idéal pour contrôler les lumières LED et les servomoteurs. Il communique via le bus I2C, ce qui signifie qu'il n'a besoin que de deux broches pour se connecter à un microcontrôleur tel qu'un Arduino ou un Raspberry Pi. Grâce à l'utilisation d'adresses spécifiques, vous pouvez même connecter jusqu'à 62 de ces modules au même bus I2C, contrôlant environ 992 sorties PWM. Cela en fait une option très puissante pour les projets nécessitant la gestion de nombreux appareils de manière coordonnée.
L'utilisation la plus répandue de PCA9685 C'est dans les projets où un signal PWM est nécessaire. Un exemple clair est le contrôle des servos, qui sont contrôlés à partir de signaux PWM. De plus, le contrôleur a une précision de 12, ce qui lui permet de générer des signaux très fins, avec une fréquence réglable jusqu'à un maximum de 1600 Hz.
Caractéristiques et avantages du PCA9685
L'un des principaux avantages de PCA9685 est que cela soulage le microcontrôleur en termes de génération constante de signaux PWM. Ceci est particulièrement utile dans les projets impliquant le contrôle de nombreux appareils, car cela permet au processeur principal de se concentrer sur d'autres tâches.
- 16 chaînes indépendantes: Chacun des 16 canaux peut émettre un signal PWM indépendant, vous permettant de contrôler des appareils tels que des servos, des moteurs et des lumières LED.
- Contrôle I2C: Le PCA9685 utilise une interface I2C pour communiquer avec le contrôleur principal (Arduino, Raspberry Pi, etc.), et ne nécessite que deux câbles pour la communication (SDA et SCL).
- Plusieurs modules sur un seul bus: Jusqu'à 62 modules PCA9685 peuvent être connectés sur le même bus I2C, contrôlant jusqu'à 992 sorties PWM.
- Fréquence réglable: Prend en charge des fréquences jusqu'à 1600 50 Hz, bien qu'une fréquence de 60 à XNUMX Hz soit utilisée pour une servocommande typique.
Connexion entre Arduino et PCA9685
Le lien entre Module PCA9685 et un Arduino est simple et se fait en utilisant les broches I2C (SCL et SDA) et les broches d'alimentation. Le tableau suivant spécifie les connexions typiques pour différents modèles Arduino :
Broche PCA9685 | Arduino Uno/Frère aîné | Mega Arduino | Arduino Leonardo |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
SCL | A5 | 21 | 3 |
SDA | A4 | 20 | 2 |
Dans cette configuration, les broches A4 et A5 ou leurs équivalents sur la plateforme correspondante, connectez-vous aux broches SDA (données) et SCL (horloge) du module PCA9685. De plus, il est important de disposer d'une alimentation externe appropriée pour les servomoteurs, surtout si vous connectez plusieurs servos, car l'Arduino ne fournit pas suffisamment de courant pour les piloter correctement.
Il est recommandé d'utiliser un Alimentation 5V pour alimenter les servos et assurez-vous de connecter correctement les broches d'alimentation. Si vous utilisez plus de 16 servos, il est également recommandé de souder un condensateur de 1000uF sur la carte pour stabiliser la puissance.
Configuration en code
Afin de gérer les sorties PWM du PCA9685, une bibliothèque développée par Adafruit est utilisée. Vous pouvez le télécharger depuis votre page GitHub. Nous vous montrons ici un exemple de base pour configurer le module et déplacer 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); }
Ce code simple effectue un mouvement de balayage sur le servo connecté au canal 0, le faisant passer lentement de 0 degrés à 180 degrés. Vous pouvez utiliser la fonction setPWM() pour contrôler chacune des sorties du PCA9685 indépendamment.
Déplacer plusieurs servos en même temps
Un des grands avantages de PCA9685 est qu'il vous permet de contrôler plusieurs servos simultanément. Voici comment déplacer plusieurs servomoteurs vers différentes positions au sein du même cycle de code :
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); }
Dans ce cas, nous définissons une fonction appelée setServo qui reçoit le numéro de servo et son angle comme paramètres, calcule la largeur d'impulsion appropriée et la déplace vers la position souhaitée. De cette façon, vous pouvez facilement contrôler plusieurs canaux.
Comment définir des limites pour différents servos
Tous les servos n'ont pas la même plage de valeurs pour les angles de 0° à 180°. Dans certains cas, vous devrez ajuster ces valeurs de manière personnalisée. Voici comment effectuer ces réglages pour différents 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); }
Ce code vous permet d'ajuster les valeurs minimales et maximales pour chaque servo connecté au PCA9685, ce qui sera extrêmement utile si vous utilisez des servos avec des plages de signaux différentes.
Avec tout cela à l'esprit, vous disposez désormais de tout ce dont vous avez besoin pour configurer, connecter et coder votre premier projet à l'aide du PCA9685. Que vous travailliez sur un robot doté de plusieurs degrés de liberté ou que vous ayez besoin de contrôler plusieurs appareils en parallèle, ce module vous permettra de le faire de manière efficace et précise.
Que vous travailliez avec des servos ou des sorties PWM, le PCA9685 permet de contrôler très facilement jusqu'à 16 canaux en utilisant seulement deux broches de votre microcontrôleur. Avec un peu d'expérience et un bon code, vous pouvez créer des applications très puissantes sans surcharger le processeur principal.