0% ont trouvé ce document utile (0 vote)
8 vues2 pages

Contrôle de servos SG90 avec PCA9685

Ce code Arduino utilise la bibliothèque Adafruit_PWMServoDriver pour contrôler des servos SG90 via un PCA9685. Il lit des commandes série pour ajuster les angles des doigts d'une main robotique, en convertissant les angles en signaux PWM appropriés. Les angles sont limités entre 0 et 90 degrés et sont envoyés aux canaux correspondants du PCA9685.

Transféré par

malekchahed2
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues2 pages

Contrôle de servos SG90 avec PCA9685

Ce code Arduino utilise la bibliothèque Adafruit_PWMServoDriver pour contrôler des servos SG90 via un PCA9685. Il lit des commandes série pour ajuster les angles des doigts d'une main robotique, en convertissant les angles en signaux PWM appropriés. Les angles sont limités entre 0 et 90 degrés et sont envoyés aux canaux correspondants du PCA9685.

Transféré par

malekchahed2
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

#include <Wire.

h>
#include <Adafruit_PWMServoDriver.h>

// Création de l'objet PCA9685


Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

// Plage des impulsions pour les servos SG90 (généralement entre 500 et 2500 µs)
#define SERVO_MIN 500
#define SERVO_MAX 2500

// Canaux des servos sur le PCA9685


#define THUMB_CHANNEL 0
#define INDEX_CHANNEL 1
#define MIDDLE_CHANNEL 2
#define RING_CHANNEL 3
#define PINKY_CHANNEL 4

void setup() {
[Link](9600);
[Link]();
[Link](50); // Fréquence standard pour les servos SG90 = 50 Hz
[Link]("PCA9685 initialisé. En attente de commandes...");
}

void loop() {
if ([Link]() > 0) {
String command = [Link](';');
if ([Link]() > 0) {
int thumbAngle = getValue(command, 'T');
int indexAngle = getValue(command, 'I');
int middleAngle = getValue(command, 'M');
int ringAngle = getValue(command, 'R');
int pinkyAngle = getValue(command, 'P');

setServoAngle(THUMB_CHANNEL, thumbAngle);
setServoAngle(INDEX_CHANNEL, indexAngle);
setServoAngle(MIDDLE_CHANNEL, middleAngle);
setServoAngle(RING_CHANNEL, ringAngle);
setServoAngle(PINKY_CHANNEL, pinkyAngle);
}
}
}

// Convertit l'angle (0-180°) en signal PWM (pulse 500–2500 µs)


void setServoAngle(uint8_t channel, int angle) {
angle = constrain(angle, 0, 90);
int pulse = map(angle, 0, 180, SERVO_MIN, SERVO_MAX);
int pwmVal = pulse * 4096 / 20000; // Conversion µs vers valeur PCA9685 (20ms
période)
[Link](channel, 0, pwmVal);
}

// Récupère la valeur associée à une lettre (ex: 'T90' renvoie 90)


int getValue(String data, char id) {
int startIndex = [Link](id);
if (startIndex != -1) {
int endIndex = [Link](' ', startIndex);
String valueStr = (endIndex == -1) ?
[Link](startIndex + 1) :
[Link](startIndex + 1, endIndex);
return [Link]();
}
return 90; // Par défaut
}

Vous aimerez peut-être aussi