====== PROJET JUGGERNOG====== Porteur(s) du projet: **Bellal** (contact : [[xander.bellal@free.fr|xander.bellal@free.fr]])[[victorgauthier@outlook.com|victorgauthier@outlook.com]])[[alexandreeutrope@gmail.com|alexandreeutrope@gmail.com]])[[luc@toimemetusais.com|basile.herzog@gmail.com]])[[luc@toimemetusais.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 ===== {{https://www.fablablille.fr/sites/default/files/styles/large/public/field/image/Speedy300.jpg?itok=VnPZzckT}} \\ -découpeuse laser {{http://s.3dnatives.com/imprimante/replicator-2x.jpeg?direct&200}} \\ - imprimante 3D (Ici Makerboot Replicator 2X ou Ultimaker²) avec PLA ou ABS ===== Matériels nécessaires ===== OUTILLAGE {{https://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 {{https://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 #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..