Piloter des servos avec une carte PCA9685 et un Arduino Uno
Description :
Projet permettant de piloter plusieurs servomoteurs à l’aide d’une carte PWM PCA9685 connectée à un Arduino Uno.
La carte PCA9685 permet de contrôler jusqu’à 16 servos simultanément via une interface I2C, en libérant les broches PWM de l’Arduino. Chaque servo peut être positionné indépendamment grâce aux commandes envoyées par l’Arduino, offrant un contrôle précis et synchronisé.
Cette configuration est idéale pour des projets de robotique, bras articulés, animatronique ou tout système nécessitant la commande simultanée de plusieurs servomoteurs avec une grande précision et simplicité de câblage.
Prérequis :
- 1 x Carte Arduino Uno
- 1 x Carte PCA9685
- 3 x Servo numérique Sg90
- 1 x Breadboard
- Fils de connexion
Version IDE :
- Arduino IDE 2.3.5
Bibliothèque :
- Adafruit BusIO (version: 1.17.2 par Adafruit)
- Adafruit-PWM-Servo-Driver-Library-master (version: 3.0.2 par Adafruit)
Vidéo de démonstration :
Schéma de câblage :


Code :
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define MIN_PULSE_WIDTH 600
#define MAX_PULSE_WIDTH 2600
#define SERVO_FREQ 50
uint8_t servonum = 1;
void setup() {
Serial.begin(9600);
pwm.begin();
pwm.setOscillatorFrequency(27000000);
pwm.setPWMFreq(SERVO_FREQ);
delay(10);
}
void loop() {
pwm.setPWM(0, 0, setServoPulse(60));
pwm.setPWM(1, 0, setServoPulse(120));
pwm.setPWM(2, 0, setServoPulse(180));
delay(1000);
pwm.setPWM(0, 0, setServoPulse(0));
pwm.setPWM(1, 0, setServoPulse(0));
pwm.setPWM(2, 0, setServoPulse(0));
delay(1000);
}
int setServoPulse(int angle) {
int pulse_wide, analog_value;
pulse_wide = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
analog_value = int(float(pulse_wide) / 1000000 * SERVO_FREQ * 4096);
return analog_value;
}
