Tutoriel Arduino : Robot détecteur d’obstacles – version 1

Ce diaporama nécessite JavaScript.

Tout est dans le titre !

Je me suis lancé dans la programmation d’un petit robot détecteur d’obstacles. Pour le moment, il n’est pas très élaboré, mais je ferai évoluer le programme au fur et à mesure de mes idées !

Niveau matériel, je reprend ma base Makeblocks, mais j’ai déposé la carte de contrôle Me Orion pour la remplacer par une carte Arduino Uno. Cela me permet d’utiliser mes shields.

J’ajoute une carte de gestion moteurs Dual_mc_33926, et 1 sonar ultrason connecté sur un shield Grove.

Le seul « défaut » de la carte Dual_mc_33926 est d’être consommatrice de ports, en effet, les ports D4, D7, D8, D9, D10, A0, A1 sont monopolisés.

MC33926-ES

Sur une carte Arduino Uno, il ne reste donc potentiellement pas beaucoup de place !

Qu’importe, pour le moment, je n’utilise qu’un port digital supplémentaire pour connecter un capteur ultrason.

Le principe de ce premier prototype est simple : lorsque le robot détecte un obstacle, il tourne à droite jusqu’à trouver un champ libre, il continue alors à avancer.

Une petite démo :

IMG_0945-Play

Et voici le code :

—————————— Code ————————–

#include <Wire.h>
#include <SD.h>
#include <SPI.h>

#include « Ultrasonic.h » //lib des telemetres a ultrasons

#include <DualMC33926MotorShield.h>

// Pour le contrôleur moteurs
DualMC33926MotorShield md;

// variables des telemetres
Ultrasonic ultrasonic(2); // sonar gauche sur D2

long distanceMesuree;
int speedM1, speedM2;

void setup() {
// Init du port serie (debug)
Serial.begin(9600);

// init des variables;
distanceMesuree = 0;

// init du contr^leur moteurs
Serial.println(« Dual MC33926 Motor Shield »);
md.init();
}

void stopInFault() {
if (md.getFault()) {
Serial.print(« fault »);
while(1);
}
}

void avance() {
speedM1 = 70;
speedM2 = 70;
md.setM1Speed(speedM1);
md.setM2Speed(speedM2);
}

void recule() {
speedM1 = -70;
speedM2 = -70;
md.setM2Speed(speedM1);
md.setM1Speed(speedM2);
}

void tourneADroite() {
speedM1 = 0;
speedM2 = 70;
md.setM1Speed(speedM1);
md.setM2Speed(speedM2);
}

void tourneAGauche() {
speedM1 = 70;
speedM2 = 0;
md.setM1Speed(speedM1);
md.setM2Speed(speedM2);
}

void stopAvance() {
speedM1 = 0;
speedM2 = 0;
md.setM2Speed(speedM1);
md.setM1Speed(speedM2);
}

void mesureDistance() {
distanceMesuree = ultrasonic.MeasureInCentimeters();
delay(300);
Serial.print(« Distance mesuree : « );
Serial.println(distanceMesuree);
}

void loop() {
mesureDistance();

if (distanceMesuree > 40) {
Serial.println(« Avance »);
avance();
} //end if
if (distanceMesuree <= 40) {
stopAvance();
Serial.println(« stopAvance »);
tourneADroite();

} // end if

} // end loop

—————————– / Code ————————–

J’espère faire évoluer ce prototype rapidement : j’ai dans l’idée de mettre le capteur ultrason sur un servo, afin de pouvoir, en cas de détection d’obstacle, « regarder » à droite et à gauche afin de décider de la direction à suivre…

Comme d’hab, pour les questions, suggestions, c’est ici ou en commentaire…

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s