Avant de faire du code pour pouvoir bouger la Jambe de Briel dans tous les sens il faut faire attention aux angles MIN et MAX de débattement !
Pour cela on va utiliser ce code :
[vidéo]
En observant comment s'orientent les servomoteurs dans le sens "positif", ( déplacement de +15° ) on va savoir comment sont orientés chacune des articulations. Le faible déplacement permet de garantir que quelque soit le sens de déplacement le servomoteur ne va pas rentrer en buté ! =)
Une fois le sens positif de chaque axe connu on va pouvoir définir si les valeurs maximum d'amplitude de chaque articulations de notre bipèdes sont -90° ou +90° afin de se mettre dans cette position :
Une fois les limite Max définies, on va les stocker dans un tableau, et on va pouvoir exécuter le code suivant permettant de tester un mouvement "fluide" alternant de 0 à 90° sur chacune des articulations :
Vous remarquerez que le mouvement "fluide" est obtenu en décomposant le mouvement souhaité en plusieurs mouvements exécutés les uns à la suite des autres.
Notre fonction "test90JambeDroite()" découpe l'ensemble de la plage d'amplitude 0 à 90° en 256 mouvements!
Le résultat en vidéo :
Maintenant qu'on a l'ensemble qui est bien calibré et qu'on connait les sens des servo et si on faisait un test de flexion sur une jambe ?
Voici le code :
On test la fonction comme ça
Video de test
Oura ! La jambe semble faire la flexion souhaitée !
Comme ça a l'air de bien marcher on va monter l'électronique sur la jambe et refaire les essais.
Vidéo de test :
Oups... Le robot semble pas bien droit ... Sans la charge pas de problème mais avec la batterie on voit apparaître un problème de jeu dans les servomoteurs! Oui... On rappel qu'on utilise des servomoteurs à moins de 7€50 pour ce projet... On ne pouvait pas s'attendre à quelque chose de parfait ... Mais rassurez vous le projet ne s'arrête pas là ! Ce résultat était attendu et il y a bien entendu une parade ! Il faut "contrer le jeu " .
Nouveau code :
Video .
Et là ça va mieux! =)
Pour cela on va utiliser ce code :
//Bibliothèques : #include <Wire.h> #include <Adafruit_PWMServoDriver.h> #define NBSERVO 5 //Driver : Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); // Jambe1 #define MIN0 93 #define MAX0 450 #define MIN1 96 #define MAX1 451 #define MIN2 101 #define MAX2 451 #define MIN3 105 #define MAX3 440 #define MIN4 111 #define MAX4 440 // Tableau qui attribue à chaque servo sa place sur le driver pour 16 servo uint8_t servomoteur[NBSERVO] = {0, 1, 2, 3, 5}; //Servos : //Liste des longueurs minimum d'impulsions pour - 90° uint16_t servomoins90[NBSERVO] = {MIN0, MIN1, MIN2, MIN3, MIN4}; //Liste des longueurs minimum d'impulsions pour + 90° uint16_t servoplus90[NBSERVO] = {MAX0, MAX1, MAX2, MAX3, MAX4}; #define PAUSE 5000 void setup() { pwm.begin(); pwm.setPWMFreq(50); //Fréquence utilisée par les servos analogiques } void loop() { testSensJambeDroite(); } void writeServo(uint8_t i, int8_t degree) { uint16_t x = map(degree,-90, 90, servomoins90[i], servoplus90[i]); pwm.setPWM(servomoteur[i],0,x); } void testSensJambeDroite() { for(uint8_t i = 0; i< 5; i++) { writeServo(i, 0); } delay(PAUSE); for(uint8_t i = 0; i< 5; i++) { writeServo(i, 15); } delay(PAUSE); }Avec ce code on obtient le résultat suivant :
[vidéo]
En observant comment s'orientent les servomoteurs dans le sens "positif", ( déplacement de +15° ) on va savoir comment sont orientés chacune des articulations. Le faible déplacement permet de garantir que quelque soit le sens de déplacement le servomoteur ne va pas rentrer en buté ! =)
Une fois le sens positif de chaque axe connu on va pouvoir définir si les valeurs maximum d'amplitude de chaque articulations de notre bipèdes sont -90° ou +90° afin de se mettre dans cette position :

Une fois les limite Max définies, on va les stocker dans un tableau, et on va pouvoir exécuter le code suivant permettant de tester un mouvement "fluide" alternant de 0 à 90° sur chacune des articulations :
//Bibliothèques : #include <Wire.h> #include <Adafruit_PWMServoDriver.h> #define NBSERVO 5 //Driver : Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); // Jambe1 #define MIN0 93 #define MAX0 450 #define MIN1 96 #define MAX1 451 #define MIN2 101 #define MAX2 451 #define MIN3 105 #define MAX3 440 #define MIN4 111 #define MAX4 440 // Tableau qui attribue à chaque servo sa place sur le driver pour 16 servo uint8_t servomoteur[NBSERVO] = {0, 1, 2, 3, 5}; //Servos : //Liste des longueurs minimum d'impulsions pour - 90° uint16_t servomoins90[NBSERVO] = {MIN0, MIN1, MIN2, MIN3, MIN4}; //Liste des longueurs minimum d'impulsions pour + 90° uint16_t servoplus90[NBSERVO] = {MAX0, MAX1, MAX2, MAX3, MAX4}; // Position Max orienté des servomoteurs en degrés int8_t limiteMax[NBSERVO] = { -90, -90, -90, -90, 90}; #define PAUSE 5000 void setup() { pwm.begin(); pwm.setPWMFreq(50); //Fréquence utilisée par les servos analogiques } void loop() { test90JambeDroite(); } void writeServo(uint8_t i, int8_t degree) { uint16_t x = map(degree,-90, 90, servomoins90[i], servoplus90[i]); pwm.setPWM(servomoteur[i],0,x); } void test90JambeDroite() { for(uint8_t i =0 ;i=<255; i++ ){ for(uint8_t j = 0; j < 5; j++) { writeServo( j, (limiteMax[j]*i)/255 ); } } delay(PAUSE); for(uint8_t i =255 ; i>=0 ; i-- ){ for(uint8_t j = 0; j < 5; j++ ) { writeServo(j, (limiteMax[j]*i)/255 ); } } delay(PAUSE); }
Vous remarquerez que le mouvement "fluide" est obtenu en décomposant le mouvement souhaité en plusieurs mouvements exécutés les uns à la suite des autres.
Notre fonction "test90JambeDroite()" découpe l'ensemble de la plage d'amplitude 0 à 90° en 256 mouvements!
Le résultat en vidéo :
Maintenant qu'on a l'ensemble qui est bien calibré et qu'on connait les sens des servo et si on faisait un test de flexion sur une jambe ?
Voici le code :
On test la fonction comme ça
Video de test
Oura ! La jambe semble faire la flexion souhaitée !
Comme ça a l'air de bien marcher on va monter l'électronique sur la jambe et refaire les essais.
Vidéo de test :
Oups... Le robot semble pas bien droit ... Sans la charge pas de problème mais avec la batterie on voit apparaître un problème de jeu dans les servomoteurs! Oui... On rappel qu'on utilise des servomoteurs à moins de 7€50 pour ce projet... On ne pouvait pas s'attendre à quelque chose de parfait ... Mais rassurez vous le projet ne s'arrête pas là ! Ce résultat était attendu et il y a bien entendu une parade ! Il faut "contrer le jeu " .
Nouveau code :
Video .
Et là ça va mieux! =)
Zut, je voulais mettre "J'aime", mais comme il y a que la moitié du tuto et bien je met "J'ai", lol

Cool, content de voir que Briel avance