Outils pour utilisateurs

Outils du site


wiki:projets:robotor

PROJET JUGGERNOG

Porteur(s) du projet: Bellal (contact : xander.bellal@free.fr)victorgauthier@outlook.com)alexandreeutrope@gmail.com)basile.herzog@gmail.com)Adrien)
(Si le porteur du projet n'est pas clairement défini en haut de page le projet est considéré comme inexistant)

Introduction : Dans le cadre de l'UE “Physique expérimentale”, nous devons construire un robot sumo. Durant ce projet nous devrons nous procurer les matières premières (bois, colle, plastique, composants électroniques). Puis nous devrons les transformer via des imprimantes 3D, découpeuse laser, scie, etc. Nous assemblerons les pièces mécaniques et électroniques et enfin nous entrerons un code dans la carte Arduino afin de parfaire nos mouvements et notre stratégie.

  • Date de début : 10/2016.
  • Les objectifs de ce projet : Fabriquer un robot sumo.
  • Budget : 50€.
  • Sources d'inspiration : Sir Alexandre Eutrope, terminator et Star Wars.
  • Date de fin estimée : 12/2016.
  • Sponsor : Eutrope Industrie, Bellal & Coconuts, Gauthier father & son, Herzogcorp

Machines nécessaires

www.fablablille.fr_sites_default_files_styles_large_public_field_image_speedy300.jpg
-découpeuse laser

s.3dnatives.com_imprimante_replicator-2x.jpeg
- imprimante 3D (Ici Makerboot Replicator 2X ou Ultimaker²) avec PLA ou ABS

Matériels nécessaires

OUTILLAGE

images-na.ssl-images-amazon.com_images_i_714nrrkq-5l._sl1500_.jpg
- Perceuse


- Scie à bois/scie à méteaux
- Soudeuse
- visserie
- Pinces (simples, à dénuder, coupantes), tournevis, limes, étaux, cutters, clés à molette, etc..

MATERIAUX


- planches de bois
- plastique (pour l'imprimante 3D)
- colle

COMPOSANTS ET ALIMENTATION


- carte funduino (copie arduino)
- pile 6V pour la arduino
- batterie lithium ion 3V + élévateur de tension pour le circuit de puissance
- MG995 Servo Moteur 360 Degrés ae01.alicdn.com_kf_htb1gk0dmfxxxxxwaxxxq6xxfxxxe_tower-pro-mg995-font-b-large-b-font-torque-metal-standard-gear-font-b-servo-b.jpg
- plaquette d'essai
- résistances
- sonar hc-sr04
- capteur infrarouge tcrt 5000
- Fils électriques

Construction

Déroulement du projet

Après obtention d'une chute de bois qui sera notre chassis, nous avons acquis les composants électroniques principaux de notre robot : 2 servomoteurs MG995, une plaquette d'essai, une alimentation pour la carte arduino, une alimentation 3V + élevateur de tension pour les servomoteurs. Nous avons commencé par poser sur plans la position des composants principaux sur le chassis et vissé ces derniers. Nous avons utilisé pour le test de la canette des roues de roller grossièrement fixées. Après réflexion, nous avons choisi de créer nos roues en bois à la découpeuse laser, et de fixer les moteurs au moyen de pièces dessinées sur openscad et sorties à l'imprimante 3D. La carrosserie sera également en bois, façonnée à la découpeuse laser, et fixée par des équerres dessinées et imprimées. Nous choisissons en guise de pneus une chambre à air découpée et collée aux roues. Nous nous procurons deux capteurs tcrt 5000 (capteurs infrarouges), et un sonar hc-sr 04 et les testons. Notre stratégie est la suivante : si le sonar ne détecte rien, le robot avance droit, si les capteurs infrarouges détectent la ligne noire, il se retourne de 180° ou tourne à gauche ou à droite si un seul capteur (avant droit ou gauche) détecte la ligne, et si le sonar voit quelque chose, le robot avance droit (en se retournant à la ligne noire, il balaie une moitié de terrain et est susceptible de détecter l'adversaire). Nous imprimons deux pièces pour tenir les axes des roues non motrices, et finissons d'assembler la carosserie et de fixer les capteurs au moyens de pièces elles aussi imprimées. Le dernier jour, nous devons effectuer les derniers assemblages et tests (fixation des seuils des capteurs, test du code arduino, combats tests), malheureusement nous perdons beaucoup de temps car nos servomoteurs ne répondent plus, avant de réaliser qu'il s'agissait d'un problème d'alimentation. Nous testons le code, mais un deuxième problème survient, les détecteurs infra rouge renvoient maintenant des valeurs incohérentes, nous n'aurons pas le temps de résoudre le problème et bricolons un code de dernière minute avec le sonar, lui fonctionnel.

Photos, schéma électronique, code

Photos : https://drive.google.com/file/d/0BxF7xuWkIb43d091cnVLUGx3cWM https://drive.google.com/open?id=0BxF7xuWkIb43LVFhMHBVQXFDSmc https://drive.google.com/open?id=0BxF7xuWkIb43QlhOcUhqR1NmbDQ https://drive.google.com/open?id=0BxF7xuWkIb43dlRadEtZeGZ5T2s

Schéma électronique : https://drive.google.com/open?id=0BxF7xuWkIb43dlRadEtZeGZ5T2s

Code :

#include <Servo.h>
 
#define echoPin 7 // broche Echo
#define trigPin 8 // broche Trigger (declenchement)
 
 
Servo servol; // servo left
Servo servor; // servo right
 
int tcrtFront1; // capteur ir avant gauche
int tcrtFront2; // capteur ir avant droit
int tcrtBack; // capteur ir arrière
 
int maximumRange = 200; // distance max acceptée (cm) // sonar
int minimumRange = 0;
long duration, distance; // durée utilisée pour calculer la disance
 
const int seuilTcrtFront1 = 500; // seuils capteurs infrarouges, à déterminer
const int seuilTcrtFront2 = 500;
const int seuilTcrtBack = 500;
 
long randTranslation; // pour la random walk
long randSens;
long randRotation;
 
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); //communications broches
  servol.attach(9); // servo left sur sortie 9
  servor.attach(10);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
  //LIGNE NOIRE
  tcrtFront1 = analogRead(A0); // on lit la tcrt avant 1 sur A0
  tcrtFront2 = analogRead(A1);
  tcrtBack = analogRead(A2);
 
  MoveF();
 
  if (tcrtFront1 < seuilTcrtFront1 & tcrtFront2 < seuilTcrtFront2) { //LIGNE NOIRE DEVANT
   LigneNoireDevant();
   }
  else {
    MoveF();
    }
 
  if (tcrtFront1 < seuilTcrtFront1 & tcrtFront2 >= seuilTcrtFront2) { //LIGNE NOIRE A GAUCHE
    LigneNoireDevantGauche();
    }
  else {
    MoveF();
   }
 
  if (tcrtFront1 >= seuilTcrtFront1 & tcrtFront2 < seuilTcrtFront2) { //LIGNE NOIRE A DROITE
    LigneNoireDevantDroite();
    }
  else {
    MoveF();
   }
 
  if (tcrtBack < seuilTcrtBack) { // LIGNE NOIRE DERRIERE 
    LigneNoireDerriere();
    }
  else {
    MoveF();
    }
 
 
 
  digitalWrite(trigPin, LOW); // Envoi une impulsion de 10 micro seconde sur la broche "trigger"
  delayMicroseconds(2); 
 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); 
 
  digitalWrite(trigPin, LOW);
 
 
  duration = pulseIn(echoPin, HIGH); // Attend que la broche Echo passe au niveau HAUT 
 // retourne la durée
 
 
  distance = duration/58.2; //Calculer la distance (en cm, basé sur la vitesse du son).
 
 
  if (distance >= 50){ // Si la distance mesurée est HORS des valeurs acceptables
    //* Envoyer une valeur négative sur la liaison série.
 
    Serial.println("que dalle");
 
 }
  else {
   //* Envoyer la distance vers l'ordinateur via liaison série.
 
    Serial.println("ya un truc devant !");
    MoveF();
}
 
 
 delay(50); //Attendre 50ms avant d'effectuer la lecture suivante.
}
 
 
                    // ______ //
 
                  // FONCTIONS //
 
                   // ________ //
 
 
void MoveF() { // FONCTION MOVE FORWARD
  servol.write(180);
  servor.write(0);
  }
 
void MoveB() { // FONCTION MOVE BACKWARD
  servol.write(0);
  servor.write(180);
  }
 
void TurnDroite() { // FONCTION TOURNE A DROITE
  servol.write(180);
  servor.write(180);
  }
 
void TurnGauche() { // FONCTION TOURNE A GAUCHE
  servol.write(0);
  servor.write(0);
  }
 
void LigneNoireDevant(){ //FONCTION EVITEMENT LIGNE REPEREE AVANT 
  servol.write(0);
  servor.write(180); 
  delay(2000);// move backward pendant 2 seconde 
 
  servol.write(0);
  servor.write(0);// tourne 
  delay(2000); // delay à déterminer à l'essai pour rotation complète (ou non)
 
  servol.write(180);
  servor.write(0);// move forward
  delay(2000);
  }
 
void LigneNoireDevantGauche() { // FONCTION EVITEMENT LIGNE REPEREE AVANT GAUCHE
  void TurnDroite();
  delay(1000); // delai à déterminer
  void MoveF();
   }
 
void LigneNoireDevantDroite() { // FONCTION EVITEMENT LIGNE REPEREE AVANT DROITE
  void TurnGauche();
  delay(1000); // delai à déterminer
  void MoveF();
   } 
 
void LigneNoireDerriere() { // FONCTION EVITEMENT LIGNE REPEREE DERRIERE
  servol.write(180);
  servor.write(0);
  delay(2000);
  }
 

Journal de bord


11/11/2016 : Le robot Juggernog n'est pas fonctionnel. Plan et mesures du projet en cours d'écriture.
12/11/2016 : Nous avons pris une chute de bois, nous l'avons scié aux dimensions voulues et nous y avons fais des trous à la perceuse.
13/11/2016 : Nous avons fixé les composants (Arduino, l'alimentation, plaquette) à la base du robot. Nous avons soudé certains composants.
14/11/2016 : Assemblage des moteurs et des roues temporaires (roues de rollers).
18/11/2016 : Test de la canette passé avec succès.
Semaine du 21/11/2016 : Nous assemblons nos roues définitives en bois, après découpe laser, découpe de la carrosserie, tests des capteurs infrarouge et du sonar, impressions 3D des pièces de fixations des moteurs.
Semaine du 28/11/2016 : Impressions 3D des pièces de fixation pour la carrosserie (équerres), les roues non motrices et les capteurs. Assemblage définitif de la carrosserie, colle de la chambre à air sur les roues, montage électronique et code final. Problèmes de dernière minute : les servomoteurs ne répondent pas aux commandes, nous opérions en fait en deca de la tension nominale sans le savoir, le système d'alimentation batterie 3V + élevateur de tension est abandonné. Deuxième problème, les capteurs infrarouge renvoient des valeurs incohérentes, nous n'avons pas le temps de régler le problème, la compétition se fera sans détecteur de ligne noire..

wiki/projets/robotor.txt · Dernière modification: 2016/12/03 21:34 de robotor