Utilisation du Contrôleur de servomoteurs I2C PCA9685

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.

Présentation du contrôleur 16 servos i2c pour Arduino et Raspberry Pi
Présentation du contrôleur 16 servos i2c pour Arduino et Raspberry Pi

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

Pinout shield I2C PCA9685 pour arduino UNO
Présentation du shield I2C servomoteurs PCA9685 pour Arduino UNO
  1. Bornier d’alimentation des servomoteurs
  2. Connecteurs pour les servomoteurs (mêmes branchements que le module PCA9685).
    • PWM <-> Fil Orange ou Blanc *
    • V+ <-> Fil Rouge
    • GND <-> Fil Marron ou Noir *
  3. Bouton Reset
  4. Sélection adresse I2C
  5. Puce PCA9685
  6. 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”.

Sélection d'adresse I2C sur la carte 16 canaux I2C PCA9685
Sélection d'adresse I2C sur la carte 16 canaux I2C PCA9685
Selection d'adresse I2C de la carte Shield Servos pour Arduino UNO

Pour modifier l’adresse du module PCA9685, il suffit de relier ces deux parties par une brasure sur un ou plusieurs signaux :

Exemple de brasure pour modifier l'adresse I2C d'un contrôleur 16 canaux I2C PCA9685
Exemple de brasure pour modifier l'adresse I2C d'un contrôleur 16 canaux I2C PCA9685

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.

Gestion de plusieurs cartes 16 canaux I2C PCA9685 pour servomoteurs
Gestion de plusieurs cartes 16 canaux I2C PCA9685 pour servomoteurs

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

Connexion de la carte Contrôleur 16 canaux I2C PCA9685 avec une carte Arduino UNO
Connexion de la carte Contrôleur 16 canaux I2C PCA9685 avec une carte 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
Montage du shield I2C PCA9685 sur une carte Arduino UNO
Montage du shield I2C PCA9685 sur une carte Arduino UNO

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 :

  1. Télécharger la bibliothèque au format ZIP depuis Adafruit PWM Servo.

  2. Ouvrir l’IDE Arduino et aller dans Croquis > Inclure une Bibliothèque > Ajouter la Bibliothèque .ZIP.

  3. Sélectionner le fichier ZIP précédemment téléchargé et cliquer sur Ouvrir.

  4. La bibliothèque s’installe automatiquement et est prête à être utilisée.

				
					#include <Wire.h> 
#include <Adafruit_PWMServoDriver.h>

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 ! 

Bonjour ! 🌟 Rejoignez notre newsletter pour ne rien manquer.

Recevez nos offres spéciales et les derniers articles directement dans votre boîte de réception

Nous ne faisons pas de spam, promis ! Consultez notre politique de confidentialité pour en savoir plus.

Panier
Retour en haut

Projet sur mesure