Sommaire
Introduction
Le PCA9685 est une puce conçue pour contrôler jusqu’à 16 servomoteurs (MG995, MG996R, SG90, etc…) simultanément via une communication I2C. Elle est intégrée à des cartes shield facilitant le branchement des servomoteurs et compatibles avec des microcontrôleurs comme Arduino, ESP32 et Raspberry Pi.
Dans ce tutoriel, vous apprendrez à utiliser le PCA9685 pour piloter des servomoteurs, que ce soit pour un projet de robotique, d’automatisation ou toute autre application nécessitant un contrôle précis des moteurs. Nous verrons comment connecter le module, modifier son adresse I2C et ajuster les positions des servos grâce à un microcontrôleur.
Les cartes dotées de la puce PCA9685
Présentation
Les cartes dotées de la puce PCA9685 utilisent le protocole de communication I2C. Chaque carte possède une adresse I2C unique (0x40 en hexadécimal par défaut) permettant de recevoir des instructions depuis un microcontrôleur (Arduino, ESP32, Raspberry Pi, etc.). Ces instructions concernent :
- La sélection du connecteur du servomoteur (de 0 à 15).
- Le sens de rotation du servomoteur.
- L’angle de rotation du servomoteur compris entre 0 et 180 degrés.
Il est possible de connecter plusieurs modules PCA9685 grâce au protocole I2C pour gérer jusqu’à 992 servomoteurs (avec un total de 62 modules PCA9685). Pour cela, il faut modifier l’adresse I2C de chaque module en effectuant une brasure sur le sélecteur d’adresse.
La carte Contrôleur de servomoteurs 16 canaux I2C PCA9685.
Le module PCA9685 comprend plusieurs connecteurs pour brancher les servomoteurs :
PWM (Jaune) <-> Fil Orange ou Blanc *
V+ (Rouge) <-> Fil Rouge
GND (Noir) <-> Fil Marron ou Noir *
(* Selon les constructeurs, les couleurs des fils peuvent varier.)
La Carte Shield PCA9685 servomoteurs pour Arduino UNO
- Bornier d’alimentation des servomoteurs
- Connecteurs pour les servomoteurs (mêmes branchements que le module PCA9685).
- PWM <-> Fil Orange ou Blanc *
- V+ <-> Fil Rouge
- GND <-> Fil Marron ou Noir *
- Bouton Reset
- Sélection adresse I2C
- Puce PCA9685
Zone de prototypage pour des modifications personnalisées.
* Selon les constructeurs, les fils de PWM et GND peuvent varier d’un servomoteur à un autre.
La sélection d'adresse I2C
Le PCA9685 utilise une adresse I2C par défaut de 0x40. Pour utiliser plusieurs modules simultanément, il est nécessaire de leur attribuer des adresses distinctes en modifiant le sélecteur d’adresse.
Le sélecteur est composé de 6 broches (A0 à A5). Chaque signal est scindé en 2 broches, que l’on appellera “Partie 1” et “Partie 2”.
Pour modifier l’adresse du module PCA9685, il suffit de relier ces deux parties par une brasure sur un ou plusieurs signaux :
Voici quelques exemples de configurations :
Une brasure sur A0 attribue l’adresse 0x41.
Une brasure sur A1 attribue l’adresse 0x42.
Une brasure sur A0 et A1 attribue l’adresse 0x43.
Cette modification permet d’éviter les conflits d’adresses lorsque plusieurs modules PCA9685 sont connectés sur le même bus I2C.
Le montage avec une carte Arduino UNO
Branchement du module PCA9685 avec une carte Arduino UNO
Matériel requis
Carte Arduino UNO
Carte Contrôleur de servomoteurs 16 Canaux I2C PCA9685
Câbles dupont Mâle – Femelle 10cm ou 20cm
Câble USB pour Arduino UNO
Les servomoteurs doivent être alimentés entre 5V et 7.4V maximum.
Connexions Arduino UNO <-> Module PCA9685 I2C :
- 5V <-> VCC
- GND <-> GND
- A4 <-> SDA
- A5 <-> SCL
Le montage de la carte Shield servomoteurs I2C PCA9685 pour Arduino UNO
Matériel requis
- Carte Arduino UNO REV3
- Carte shield I2C PCA9685 16 canaux compatible Arduino UNO
- Câble USB pour Arduino UNO
-
Carte UNO R3 – Microcontrôleur ATmega328 avec USB Type-C – Compatible Arduino
7,99 €
Vous économisez Ajouter au panier -
Lot de 40 Câbles Dupont mâle-femelle de 10cm / 20cm / 30cm pour Arduino
3,99 €
Vous économisez Choix des options Ce produit a plusieurs variations. Les options peuvent être choisies sur la page du produit -
Shield Servo I2C PCA9685 pour Arduino/Raspberry Pi – Gestion de 16 Servomoteurs
13,99 €
Vous économisez Ajouter au panier
Le code Arduino
Installation de la bibliothèque
Avant de commencer, vous devez installer la bibliothèque Adafruit PWM Servo dans l’IDE Arduino. Cette bibliothèque permet à votre carte Arduino UNO de communiquer avec la puce PCA9685 présente sur le module ou le shield I2C 16 servomoteurs.
Étapes d’installation :
Télécharger la bibliothèque au format ZIP depuis Adafruit PWM Servo.
Ouvrir l’IDE Arduino et aller dans Croquis > Inclure une Bibliothèque > Ajouter la Bibliothèque .ZIP.
Sélectionner le fichier ZIP précédemment téléchargé et cliquer sur Ouvrir.
La bibliothèque s’installe automatiquement et est prête à être utilisée.
#include
#include
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver( 0x40 );
// valeurs approximatives qui peuvent varier d'un servomoteur à l'autre:
#define SERVOMIN 150 // Position minimale
#define SERVOMAX 600 // Position maximale
//Création des variables Servomoteurs
uint8_t servo0 = 0; //Pour le connecteur 0 du module ou du shield PCA9685
uint8_t servo1 = 1; //Pour le connecteur 1 du module ou du shield PCA9685
uint8_t servo2 = 2; //Pour le connecteur 2 du module ou du shield PCA9685
int pulseLen;//Angle de positionnement du servomoteur entre 0 et 180 degrés
void setup() {
pwm.begin(); //Initialisation de la liaison I2C
pwm.setPWMFreq(60);//Fréquence du signal PWM
delay(1000);
}
void loop() {
pulseLen = map( 10, 0, 180, SERVOMIN, SERVOMAX );//Angle à 10 degrés
pwm.setPWM(servo0, 0, pulseLen); //Positionnement du Servomoteur 0 à 10 degrés
delay(2000);
pulseLen = map( 123, 0, 180, SERVOMIN, SERVOMAX );//Angle à 123 degrés
pwm.setPWM(servo1, 0, pulseLen);//Positionnement du Servomoteur 1 à 123 degrés
delay(2000);
pulseLen = map( 160, 0, 180, SERVOMIN, SERVOMAX );//Angle à 160 degrés
pwm.setPWM(servo2, 0, pulseLen); //Positionnement du Servomoteur 2 à 160 degrés
pwm.setPWM(servo1, 0, pulseLen);//Positionnement du Servomoteur 1 à 160 degrés
delay(2000);
pulseLen = map( 98, 0, 180, SERVOMIN, SERVOMAX );//Angle à 98 degrés
pwm.setPWM(servo0, 0, pulseLen); //Positionnement du Servomoteur 0 à 98 degrés
delay(2000);
pulseLen = map( 30, 0, 180, SERVOMIN, SERVOMAX );//Angle à 30 degrés
pwm.setPWM(servo2, 0, pulseLen); //Positionnement du Servomoteur 2 à 30 degrés
delay(2000);
}
Conclusion
Avec ce tutoriel, vous avez appris à connecter et programmer le module PCA9685 pour piloter plusieurs servomoteurs via une carte Arduino UNO. Vous savez maintenant comment modifier son adresse I2C et envoyer des commandes pour ajuster les angles des servos.
Cette solution est idéale pour des projets de robotique et d’automatisation, et peut être étendue à plusieurs modules PCA9685 pour gérer encore plus de servomoteurs.
Bon codage !