CageBut2014-4 : Différence entre versions
(→Conclusion) |
(→Le programme associé au mécanisme) |
||
Ligne 44 : | Ligne 44 : | ||
− | == Le programme | + | == Le programme == |
Version du 25 mai 2015 à 21:26
Sommaire
Introduction
Le bureau d'étude est une initiation pédagogique nous mettant en situation concrète avec des objectifs précis à remplir, précurseurs de projets professionnels tels que nous en aurons plus tard en tant qu'ingénieur au sein d'une équipe. Nous avons choisi le Bureau d'Etude ima par curiosité des domaines de l'informatique et de l'électronique et pour conforter ou non nos choix dans les spécialités que propose le réseau Polytech.
Ce bureau d'étude a pour objectif final de faire jouer une partie de football à des robots LEGO Mindstorm™. Les rôles des robots sont répartis selon différents binômes, chaque binôme étant amené à échanger avec les autres afin que la coordination entre les robots soit la plus parfaite possible. Chaque binôme aura donc pour tâche de s'occuper soit :
- d'un robot ramasseur de balle (2 au total)
- d'une cage de buts (2 au total)
- de robots de compétition (4 au total)
Il y a aussi un neuvième "robot" qui joue le rôle d'arbitre. Il s'agit d'un ordinateur relié en Bluetooth avec tous les autres robots permettant le bon déroulement du match (exemple, après un but, l'arbitre demande à la cage concernée de libérer la balle).
Nous avons choisi de réaliser une cage de but, nos principales lignes directrices pour ce projet sont :
- Un but correctement dimensionné de largeur 50 cm en accord avec le but adverse (DELANOY et CLEMENT) pour permettre de meilleures chances à la balle de rentrer au vu de son diamètre ( 75 mm ).
- Une balise infrarouge capable d'émettre tout en étant différentiable de l'autre cage et de la balle, cette balise doit pouvoir être paramétrable.
- Un système de détection ( capteur ultrasons ) et d'expulsion de la balle ( impliquant un capteur de contact).
- Une programmation pour communiquer avec les autres intervenants ( robots joueurs, ramasseur de balle, arbitre ).
Nous avons choisi ce rôle car il est très polyvalent, alliant programmation, création d'un PCB, fabrication de la cage via une découpeuse laser.
Le Mécanisme du but
Nous avons d'abord eu l'idée d'un robot fonctionnant avec un seul moteur, le faire tourner dans un sens bloquant la balle et dans l'autre, avec une vitesse supérieure, la libérant. Ce projet a fini par être abandonné suite à de nombreuses complications techniques liées au moteur. En effet il était particulièrement difficile de faire revenir le moteur à sa position initiale, même en ajoutant des capteurs de contact l'armature ne revenait jamais exactement à sa place. Les LEGO du prototype étant moins lourds que l'armature finale en bois ou plastique.Nous nous sommes dis que le projet était perfectible. De plus le système n'était pas assez rigide pour supporter le poids de la cage. Le système de blocage étant à améliorer mais il fallait ajouter un autre moteur pour expulser la balle.
Le nouveau robot ainsi réalisé comporte deux moteurs, le premier s'occupe de bloquer la balle, le second ne fait que la renvoyer. Le premier constitue une sorte de crochet se rabattant sur la balle après qu'elle soit détectée par le capteur ultrason (situé sur la ligne du but). La balle est ainsi bloqué au fond du but contre un système fixe prévu à cet effet. La balle immobilisée, le crochet se relève jusqu'à rencontrer le capteur de contact qui déclenche sa remise en position initiale. Pendant cela, le deuxième moteur chargé du fonctionnement du percuteur se met en marche et permet l'expulsion de la balle hors du but. Nous avons réalisé des tests, le percuteur expulse la balle assez rapidement pour un franchissement de quelques millimètres en raccord avec l'épaisseur du terrain. Le percuteur se remet alors en place sans problème car le moteur réalise un angle faible.
Media:Robot final.mp4--Media:Bascule contact final.mp4
Le programme
Ci-dessous le programme du robot NXT. Ce programme que nous avons écrit permet à notre but de remplir différentes tâches: détecter la balle, la bloquer dans la cage et l'en éjecter. Une fois connecté à l'arbitre par bluetooth, l'arbitre lui demande de s'identifier, ce qu'il fait en lui envoyant le code correspondant aux cages. La balle pouvant se trouver dans un but au début d'une partie, la première instruction de l'arbitre à la cage est d'éjecter si besoin la balle du but. Lorsque la balle rentre dans notre but, elle est détectée par le capteur infrarouge. Notre robot la bloque et averti le robot arbitre d'un but. La balle ne sera éjectée que lorsque l'arbitre le lui aura demandé. Puis le jeu peut reprendre.
#define NEAR 50 //cm //Actors #define TYPE 0 //#define SEEKER //#ifdef SEEKER //#define TYPE 2 #define TYPE_BUT 0 //Mailboxes #define MAILBOX_ACTEUR 1 #define MAILBOX_ARBITRE 2 //Messages #define CODE_REQTYPE 0 #define CODE_EJECTER 1 #define CODE_BUT 3 task main() { int result; string buffer; SetSensorTouch(IN_2); SetSensorLowspeed(IN_4); while(true) { result=ReceiveMessage(MAILBOX_ACTEUR,true,buffer); if(result==0) { int requete=StrToNum(buffer); if(requete==CODE_REQTYPE) { TextOut(0,LCD_LINE1,"TYPE SENT"); string type; type=NumToStr(TYPE_BUT); SendMessage(MAILBOX_ARBITRE+10,type); } if(requete==CODE_EJECTER) { TextOut(0,LCD_LINE2,"EJECT BALL"); OnRev (OUT_C,100); Wait (150); OnFwd (OUT_C,100); Wait (150); Off (OUT_C); Wait (1000); OnFwd(OUT_A, 50); Wait(250); Off (OUT_A); while(SensorUS(IN_4)>NEAR); string type1; type1=NumToStr(CODE_BUT); SendMessage(MAILBOX_ARBITRE+10,type1); Wait (200) ; //petite pause le tps que la balle arrive OnFwd (OUT_A,50); //moteur sup. se rabaisse pour bloquer balle Wait (150); Off (OUT_A); Wait (1000); OnRev(OUT_A, 20); // moteur sup. se relève, balle libre de partir while (Sensor(IN_2) != 1) {} } } } }
La Balise infrarouge
Une fois notre robot terminé nous nous sommes attelés à la conception de la balise infrarouge. Nous avons réalisé la balise en s'inspirant du modèle suivant, en y rajoutant un bouton poussoir et une LED rouge qui va nous permettre de savoir "où" nous nous situerons par rapport au réglage de la fréquence des LED infra-rouges. C'est simple, une pression sur le bouton fait clignoter la LED rouge une fois, un appui prolongé sur le bouton (3 secondes dans notre cas) fait clignoter la LED 4 fois: on entre dans un "menu" dans lequel on peut alors configurer la période de fonctionnement des LED infrarouges. Pour refermer ce "menu" il faut à nouveau appuyer 3 secondes sur le bouton, la LED va à nouveau clignoter mais cette fois autant de fois que le bouton a été enfoncé. Pour configurer la période des infrarouges il faut appuyer un certain nombre de fois. Par exemple: 5 appuis, les infrarouges vont fonctionner à 1200Hz pendant 2,5s puis s'interrompre pendant 1s et recommencer jusqu'à ce que ce paramètre soit modifié. A noter que la pause d'une seconde n'est pas paramétrable avec le bouton.
Les programmes associés à la balise
Notre programme doit permettre à la balise d'être paramétrable, à l'aide du seul bouton poussoir on doit pouvoir paramétrer le temps d'émission des LED infrarouges. Nous avons d'abord programmés notre balise en utilisant une carte arduino. En y allant étape par étape nous avons fini par réaliser le code suivant:
#define NORMAL 100 #define BUTTONPIN 10 #define IRPIN 11 #define LEDPIN 12 #define BEAUCOUP 2000 #define PERIODE 500 int duree=4;
void setup() { pinMode(LEDPIN, OUTPUT); digitalWrite(LEDPIN,HIGH); delay(100); digitalWrite(LEDPIN,LOW); pinMode(BUTTONPIN, INPUT_PULLUP); } void clignote (int duree) //la led clignote 4 fois la première fois que l'on rentre dans le menu { int i; for(i=0;i<duree;i++) { digitalWrite(LEDPIN,HIGH); delay(300); digitalWrite(LEDPIN,LOW); delay(200); } }
void menu() //code du menu, entrée sortie et led, on sort avec le nombre d'appui, on entre la fois suivante avec le nombre entré auparavant { long t = millis(); long deltat; while(digitalRead(BUTTONPIN)==LOW && ((deltat=millis()-t)<=BEAUCOUP)) //rien SI durée appui trop courte delay(25); if (deltat>=BEAUCOUP) { // durée appui assez longue -> on fait clignoter 4x clignote (duree); long appui = 0; while (digitalRead(BUTTONPIN)==LOW) delay(25); while (1) { while (digitalRead(BUTTONPIN)==HIGH) delay(25); // chgt + compteur t=millis(); digitalWrite(LEDPIN,HIGH); while(digitalRead(BUTTONPIN)==LOW && ((deltat=millis()-t)<BEAUCOUP)) delay(25); digitalWrite(LEDPIN,LOW); if (deltat>BEAUCOUP) { duree = appui; clignote (duree); break; } else { appui = appui + 1; } } } }
void loop() { delay(1000); if (digitalRead(BUTTONPIN)==LOW) menu (); digitalWrite(LEDPIN,HIGH); unsigned long d=duree*PERIODE; tone(IRPIN,1200,d); delay(d); digitalWrite(LEDPIN,LOW); }
Par la suite il a fallu rendre la balise totalement indépendante de l'ordinateur et donc remplacer la carte arduino par le microcontrôleur, pour cela on utilise un AT Tiny Programmer qui est une petite carte qui permet de compiler notre programme dans le microcontrôleur. Suite à une erreur de conception de la carte au niveau de la LED rouge il faut changer tous les digitalWrite(HIGH) en "LOW" pour cette LED. Puis il a juste fallu changer le numéro des PINS des composants:
#define NORMAL 100 #define BUTTONPIN 0 #define IRPIN 1 #define LEDPIN 2 #define BEAUCOUP 2000 #define PERIODE 500
Notre carte est maintenant fonctionnelle.
Circuit imprimé
Une fois la partie programmation de la balise par arduino termminée nous avons dû réaliser le circuit imprimé de cette balise. A partir d'un schéma initial réalisé sur le logiciel Eagle que nous avons modifiée, afin d'obtenir une meilleure répartition des composants sur la carte, nous avons envoyé notre PCB au service de Polytech consacré à sa fabrication.
L'étape suivante consista à souder les différents composants et à tester la carte, elle fonctionne, il faut maintenant programmer le microcontrôleur pour la balise devienne autonome avec un AT Tiny Programmer comme expliqué auparavant.
La programmation de la balise étant terminée il faut maintenant fabriquer le PCB / circuit imprimé de celle-ci. Pour cela on utilise le logiciel EAGLE puis on l'envoie au service de polytech chargé de sa fabrication via un protocole.
Suite à problème rencontré avec les groupes précédents une résistance à été rajouté entre le microcontrôleur et le transformateur. Les lignes bleues correspondent aux fils de cuivre reliant les différents composants entre eux. Les cercles verts correspondent aux emplacements dans lesquelles seront soudés les pattes des composants sauf pour les 4 en bas à gauche qui sont en fait les trous pour viser le support de la pile au circuit.
Les angles que réalisent les fils sont de 45 degrés car ils offrent de meilleures performances que si ils étaient de 90. Le reste du circuit, le fond bleu, n'est autre que le plan de masse. Sur le plan et sur la carte on remarque que juste à gauche du microcontrôleur il reste un place libre pour un composant. En effet il a été prévu au départ d'ajouter un composant permettant à l'arbitre de communiquer avec la balise. Mais ce projet a finalement été laissé de côté, il sera sûrement exploité à la saison prochaine.
La cage
Tous les programmes terminés avec notre robot et notre balise prêts à l'emploi nous sommes donc passés à la dernière étape de notre projet: la conception de la cage.
La cage aura une largeur de 50 cm et une profondeur de 25 cm. L'armature sera fixée au robot par une plaque le traversant, plaque sur laquelle viendront se fixer également le boîtier NXT et la balise infrarouge. Nous avions initialement choisi le plexiglas comme matériau principal de la cage, apportant une véritable structure au but tout en laissant apercevoir le mécanisme, nous avons finalement utilisés une plaque de bois aggloméré de type MDF n'ayant pas de plexiglas à notre disposition. Concernant le mécanisme du robot, une première pièce longue sera fixé au premier moteur sur le crochet recouvrant ainsi toute la largeur du but. L'idée est la même pour le moteur de répulsion où une deuxième pièce sera fixé sur le percuteur obtenant ainsi un percuteur de 50 cm de large. On pourra également placer une mini-plaque sur la pièce du robot sur laquelle la balle vient se percuter.
La découpeuse laser mise à notre disposition au Fabricarium est un outil qui nous a permis de gagner énormément de temps sur cette étape de notre projet, il suffit de réaliser les plans 2D des pièces sous un logiciel tel que Inkscape ou FreeCAD, puis de configurer la machine par rapport au matériau à découper (nombre de passages, vitesse...).
Les pièces découpées il ne reste plus qu'à les percer puis les coller, amarrer le robot dessus. Notre but est terminé.
Média:Test final 1.mp4 Média:Test final 2.mp4
Les problèmes rencontrés
Un des principaux problèmes lors de ce projet a concerné les connaissances requises en programmation ( language C ) essentiellement pour l'élaboration de la balise infrarouge utilisant des fonctions non étudiées en PEIP. Au vue de l'importance place de la programmation dans le projet, cela nous a amené à souvent demander l'aide de nos professeurs. N'ayant pas à le matériel nécessaire pour réaliser la cage ou du moins tester notre mécanisme dans la pratique rapidement, il nous a fallu souvent imaginer les avantages et désavantages du système au fur et à mesure sans pouvoir le tester directement. L'utilisation de la découpeuse laser nous a dû être expliqué, n'ayant jamais eu l'occasion de travailler avec cet outil récent.
Conclusion
Ce bureau d'étude au sein du département IMA a été enrichissant. D'une part par la polyvalence des tâches à accomplir dans différents domaines : informatique ( programmation du mécanisme, de la balise infrarouge, des communications avec les autres robots), électronique (réalisation de la balise, du PCB , manipulation des robots) et mécanique ( fabrication de la cage ). Cela nous a également permis de réaliser un projet au sein d'une équipe puisqu'une communication avec les autres groupes a été nécessaire pour une meilleure progression. Nous avons découvert une liberté dans le travail sans directives précises hormis l'objectif final, avec des étapes intermédiaires à accomplir. Au niveau de l'orientation, on a pu se faire une idée de ce qu'était le département IMA et du contenu des enseignements ce qui était une de nos motivations au départ. Nous avons découvert de nombreuses choses tant au niveau de la structure d'un programme, de l'utilisation de logiciels de dimensionnement (Inkscape), du matériel électronique ( éléments du circuit électronique, ATtiny, PCB, microcontrôleur...) et d'outils tels que la découpeuse laser. Ce côtoiement d'équipements technologiques et d'une démarche scientifique nous sera bénéfique pour la suite de notre formation.