Salut,
Je propose ici un test du Kit robot à chenille avec encodeurs.
Il est déjà entièrement assemblé, le châssis est soudé et les moteurs montés comme le montre la photo.
Bon pour commencer on va faire fonctionner ce mini char sans les encodeurs présents sur les moteurs chaque chose en son temps !
C'est un peu dommage, mais pour l'utiliser il faudra d'abord rallonger les fils d'alimentation des moteurs qui sont trop courts pour être branchés sur un quelconque driver
.
Pour jouer avec ce petit char j'utilise : une radiocommande, un driver de moteur CC, un clone d'Arduino Uno et une batterie Li-Po.
Les branchements s'effectuent comme dans le test pour le driver puisque c'est le même.
Pour fixer les cartes sur le châssis, il y a plusieurs emplacement possible, il suffit d'en trouver un qui convient. Par contre comme les moteurs sont déjà montés et gènent un peu, c'est pas toujours évident pour positionner les vis et les entretoises.
Quelques images du robot avec les cartes :
J'ai commencé par faire un programme simple pour piloter uniquement le robot en avant ou en arrière en fonction des ordres de la radiocommande.
Je mets le code et une image une fois dans l'IDE (au cas ou le web editor ne fonctionne pas
).
// Contrôle PWM simple
#define PB 3 // Contrôle vitesse moteur 1
#define B1 5 // Contrôle direction moteur 1
#define B2 6
#define PA 9 // Contrôle vitesse moteur 2
#define A1 10 // Contrôle direction moteur 2
#define A2 11
// Déclaration des variables correspondantes
int ch2; // aux différentes channels
int ch3;
unsigned int vitesse; //vitesse de commande des moteurs
void stop() //Stop
{
digitalWrite(PB,LOW);
digitalWrite(PA,LOW);
}
void avance(int vitesse) // En avant
{
analogWrite (PB,vitesse); // Contrôle de vitesse en PWM
digitalWrite(B1,LOW);
digitalWrite(B2,HIGH);
analogWrite (PA,vitesse);
digitalWrite(A1,LOW);
digitalWrite(A2,HIGH);
}
void recule (int vitesse) // En arrière
{
analogWrite (PB,vitesse);
digitalWrite(B1,HIGH);
digitalWrite(B2,LOW);
analogWrite (PA,vitesse);
digitalWrite(A1,HIGH);
digitalWrite(A2,LOW);
}
void setup() {
pinMode(PB, OUTPUT);
pinMode(B1, OUTPUT);
pinMode(B2, OUTPUT);
pinMode(PA, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
// Configuration des broches
pinMode(4, INPUT); // comme entrées
pinMode(7, INPUT);
Serial.begin(9600); // Démarage de la liaison série
}
void loop() {
// Lit la largeur d'impulsion de
ch2 = pulseIn(4, HIGH, 25000); // chaque channel
delay(5);
ch3 = pulseIn(7, HIGH, 25000);
delay(5);
vitesse=map(ch3,980,2000,0,255); //valeur vitesse de commande
Serial.print("Channel 2:");
Serial.println(ch2);
Serial.print("Channel 3:");
Serial.println(ch3);
if(ch2==0){ //radiocommande éteinte
stop();
}
else{
if ((ch2>1470) and (ch2<1490)){
stop();
}
if (ch2>1490){ //joystick en avant
avance(vitesse);
}
if (ch2<1470){ //joystick en arrière
recule(vitesse);
}
}
}
J'ai essayé un programme pour ajouter une fonction de rotation au robot. Et là ça devient un peu plus compliqué avec la gestion des différentes positions des joysticks
.
// Contrôle PWM simple
#define PB 3 // Contrôle vitesse moteur 1
#define B1 5 // Contrôle direction moteur 1
#define B2 6
#define PA 9 // Contrôle vitesse moteur 2
#define A1 10 // Contrôle direction moteur 2
#define A2 11
int ch1; // Déclaration des variables correspondantes
int ch2; // aux différentes channels
int ch3;
unsigned int vitesse; //vitesse de commande des moteurs
void stop() //Stop
{
digitalWrite(PB,LOW);
digitalWrite(PA,LOW);
}
void avance(int vitesse) // En avant
{
analogWrite (PB,vitesse); // Contrôle de vitesse en PWM
digitalWrite(B1,LOW);
digitalWrite(B2,HIGH);
analogWrite (PA,vitesse);
digitalWrite(A1,LOW);
digitalWrite(A2,HIGH);
}
void recule (int vitesse) // En arrière
{
analogWrite (PB,vitesse);
digitalWrite(B1,HIGH);
digitalWrite(B2,LOW);
analogWrite (PA,vitesse);
digitalWrite(A1,HIGH);
digitalWrite(A2,LOW);
}
void tourne_G (int vitesseB,int vitesseA) // Tourne à gauche
{
analogWrite (PB,vitesseB);
digitalWrite(B1,LOW);
digitalWrite(B2,HIGH);
analogWrite (PA,vitesseA);
digitalWrite(A1,LOW);
digitalWrite(A2,HIGH);
}
void tourne_D (int vitesseB,int vitesseA) // Tourne à droite
{
analogWrite (PB,vitesseA);
digitalWrite(B1,LOW);
digitalWrite(B2,HIGH);
analogWrite (PA,vitesseB);
digitalWrite(A1,LOW);
digitalWrite(A2,HIGH);
}
void tourne_G_AR (int vitesseB,int vitesseA) // Tourne à gauche en arrière
{
analogWrite (PB,vitesseB);
digitalWrite(B1,HIGH);
digitalWrite(B2,LOW);
analogWrite (PA,vitesseA);
digitalWrite(A1,HIGH);
digitalWrite(A2,LOW);
}
void tourne_D_AR (int vitesseB,int vitesseA) // Tourne à droite en arrière
{
analogWrite (PB,vitesseA);
digitalWrite(B1,HIGH);
digitalWrite(B2,LOW);
analogWrite (PA,vitesseB);
digitalWrite(A1,HIGH);
digitalWrite(A2,LOW);
}
void setup() {
pinMode(PB, OUTPUT);
pinMode(B1, OUTPUT);
pinMode(B2, OUTPUT);
pinMode(PA, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(2, INPUT); // Configuration des broches
pinMode(4, INPUT); // comme entrées
pinMode(7, INPUT);
Serial.begin(9600); // Démarage de la liaison série
}
void loop() {
ch1 = pulseIn(2, HIGH, 25000); // Lit la largeur d'impulsion de
delay(5);
ch2 = pulseIn(4, HIGH, 25000); // chaque channel
delay(5);
ch3 = pulseIn(7, HIGH, 25000);
delay(5);
vitesse=map(ch3,980,2000,0,255); //valeur vitesse
Serial.print("Channel 1:");
Serial.println(ch1);
Serial.print("Channel 2:");
Serial.println(ch2);
Serial.print("Channel 3:");
Serial.println(ch3);
if(ch2==0){ //radiocommande éteinte
stop();
}
else{
if ((ch2>1470) and (ch2<1490)){
stop();
}
if (ch2>1490){ //joystick en avant
avance(vitesse);
}
if ((ch1>1490) and (ch2>1490)){ //joystick à droite en avant
if (vitesse<128){
tourne_D(vitesse,255-vitesse);
}
else{
tourne_D(255-vitesse,vitesse);
}
}
if ((ch1<1470) and (ch2>1490)){ //joystick à gauche en avant
if(vitesse<128){
tourne_G(vitesse,255-vitesse);
}
else{
tourne_G(255-vitesse,vitesse);
}
}
if (ch2<1470){ //joystick en arrière
recule(vitesse);
}
if ((ch1>1490) and (ch2<1470)){ //joystick à droite en arrière
if(vitesse<128){
tourne_D_AR(vitesse,255-vitesse);
}
else{
tourne_D_AR(255-vitesse,vitesse);
}
}
if ((ch1<1470) and (ch2<1470)){ //joystick à gauche en arrière
if(vitesse<128){
tourne_G_AR(vitesse,255-vitesse);
}
else{
tourne_G_AR(255-vitesse,vitesse);
}
}
}
}
Finalement voici le robot en action :
Bon.. les commandes ne sont pas encore tout à fait au point mais il y a de l'évolution ! ![]()
EDIT : Voici le tutoriel complet pour fabriquer votre char.






















