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);
}