Catégories
Liens
Ceci est une ancienne révision du document !
Le LABOT-1 est un prototype de robot disposant d'un capteur infrarouge et de 2 servomoteurs. Il a été réalisé en 3 jours par 2 stagiaires. Disposant d'une intelligence artificielle simple, le LABOT-1 sait éviter les obstacles sur sa route, et repartir dans une autre direction. Il est conçu à partir d'une carte Arduino Romeo v2.0 sur un châssis de contreplaqué et est conçu pour être simple à monter.
Liste de matériel et composants nécessaires
- Le châssis
Les lignes noires sont des repères à graver, tandis que les rouges sont à découper. Les pas de vis et les encoches sont également découper.
Voici le fichier .svg du châssis.
Le modèle 3d du support de la roulette arrière est obtenu en extrudant de 16mm sur CURA ou autre logiciel d'impression 3d, le fichier .svg ou le bitmap .png du rehausseur.
Le circuit électronique se base sur la carte Arduino Romeo v2.0 à laquelle sont connectés 2 servomoteurs, 1 capteur infrarouge et 1 pile 9V.
/* --- LABOT-1 --- * * par Julien et Tom * * Le LABOT-1 est un robot simple équipé de 2 servomoteurs et d'un capteur à infrarouge. * Son comportement consiste à avancer jusqu'à ce qu'il rencontre un obstacle. * Il évitera alors la collision, puis choisira de reculer et de trourner soit à droite, soit à gauche, une fois sur deux. * Il recommence alors à avancer. */ #include <Servo.h> // On inclue au scope la fonction des servomoteurs // Variables Servo servo_d, servo_g; int repos_d = 92; // valeur de repos (autour de 90) int repos_g = 91; // valeur de repos (autour de 90) int capteur = 0; // valeur de départ du capeur int choix = 0; // valeur du choix de tourner soit à gauche, soit à droite // Setup void setup() { Serial.begin(9600); // On définit la vitesse de transfert des données servo_d.attach(10); // Le servo droit est connecté au pin 10 servo_g.attach(11); // Le servo gauche est connecté au pin 11 (à l'envers) idle(2000); // Attend 2sec au démarrage } // Logique void loop() { capteur = analogRead(A0); //Readout du capteur infrarouge Serial.println(capteur); // Impression sur l'écran de la valeur du Readoup (contrôle) delay(10); // Stabilise la lecture if(capteur > 500) { //si le capteur est proche d'un objet, le robot va s'arrêter... idle(1000); // ...pour 1s if(choix == 0) { // ici, on alterne la valeur du choix (de 1 à 0 ou de 0 à 1) choix = 1; } else { choix = 0; } if(choix == 0) { // si le choix est à 0... rot_g(5000, 20); // ...le robot tournera à gauche } else { // autrement, si le choix est à 1... rot_d(8500, 20); // ...le robot tournera à droite } } else { // si le capteur est loin d'un objet... avancer(20); // ... le robot avancera } delay(50); // On a 1/20 de s avant de recommencer le cycle } // Fonctions // Fonction l'avancer (vitesse au repos + vitesse d'avancement) void avancer(int vitesse) { servo_d.write(repos_d + vitesse); servo_g.write(repos_g - vitesse); } // Fonction de rester au repos void idle(int temps) { servo_d.write(repos_d); servo_g.write(repos_g); delay(temps); } // Fonction de tourner en arrière vers la gauche void rot_g(int temps_g, int vitesse) { servo_d.write(repos_d); servo_g.write(repos_g + vitesse); delay(temps_g); } // Fonction de tourner en arrière vers la droite void rot_d(int temps_d, int vitesse) { servo_d.write(repos_d - vitesse); servo_g.write(repos_g); delay(temps_d); }
Autres photos, galerie, …