Robot labyrinthe de base

Celles et ceux qui ont fait (ou vu) des projets de robotique (Lego ou autres) ont sûrement remarqué que les défis sont souvent des labyrinthes où le robot doit se déplacer en évitant des obstacles.

Dans le présent projet, nous construisons un tel robot à peu de frais (moins de 25$, donc l’élève pourrait même garder son robot).

Attention! Le but ici n’est pas de faire de la compétition de robotique comme on voit avec les robots Lego (NXT, EV3). Mais bien d’apprendre comment ça se passe au niveau des circuits. Il sera relativement difficile de programmer notre robot pour qu’il circule dans un labyrinthe. Par contre, l’élève pourra «voir» au coeur du robot, ce qui est riche en apprentissages.

Note aux débutants : La présente documentation a pour but d’inspirer, non pas d’être copiée-collée sans comprendre le programme et les circuits. Car le copier-coller en Arduino ne fonctionne pas nécessairement.

Les pièces

Pour réaliser notre robot de base, nous aurons besoin des pièces suivantes (les liens sont à titre d’exemple, d’autres fournisseurs peuvent avoir de meilleurs prix).

Le châssis

Attention! Afin d’éviter des bris (suite à la manipulation fréquente des pièces) voir ces conseils.

Avec un peu d’imagination, on peut utiliser plusieurs types de châssis. De l’impression 3D (si vous avez accès à une imprimante 3D, la conception par ordinateur du châssis est une tâche intéressante en science et technologie) à l’utilisation de gouttières en PVC, plusieurs matériaux pourront servir à assembler votre robot.

Voici des exemples de châssis qui ont chacun leurs forces et faiblesses.

Une descente de gouttière divisée en deux (devrait être renforcée, car un peu trop souple).

gouttieres_demie

Une descente de gouttière complète.

gouttiere

Un bouchon de 4″.

bolide_distance1.resized

Un bouchon de 4″ avec les moteurs à l’extérieur (Jean-François Garneau).

20160530_095329.resized

Une morceau de plancher flottant (Jean François Garneau).

20160530_095143.resized

Châssis imprimé avec une imprimante 3D (Jean-François Garneau).

IMG_20151125_112401.resized

Attention! Les connexions électriques (image ci-dessous) sur les moteurs sont fragiles. Pour éviter des problèmes, un renforcement (avec colle chaude ou autres moyens) est nécessaire avant de débuter ses manipulations/expérimentations.

moteur_fragile.resized

De plus, pour que le robot se déplace en ligne droite, des ajustements seront nécessaires (roues parallèles, le frottement, etc.).

Montage

Le montage pour les moteurs nécessite le pont en H et une alimentation.

montage_moteurs

Voici la description des connexions dans le schéma ci-dessous (vous aurez à ajuster les sorties selon votre montage).

Carte Arduino Pont en H
GND GND
Sortie 3 ~ ENB (optionnel)
Sortie 4 IND
Sortie 5 INC
Sortie 6 INB
Sortie 7 INA
Sortie 9 ~ ENA (optionnel)

Le pont en H utilisé ici peut contrôler la vitesse de rotation des moteurs à l’aide des broches ENA et ENB (optionnel dans le tableau ci-haut). Pour débuter, nous vous suggérons de ne pas les utiliser (avoir toujours le maximum de courant dans les moteurs), ceci simplifie un peu le projet.

À noter également  la mise à la terre à connecter sur la carte Arduino (protection du circuit).

labyrinthe hbridge montage

 

La programmation

Inspiration :

C’est ici que ça devient intéressant pour la résolution de problème. Car on doit faire des tests pour trouver la bonne orientation des moteurs selon le ce qu’on envoie comme signal dans les sorties 4,5,6 et 7 (les «IN» sur le pont en H).

Voici un exemple pour faire tourner les roues. Le tout est d’observer dans quel sens les roues tournent avec cette programmation et d’ajuster au besoin.

void setup()
{
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);

}
void loop()
{
 //moteur A
 digitalWrite(7, HIGH);//INA
 digitalWrite(6, LOW);//INB
 //Moteur B
 digitalWrite(5, HIGH);//INC
 digitalWrite(4, LOW);//IND
}

Un peu de théorie, capteur de distance

Un des capteurs intéressants pour ce type de bolide est le capteur de distance. Voir cet article pour les détails de son utilisation.

Bolide et distance

Nous voici prêts pour programmer un robot qui avance tant qu’il y a au moins 25 cm d’espace devant lui. Voici une vidéo présentant le résultat.

Le programme en Blockly@rduino est ici (version xml compressée pouvant être importée).

Le programme en mode texte :

int lecture_echo;
int cm;

//On peut créer des fonctions comme ci-dessous de façon à simplifier la programmation dans la boucle loop
void Avance() { 
  digitalWrite(7, HIGH);
  digitalWrite(6, LOW);
  digitalWrite(5, LOW);
  digitalWrite(4, HIGH);
}

void Recule() {
  digitalWrite(7, LOW);
  digitalWrite(6, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(4, LOW);
}

void TourneGauche() {
  digitalWrite(7, LOW);
  digitalWrite(6, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(4, HIGH);
}

void TourneDroite() {
  digitalWrite(7, HIGH);
  digitalWrite(6, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(4, LOW);
}

void Arrete() {
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);
  digitalWrite(5, LOW);
  digitalWrite(4, LOW);
}

void setup() //
{
  pinMode(11, OUTPUT);
  digitalWrite(11, LOW);

  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(10, INPUT);
  Serial.begin(9600);

}


void loop()
{
  //on lit la distance devant le robot
  digitalWrite(11, HIGH);
  delay(10);
  digitalWrite(11, LOW);
  lecture_echo = pulseIn(10,HIGH);
  ;
  cm = lecture_echo / 58;
  Serial.print(cm);
  delay(10);//on donne un peu de temps au robot pour respirer ;-)
  if (cm > 25) { //si chemin libre
    Avance();

  } else { //si obstacle
    Arrete();
    delay(1000);
    Recule();
    delay(1000);
    TourneGauche();
    delay(300);
    Arrete();
    delay(1000);

  }

}

Un commentaire sur “Robot labyrinthe de base

  1. Ping : Bolide Arduino | Arduino en classe

Les commentaires sont fermés.