Réaliser un programme pour une voiture en vue d'un spectacle

Bonjour,

je suis nouveau sur ce forum, débutant en arduino, pas tout jeune et ne comprenant que le français... j'ai lu tous les conseils pour bien faire sur ce forum mais j'ai cependant mis un certain temps avant de comprendre qu'il fallait être inscrit avant de pouvoir ouvrir un sujet. Je n'ai pas trouvé comment mettre un tag (conseil) Bref, ce n'est pas gagné d'avance, je vais faire de mon mieux. Mais ça va être un peu long.

Dans le but de programmer le déplacement précis d'une petite voiture pour un spectacle professionnel, mais aussi pour d'autres projets personnels (serre automatisée, poulailler automatisé) je commence à me former avec des lectures et des cours sur internet et puis j'ai acheté une "smart v3.0 robot car kit" équipée d'un arduino uno r3.

Je parviens à programmer des marches avant à différentes vitesses, des marches arrières, des changements de direction donc je peux lui faire répéter à peu près le même circuit en boucle.

Cela reste à peu près car les démarrages et les arrêts se font brutalement surtout dans les changements de direction et les pneus glissent légèrement ce qui provoque des décalages de direction.

Je souhaite donc pouvoir programmer des ralentissements plus ou moins longs avant chaque action.

Le fabriquant "ilegoo" fournit un programme pour aborder sans explication ces ralentissements. Mais à partir de ce programme, je ne parviens pas à régler la durée du ralentissement ni à ajouter un ralentissement à mes actions (marche avant, M.A. ...) voici le programme fourni, dans lequel j'ai rajouté des annotations en français :

//www.elegoo.com

// la voiture démarre brutalement en avant, ralentit jusqu'à l'arrêt, stoppe une seconde, recule doucement s'arrète brutalement stoppe 2 seconde.


#define ENA 5// Vitesse des 2 roues Gauches
#define ENB 6// Vitesse des 2 roues Droites
#define IN1 7//mouvement Avant des 2 roues Gauches (dans le sens antihoraire à la place du conducteur)
#define IN2 8//mouvement Arrière des 2 roues Gauches
#define IN3 9//mouvement Arrière des 2 roues Droites
#define IN4 11//mouvement Avant des 2 roues Droites

void setup() {
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  pinMode(ENA,OUTPUT);
  pinMode(ENB,OUTPUT);
}

void loop() {
  //go forward
  digitalWrite(IN1,HIGH); 
  digitalWrite(IN2,LOW);  
  digitalWrite(IN3,LOW);  
  digitalWrite(IN4,HIGH);
  //reduce the speed
  for(int i = 255; i >= 0; i--){ 
    analogWrite(ENB,i);
    analogWrite(ENA,i);
    delay(20);
  }

  //stop
  analogWrite(ENB,0); //speed = 0
  analogWrite(ENA,0);  
  delay(1000);

  //runing back
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  //accelerate
  for(int i = 0; i <= 255; i++){ 
    analogWrite(ENB,i);
    analogWrite(ENA,i);
    delay(20);
  } 
  
  //stop
  digitalWrite(ENB,LOW); //Motor is off 
  digitalWrite(ENA,LOW);  
  delay(2000);   
}

J'ai essayé de modifier par exemple la ligne for(int i = 255; i >= 0; i--){ qui commande le ralentissement de la marche avant, afin que ce ralentissement se fasse plus rapidement j'ai écrit : for(int i = 255; i >= 0; i-20) mais cela ne fonctionne pas, la voiture reste en marche avant sans ralentir ni s'arrêter.

Voici un petit programme que j'ai réalisé pour un début de circuit et dans quel je voudrais placer des graduations de vitesses en début et à la fin des actions.

Ce serait vraiment très aimable de votre part de bien vouloir m'aider à réaliser ces graduations de vitesse.
Cordialement.

// la voiture avance lentement, avance rapidement, arrète, tourne à gauche, tourne à droite arrête 5 secondes et reprend la boucle (donc deux contrôles de la vitesse avant qui ne peuvent dépasser 255)

/* Définition des différentes fonctions (avant, arrière, gauche, droite) qui donnent la direction de la voiture :
- VG       VD    AVG     ARG     ARD      AVD   : Résultat
- V1       V1    HIGH    LOW     LOW      HIGH  : marche avant lente (en première)
- V2       V2    HIGH    LOW     LOW      HIGH  : marche avant rapide (en deuxième)
- V2       V2    LOW     HIGH    HIGH     LOW   : marche arrière rapide
- V2       V2    LOW     HIGH    LOW      HIGH  : tourne à gauche rapidement
- V2       V2    HIGH    LOW     HIGH     LOW   : tourne à droite rapidement
- HIGH     HIGH                                 : arrêt 
*/

#define VG 5// Vitesse Gauche
#define VD 6// Vitesse Droite
#define AVG 7//mouvement Avant Gauche (dans le sens antihoraire à la place du conducteur)
#define ARG 8//mouvement Arrière Gauche
#define ARD 9//mouvement Arrière Droit
#define AVD 11//mouvement Avant Droit
#define V1 150 //1ère vitesse avant lent
#define V2 255 //2ème vitesse avant rapide

void ARRET(){
digitalWrite(VG,LOW); 
digitalWrite(VD,LOW); 
Serial.println("ARRET");//Envoyez le message au moniteur en série
}
void AVANTlent(){
analogWrite(VG,V1); 
analogWrite(VD,V1); 
digitalWrite(AVG,HIGH);
digitalWrite(ARG,LOW); 
digitalWrite(ARD,LOW);
digitalWrite(AVD,HIGH); 
Serial.println("AVANTlent");
}
void AVANTrapide(){
analogWrite(VG,V2); 
analogWrite(VD,V2); 
digitalWrite(AVG,HIGH);
digitalWrite(ARG,LOW); 
digitalWrite(ARD,LOW);
digitalWrite(AVD,HIGH); 
Serial.println("AVANTrapide");
}
void ARRIERE(){
analogWrite(VG,V2);
analogWrite(VD,V2);
digitalWrite(AVG,LOW);
digitalWrite(ARG,HIGH);
digitalWrite(ARD,HIGH);
digitalWrite(AVD,LOW);
Serial.println("ARRIERE");
}
void GAUCHE(){
analogWrite(VG,V2);
analogWrite(VD,V2);
digitalWrite(AVG,LOW);
digitalWrite(ARG,HIGH);
digitalWrite(ARD,LOW);
digitalWrite(AVD,HIGH);
Serial.println("GAUCHE");
}
void DROITE(){
analogWrite(VG,V2);
analogWrite(VD,V2);
digitalWrite(AVG,HIGH);
digitalWrite(ARG,LOW);
digitalWrite(ARD,HIGH);
digitalWrite(AVD,LOW);
Serial.println("DROITE");
}
//Avant d'exécuter la fonction "loop"? la fonction set up  s'exécutera en premier et une fois.
void setup() {
Serial.begin(9600);//Ouvrir la cession et mettre la vitesse de transmission (en bauds)
pinMode(AVG,OUTPUT);
pinMode(ARG,OUTPUT);
pinMode(ARD,OUTPUT);
pinMode(AVD,OUTPUT);
pinMode(VG,OUTPUT);
pinMode(VD,OUTPUT);
}
//Elle se répète en boucle
void loop() {
AVANTlent(); // marche avant lente (150
delay(1000);//delay 1000 ms
AVANTrapide(); // marche avant rapide (255)
delay(1000);
ARRET();
delay(1000);
ARRIERE(); 
delay(1000);
GAUCHE(); //tourner à gauche
delay(1000);
DROITE(); //tourner à droite
delay(1000);
ARRET();
delay(5000);
}

hello
et si tu joues sur le delay ? ça donne quoi ?
for(int i = 255; i >= 0; i--){
analogWrite(ENB,i);
analogWrite(ENA,i);
delay(20);
}

demande au modérateur de déplacer ton post dans la bonne rubrique

hello
j'ai fini par tomber sur ça
for(int i = 255; i >= 0; i-20) mais cela ne fonctionne pas, la voiture reste en marche avant sans ralentir ni s'arrêter.

pour decrementer i, il faut:

for(int i = 255; i >= 0; i-=20)

le signe = doit etre entre - et 20

Merci beaucoup dfgh pour tes deux messages dont je viens de prendre connaissance.

pour répondre à ton premier message, oui, si l'on joue sur le delay ça fonctionne mais je ne parvenais pas à comprendre de quelle manière.

Avec la solution de ton deuxième message où il suffisait d'ajouter le signe = après le moins je suis dans une logique d'incrémentation que je cerne à peu près.

Maintenant que j'ai compris comment ça marche, il me faut trouver la manière de placer des ralentis avant et après une marche avant ou une marche arrière ou un changement de direction.

Est-ce qu'il y aurait un moyen pour mettre cela dans le void setup ou en amont du void setup pour que ce ralentissement s'impose à tout déplacement ?

encore merci

hello
j'avoue que je n'ai pas pu résister...je me suis amusé à faire ce petit code
veux tu jeter y un oeil.
je ne peux pas le tester
regarde bien les commentaires et si tu as des questions...

/*
 * la fonction "mouvement" est parametrable de la facon suivante
 * si demandé, elle effectue une acceleration selon des deux premiers parametres
 * parametres 1 et 2: 0, 127 pour une acceleration en partant de zero à petite vitesse
 * parametres 1 et 2: 0, 255 pour une acceleration en partant de zero à grande vitesse
 * parametres 1 et 2: 127,255 pour une acceleration en partant de petite vitesse à grande vitesse.
 * les 4 parametres suivants:
 * parametres 3, 4, 5, 6: definissent le sens de marche AV/AR et direction G/D
 * parametres 7 : le parametre suivant est le temps pendant la voiture va se déplacer après avoir atteint la vitesse demandée
 * parametres 8 : est la durée du pas pendant l'acceleration ou la deceleration
 * en jouant sur cette durée, on purra jouer sur le temps total d'acceleration / deceleration
 * parametres 9: est pour indiquer a la fonction si l'acceleration est demandee
 * parametres 10 est pour indiquer le pas de la boucle for decel et accel
 * 
 * de plus, il faut tenir compte du fait 
 *    qu'une acceleration de 0 à 127 ou deceleration  de 127 à 0 dure 20ms*127= 2540ms
 * et qu'une acceleration de 0 à 255 ou deceleration  de 255 à 0 dure 20ms*127= 5080ms
 * don un deplacement avec accel,vitesse maintenue pendant 1 seconde et decel durera:(5080*2)+1000=11160 ms
 * 
 */ 
/* Définition des différentes fonctions (avant, arrière, gauche, droite) qui donnent la direction de la voiture :
- VG       VD    AVG     ARG     ARD      AVD   : Résultat
- V1       V1    HIGH    LOW     LOW      HIGH  : marche avant lente (en première)
- V2       V2    HIGH    LOW     LOW      HIGH  : marche avant rapide (en deuxième)
- V2       V2    LOW     HIGH    HIGH     LOW   : marche arrière rapide
- V2       V2    LOW     HIGH    LOW      HIGH  : tourne à gauche rapidement
- V2       V2    HIGH    LOW     HIGH     LOW   : tourne à droite rapidement
- HIGH     HIGH                                 : arrêt 
*/

#define VG 5    // Vitesse Gauche
#define VD 6    // Vitesse Droite
#define AVG 7   //mouvement Avant Gauche (dans le sens antihoraire à la place du conducteur)
#define ARG 8   //mouvement Arrière Gauche
#define ARD 9   //mouvement Arrière Droit
#define AVD 11  //mouvement Avant Droit
#define V1 150  //1ère vitesse avant lent
#define V2 255  //2ème vitesse avant rapide

void mouvement(int vit_depart,int vit_finale,int avg,int arg,int ard,int avd,int roulage,int duree_pas,int accel,int decel,int pas_decre)
{  
digitalWrite(AVG,avg);if((avg==1)&&(avd==1)){Serial.println(" avant  ");}
digitalWrite(ARG,arg);if((arg==1)&&(ard==1)){Serial.println(" arriere");} 
digitalWrite(ARD,ard);if((arg==1)&&(avd==1)){Serial.println(" gauche ");}
digitalWrite(AVD,avd);if((avg==1)&&(ard==1)){Serial.println(" droite ");}

if(accel==1)
{
Serial.print(F("acceleration jusqu a une vitesse de "));Serial.println(vit_finale);
for(int i = vit_depart; i <= vit_finale; i+=pas_decre)
  { 
    analogWrite(VD,i);analogWrite(VG,i);delay(duree_pas);
  }   
}
Serial.print(F("vitesse etablie et maintenue a  "));Serial.print(vit_finale);
Serial.print(F(" pendant "));Serial.print(roulage);Serial.println(F(" ms"));
delay(roulage);
if (decel==1)
{
Serial.print(F("ralentissement progressif, depuis une vitesse de "));Serial.println(vit_finale);
for(int i = vit_finale; i >= 0; i-=pas_decre)
  { 
    analogWrite(VD,i);analogWrite(VG,i);delay(duree_pas);
  }
}
}
void stop()
{
digitalWrite(VG,LOW); 
digitalWrite(VD,LOW); 
Serial.println(F(" arret")); 
}

//Avant d'exécuter la fonction "loop"? la fonction set up  s'exécutera en premier et une fois.
void setup() {
Serial.begin(115200);//Ouvrir la cession et mettre la vitesse de transmission (en bauds)
pinMode(AVG,OUTPUT);
pinMode(ARG,OUTPUT);
pinMode(ARD,OUTPUT);
pinMode(AVD,OUTPUT);
pinMode(VG,OUTPUT);
pinMode(VD,OUTPUT);
}
//Elle se répète en boucle
// la voiture avance lentement, avance rapidement, arrète, tourne à gauche, tourne à droite arrête 5 secondes et reprend la boucle 
//(donc deux contrôles de la vitesse avant qui ne peuvent dépasser 255)

void loop() {
  //parametres= vit_depart,vit_finale,avg,arg,ard,avd,duree_roulage,pas,acceleration,deceleration,pas_decre
  //                 0         127     1   0  0    1     1000       20       1            0          10
  
  mouvement(  0,127,1,0,0,1,1000,20,1,0,10);//avant avec accel de 0 a 127 roule pendant 1 seconde, pas de decel, pas acel/decel =10
  mouvement(127,255,1,0,0,1,1000,20,1,1,10);//avant avec accel de 127 a 255 roule pendant 1 seconde puis decel, pas acel/decel =10
  stop();
  delay(1000);//delay 1000 ms
  mouvement(0,255,0,1,0,1,1000,20,1,0,10);//gauche de 0 a 255 avec accel, pendant 1 seconde, sans decel, pas acel/decel =10
  mouvement(0,255,1,0,1,0,1000,20,0,1,10);//droite de 0 a 255 sans accel, pendant 1 seconde, avec decel, pas acel/decel =10
  stop();
  Serial.println(F(" pause de 5 secondes ")); 
  delay(5000);
}

Bonjour PFGH, je t’adresse un grand merci pour ce programme génial, J’ai compris le principe bien que je ne parvienne pas encore à comprendre tous les détails du void mouvement.

  • J’ai quelques questions, tu as écrit les digital write en minuscule (AVG, avg) n’aurait-on pas pu mettre directement avg en minuscule dans « difine7 », au début ?

  • J’ai l’impression que les lignes difine V1 150 et difine V2 255 ainsi que le serial.bigin (115200) ne servent plus à rien dans ce programme ? Y a-t-il d’autres lignes à supprimer ?

  • J’ai remarqué que je ne pouvais plus démarrer et arrêter sans ralenti en mettant les 9 et 10èmes données sur 0 et 0 ???

  • Penses tu qu’il est possible de modifier les vitesses des roues gauches et droites indépendamment pour lui faire prendre des courbes à gauche et à droite ? peux tu me conseiller là-dessus ?

J’espère que je ne t’en demande pas trop…

Je te place une petite vidéo spéciale pour toi en guise de remerciement sur : Dropbox - File Deleted

J’espère qu’elle te plaira.

Encore merci pour ton aide, Michel

hello

tout d'abord ta vidéo :

félicitations pour ce très beau travail réalisé pour animer cette petite marionnette.

oui, tu as raison pour supprimer les deux variables qui ne servent pas.
non il ne faut pas supprimer la ligne Serial.begin car elle initialise la liaison série avec le moniteur.

oui, le 9 ème paramètre à 0 ou 1 interdit ou autorise une accélération lors d'un démarrage du véhicule.
oui le 10 ème paramètre à 0 ou 1 interdit ou autorise une décélération lors d'un arrêt du véhicule
le 11 ème paramètre est le pas de décrémentation des boucles for qui gèrent l'accélération/décélération . jouer sur sa valeur allongera ou raccourcira la durée de l'accélération/décélération

les mouvements que j'ai programmés dans la boucle sont ceux que tu avais demandés dans ton scénario ( rappelé en 1ère ligne de la loop).

bien sur il est possible de faire ce que l'on veut comme mouvement.
je vais modifier le prog pour le cas des courbes et des demi-tours sur place.
je suppose que pour les courbes, les roues extérieures devront tourner plus vite que les roues intérieures. ce sera peut être là la difficulté.

sans savoir encore si nous irons jusque là:
quel est l'empattement des roues? et leur diamètre ?

edit: en regardant le prg, je viens de comprendre ta phrase
J'ai remarqué que je ne pouvais plus démarrer et arrêter sans ralenti en mettant les 9 et 10èmes données sur 0 et 0 ???

je corrige.............

bon, le demi-tour sur place, c'est déjà possible
(vu dans le prog et confirmé en visionnant la vidéo)

voici la version corrigée pour avoir un mouvement sans acceleration/deceleration

je regarde pour les courbes, si je comprends bien, tu veux faire un cercle

sans savoir si cela me sera utile, quel diamètre ?

/*
 * la fonction "mouvement" est parametrable de la facon suivante
 * si demandé, elle effectue une acceleration selon des deux premiers parametres
 * parametres 1 et 2: 0, 127 pour une acceleration en partant de zero à petite vitesse
 * parametres 1 et 2: 0, 255 pour une acceleration en partant de zero à grande vitesse
 * parametres 1 et 2: 127,255 pour une acceleration en partant de petite vitesse à grande vitesse.
 * les 4 parametres suivants:
 * parametres 3, 4, 5, 6: definissent le sens de marche AV/AR et direction G/D
 * parametres 7 : le parametre suivant est le temps pendant la voiture va se déplacer après avoir atteint la vitesse demandée
 * parametres 8 : est la durée du pas pendant l'acceleration ou la deceleration
 * en jouant sur cette durée, on purra jouer sur le temps total d'acceleration / deceleration
 * parametres 9: est pour indiquer a la fonction si l'acceleration est demandee
 * parametres 10 est pour indiquer le pas de la boucle for decel et accel
 * 
 * de plus, il faut tenir compte du fait 
 *    qu'une acceleration de 0 à 127 ou deceleration  de 127 à 0 dure 20ms*127= 2540ms
 * et qu'une acceleration de 0 à 255 ou deceleration  de 255 à 0 dure 20ms*127= 5080ms
 * don un deplacement avec accel,vitesse maintenue pendant 1 seconde et decel durera:(5080*2)+1000=11160 ms
 * 
 */ 
/* Définition des différentes fonctions (avant, arrière, gauche, droite) qui donnent la direction de la voiture :
- VG       VD    AVG     ARG     ARD      AVD   : Résultat
- V1       V1    HIGH    LOW     LOW      HIGH  : marche avant lente (en première)
- V2       V2    HIGH    LOW     LOW      HIGH  : marche avant rapide (en deuxième)
- V2       V2    LOW     HIGH    HIGH     LOW   : marche arrière rapide
- V2       V2    LOW     HIGH    LOW      HIGH  : tourne à gauche rapidement
- V2       V2    HIGH    LOW     HIGH     LOW   : tourne à droite rapidement
- HIGH     HIGH                                 : arrêt 
*/

#define VG 5    // Vitesse des deux roues de Gauche
#define VD 6    // Vitesse des deux roues de Droite

#define AVG 7   //mouvement Avant des 2 roues Gauches(dans le sens antihoraire à la place du conducteur)
#define ARG 8   //mouvement Arrière des 2 roues Gauches

#define ARD 9   //mouvement Arrière des 2 roues Droites
#define AVD 11  //mouvement Avant des 2 roues Droites

void mouvement(int vit_depart,int vit_finale,int avg,int arg,int ard,int avd,int roulage,int duree_pas,int accel,int decel,int pas_decre)
{  
digitalWrite(AVG,avg);if((avg==1)&&(avd==1)){Serial.println(" avant  ");}
digitalWrite(ARG,arg);if((arg==1)&&(ard==1)){Serial.println(" arriere");} 
digitalWrite(ARD,ard);if((arg==1)&&(avd==1)){Serial.println(" gauche ");}
digitalWrite(AVD,avd);if((avg==1)&&(ard==1)){Serial.println(" droite ");}

if(accel==1)
{
Serial.print(F("acceleration jusqu a une vitesse de "));Serial.println(vit_finale);
for(int i = vit_depart; i <= vit_finale; i+=pas_decre)
  { 
    analogWrite(VD,i);analogWrite(VG,i);delay(duree_pas);
  }   
}


analogWrite(VD,vit_finale);analogWrite(VG,vit_finale);
Serial.print(F("vitesse etablie et maintenue a  "));Serial.print(vit_finale);
Serial.print(F(" pendant "));Serial.print(roulage);Serial.println(F(" ms"));
delay(roulage);


if (decel==1)
{
Serial.print(F("ralentissement progressif, depuis une vitesse de "));Serial.println(vit_finale);
for(int i = vit_finale; i >= 0; i-=pas_decre)
  { 
    analogWrite(VD,i);analogWrite(VG,i);delay(duree_pas);
  }
}
}
void stop()
{
digitalWrite(VG,LOW); 
digitalWrite(VD,LOW); 
Serial.println(F(" arret")); 
}

//Avant d'exécuter la fonction "loop"? la fonction set up  s'exécutera en premier et une fois.
void setup() {
Serial.begin(115200);//Ouvrir la cession et mettre la vitesse de transmission (en bauds)
pinMode(AVG,OUTPUT);
pinMode(ARG,OUTPUT);
pinMode(ARD,OUTPUT);
pinMode(AVD,OUTPUT);
pinMode(VG,OUTPUT);
pinMode(VD,OUTPUT);
}
//Elle se répète en boucle
// la voiture avance lentement, avance rapidement, arrète, tourne à gauche, tourne à droite arrête 5 secondes et reprend la boucle 
//(donc deux contrôles de la vitesse avant qui ne peuvent dépasser 255)

void loop() {
  //parametres= vit_depart,vit_finale,avg,arg,ard,avd,duree_roulage,pas,acceleration,deceleration,pas_decre
  //                 0         127     1   0  0    1     1000       20       1            0          10
  
  mouvement(  0,127,1,0,0,1,1000,20,1,0,10);//avant avec accel de 0 a 127 roule pendant 1 seconde, pas de decel, pas acel/decel =10
  mouvement(127,255,1,0,0,1,1000,20,1,1,10);//avant avec accel de 127 a 255 roule pendant 1 seconde puis decel, pas acel/decel =10
  stop();
  delay(1000);//delay 1000 ms
  mouvement(0,255,0,1,0,1,1000,20,1,0,10);//gauche de 0 a 255 avec accel, pendant 1 seconde, sans decel, pas acel/decel =10
  mouvement(0,255,1,0,1,0,1000,20,0,1,10);//droite de 0 a 255 sans accel, pendant 1 seconde, avec decel, pas acel/decel =10
  stop();
  Serial.println(F(" pause de 5 secondes ")); 
  delay(5000);
}

Bonjour et merci pour ce nouveau programme qui fonctionne parfaitement avec la possibilité de ne pas accélérer et décélérer lors d'un mouvement.

J'ai vu que tu avais ajouté une ligne "analogWrite(VD,vit_finale);analogWrite(VG,vit_finale);" je me suis dit que ça m'aiderait à comprendre la logique de ta programmation mais non, l'écriture du void mouvement reste encore mystérieuse pour moi ça doit être sacrement sophistiqué.

Pour répondre à ta dernière question, oui, je souhaite programmer éventuellement des cercles ou des courbes mais je ne connais pas le diamètre exact, je fais de la recherche avec ce petit robot pour connaitre ses possibilités et ses limites. l'idéal serait de pouvoir programmer indépendamment la vitesse des deux roues gauche et celle des roues droites de la même manière que l'on peut programmer la vitesse d'avancement dans ton programme. Je me dis que si je veux aller tout droit, en théorie, je programme la même vitesse sur les deux côtés. J'ai aussi pensé que cela m'aiderait à corriger un problème de direction (une légère courbe) que le robot fait systématiquement peut être à cause d'un problème de puissance moteur ou de répartition de poids ou d'adhérence.

Mon projet final, c'est de construire un robot de taille moyenne avec une esthétique très particulière qu'un lapin et un cochon d'inde conduiraient tout en dialoguant sur le parcours à suivre... ils franchiraient un pont et une bascule, se laceraient des paris par exemple, celui de faire une courbe, de suivre un tracé, de renverser un objet... Cela peut paraitre délirant sur ce site mais c'est relativement sérieux dans le cadre de la construction d'un spectacle jeune public.

Je constate avec le robot car kit que l'une des limites du robot actuel à trait aux trajectoires qui ne sont pas assez précise et ne se reproduisent pas à l'identique. Il me faut trouver une solution pour la construction finale. J'aurai aussi besoin d'un coup de main pour le choix des moteurs et du contrôleur car je suppose que celui du robot actuel ne sera pas assez puissant.

Pour notre humanoïde, je t'ai fait une vidéo "à l'arrache" à 22h. dans le but de te remercier j'aurais aimé faire mieux en qualité. Il y a une vidéo de meilleure qualité sur notre site La vallée de l’étrange | Zampanos (tout en bas de la page) Mais elle n'est pas personnalisée. L'humanoïde se nomme Brioux, il se déplace aussi dans la rue sur son chariot de manière autonome en parlant aux gens. il demande parfois à quelqu'un de le prendre dans ses bras.

Dans ton avant-dernier message, tu me dis qu'il ne faut pas supprimer la ligne Serial.begin car elle initialise la liaison série avec le moniteur. Je l'ai supprimée et ça fonctionne pourtant bien. Que peut-il arriver par la suite si je ne la remet pas ?

l'empattement des roues est de 127mm. de milieu à milieu, elles font 26mm. de large et 67mm. de diamètre.

Encore merci pour ton aide.

Michel