Robot SUMO +

Ah mais carrément un robot SUMO +. Christelle lui donnerait bien un surnom, mais je ne dirai rien. Elle, et ses surnoms improbables, donnés souvent à des collègues fort sympathiques.
Bref, projet entamé lors des vacances de mars 2018, soit environ 110 heures de travail pendant ces vacances et quelques week-end qui ont suivis.

Le but est d’essayer de motiver, les élèves, et de mettre en évidence des besoins simples. Et résoudre ceux-ci en utilisant des outils tel que FreeCad ou encore ArduBlocks (arduino pour l’éducation, le langage n’est pas étudié, mais un empilement de blocs avec des paramètres simples).

Télécharger FreeCad

Télécharger ArduBlocks

Le robot Sumo en images…

Voici le programme du Robot Sumo + pour la partie parcours uniquement. Le programme complet, la prochaine fois. C’est juste pour tester les différents modes.

/*
Programme de reception Bluetooth via le logiciel APP Inventor

– connectez un servomoteur sur sur la sortie digitale 10
– connectez un servomoteur sur sur la sortie digitale 11
– connecter le module bluetooth sur les broches 0 et 1 , puis l’alim GND 5V
(une fois le programme uploadé sinon… ça ne marche pas ERREUR)

Attention, avant d’uploader ce programme, veillez à débrancher le module bluetooth
car celui-ci utilise les broches 0 et 1 utilisées aussi pour uploader
un programme dans arduino

Collège Jean ROSTAND – Le Cateau – Erik DELOS
*/
#include <Servo.h> // on utilise la bibliothèque servomoteur
#include <SoftwareSerial.h> // on utilise la bibliothèque Serial
Servo myservo1; // on déclare le servomoteur 1
Servo myservo2; // on déclare le servomoteur 2
SoftwareSerial mySerial (0,1) ;
// byte serialA; // variable de reception de donnée via RX
int bt = 5 ; // on met 5 dans la variable bt ce qui permet d’avoir les 2 servomoteur à l’arrêt
void setup()
{
Serial.begin(9600); // initialisation de la connexion série pour communiquer avec le pc
mySerial.begin(9600); // initialisation de la connexion série (avec le module bluetooth)
}

void loop() {
bt = mySerial.read(); // on lit ce que va envoyer le smartphone ou la tablette sur le port série du bluetooth
if (bt==1) { // si on reçoit 1 on donne l’ordre d’avancer
myservo1.attach(10); // on déclare que le servomoteur 1 est connecté sur la sortie 10
myservo2.attach(11); // on déclare que le servomoteur 2 est connecté sur la sortie 11
myservo1.write(0); // on fait tourner le servomoteur 1 dans un sens
myservo2.write(180); // on fait tourner le servomoteur 2 dans l’autre sens
}
if (bt==2) { // si on reçoit 2 on donne l’ordre de tourner à gauche
myservo1.attach(10); // on déclare que le servomoteur 1 est connecté sur la sortie 10
myservo2.detach(); // on déclare que le servomoteur 2 n’est plus alimenté – à l’arrêt
myservo1.write(0); // on fait tourner le servomoteur 1 dans un sens

}
if (bt==3) { // si on reçoit 3 on donne l’ordre de reculer
myservo1.attach(10); // on déclare que le servomoteur 1 est connecté sur la sortie 10
myservo2.attach(11); // on déclare que le servomoteur 2 est connecté sur la sortie 11
myservo1.write(180); // on fait tourner le servomoteur 1 dans un sens
myservo2.write(0); // on fait tourner le servomoteur 2 dans l’autre sens

}
if (bt==4) { // si on reçoit 2 on donne l’ordre de tourner à droite
myservo1.detach(); // on déclare que le servomoteur 1 n’est plus alimenté – à l’arrêt
myservo2.attach(11); // on déclare que le servomoteur 2 est connecté sur la sortie 11
myservo2.write(180); // on fait tourner le servomoteur 2 dans un sens
}
if (bt==5) {
myservo1.detach(); // on déclare que le servomoteur 1 n’est plus alimenté – à l’arrêt
myservo2.detach(); // on déclare que le servomoteur 2 n’est plus alimenté – à l’arrêt

}

}

Et voici l’application, réalisée sur app inventor 2.

Je vous mets en lien les différentes pièces au format .stl pour l’impression 3D.

Bon allez, je vous mets le programme qui permet de choisir entre le mode « combat de sumo » et le mode « parcours ».

/*
Programme de réception Bluetooth via le logiciel APP Inventor

– connectez un servomoteur sur sur la sortie digitale 10
– connectez un servomoteur sur sur la sortie digitale 11
– connecter le module bluetooth sur les broches 0 et 1 , puis l’alim GND 5V
(une fois le programme uploadé sinon… ça ne marche pas ERREUR)
– connecter le module ultra son sur les borches 5 et 6 (5 : broche TRIGGER ; 6 : borche ECHO)

Attention, avant d’uploader ce programme, veillez à débrancher le module bluetooth
car celui-ci utilise les broches 0 et 1 utilisées aussi pour uploader
un programme dans arduino

Collège Jean ROSTAND – Le Cateau – Erik DELOS
*/
#include <Servo.h> // on utilise la bibliothèque servomoteur
#include <SoftwareSerial.h> // on utilise la bibliothèque Serial
Servo myservo1; // on déclare le servomoteur 1
Servo myservo2; // on déclare le servomoteur 2
SoftwareSerial mySerial (0,1) ;
// byte serialA; // variable de reception de donnée via RX
int bt = 5 ; // on met 5 dans la variable bt ce qui permet d’avoir les 2 servomoteur à l’arrêt

#define TRIGG 5 // Broche TRIGGER
#define ECHO 6 // Broche ECHO
// definition du Timeout
const long TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s

float son= 340.0 / 1000; //vitesse du son dans l’air (mm/µs)

void setup()
{
pinMode(TRIGG, OUTPUT); //Configuration des broches
digitalWrite(TRIGG, LOW); // La broche TRIGGER doit être à LOW au repos
pinMode(ECHO, INPUT);
Serial.begin(9600); // initialisation de la connexion série pour communiquer avec le pc
mySerial.begin(9600); // initialisation de la connexion série (avec le module bluetooth)

}

void loop() {
bt = mySerial.read(); // on lit ce que va enovyer le smartphone ou la tablet sur le port série du bluetooth

if (bt==1) { // si on reçoit 1 on donne l’ordre d’avancer
myservo1.attach(10); // on déclare que le servomoteur 1 est connecté sur la sortie 10
myservo2.attach(11); // on déclare que le servomoteur 2 est connecté sur la sortie 11
myservo1.write(0); // on fait tourner le servomoteur 1 dans un sens
myservo2.write(180); // on fait tourner le servomoteur 2 dans l’autre sens
}
if (bt==2) { // si on reçoit 2 on donne l’ordre de tourner à gauche
myservo1.attach(10); // on déclare que le servomoteur 1 est connecté sur la sortie 10
myservo2.detach(); // on déclare que le servomoteur 2 n’est plus alimenté – à l’arrêt
myservo1.write(0); // on fait tourner le servomoteur 1 dans un sens

}
if (bt==3) { // si on reçoit 3 on donne l’ordre de reculer
myservo1.attach(10); // on déclare que le servomoteur 1 est connecté sur la sortie 10
myservo2.attach(11); // on déclare que le servomoteur 2 est connecté sur la sortie 11
myservo1.write(180); // on fait tourner le servomoteur 1 dans un sens
myservo2.write(0); // on fait tourner le servomoteur 2 dans l’autre sens

}
if (bt==4) { // si on reçoit 2 on donne l’ordre de tourner à droite
myservo1.detach(); // on déclare que le servomoteur 1 n’est plus alimenté – à l’arrêt
myservo2.attach(11); // on déclare que le servomoteur 2 est connecté sur la sortie 11

myservo2.write(180); // on fait tourner le servomoteur 2 dans un sens
}
if (bt==5) {
myservo1.detach(); // on déclare que le servomoteur 1 n’est plus alimenté – à l’arrêt
myservo2.detach(); // on déclare que le servomoteur 2 n’est plus alimenté – à l’arrêt

}
// on est en mode combat de sumo
if (bt==7) {
digitalWrite(TRIGG, HIGH); // Lance une mesure de distance en envoyant
delayMicroseconds(10); //une impulsion HIGH de 10µs sur la broche TRIGGER
digitalWrite(TRIGG, LOW);

long mesure = pulseIn(ECHO, HIGH, TIMEOUT); // Mesure le temps entre
// l’envoi de l’ultrason et sa réception

float distance_mm = mesure / 2.0 * son; //calcul de la distance grâce au temps
//on divise par 2 car le son fait un aller-retour
if (distance_mm<600)
{
myservo1.attach(10); // on déclare que le servomoteur 1 est connecté sur la sortie 10
myservo2.attach(11); // on déclare que le servomoteur 2 est connecté sur la sortie 11
myservo1.write(0); // on fait tourner le servomoteur 1 dans un sens
myservo2.write(180); // on fait tourner le servomoteur 2 dans l’autre sens

}
else {

myservo1.attach(10); // on déclare que le servomoteur 1 est connecté sur la sortie 10
myservo2.detach(); // on déclare que le servomoteur 2 n’est plus alimenté – à l’arrêt
myservo1.write(0); // on fait tourner le servomoteur 1 dans un sens

}
delay(15); // waits 15ms for the servo to reach the position

}
}

}

Et voici l’application app inventor qui va avec :