Binome2015-9 : Différence entre versions
(→Objectifs du but) |
(→Introduction) |
||
(194 révisions intermédiaires par 4 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | + | <include nopre noesc src="/home/pedago/ppeip/include/video-Robot9-2015-iframe.html" /> | |
__TOC__ | __TOC__ | ||
+ | <br style="clear: both;"> | ||
== <span style="font-size:32px;line-height:40px;">Introduction</span> == | == <span style="font-size:32px;line-height:40px;">Introduction</span> == | ||
+ | |||
Le choix de ce bureau d'étude (BE) s'est fait avant tout par passion pour l'électronique et l'informatique. En effet, nous savions grâce à la page wiki que ce projet allait combiner ces deux domaines avec en prime une partie mécanique. L’abandon des Lego Mindstorms nous a également aidé dans notre décision, puisque nous trouvions plus intéressant de concevoir ce robot par nous même. | Le choix de ce bureau d'étude (BE) s'est fait avant tout par passion pour l'électronique et l'informatique. En effet, nous savions grâce à la page wiki que ce projet allait combiner ces deux domaines avec en prime une partie mécanique. L’abandon des Lego Mindstorms nous a également aidé dans notre décision, puisque nous trouvions plus intéressant de concevoir ce robot par nous même. | ||
− | Après une petite heure de présentation du BE, l'ensemble des groupes s'est concerté pour le choix du projet. Nous nous sommes | + | Après une petite heure de présentation du BE, l'ensemble des groupes s'est concerté pour le choix du projet. Nous nous sommes réparties les différents acteurs du "jeu de balle" de telle sorte qu'il soit possible de réaliser une démonstration à l’issue du BE. Nous avons choisi de travailler sur un '''robot joueur''' ainsi qu'une '''cage de but'''. |
=== Objectifs du robot === | === Objectifs du robot === | ||
---- | ---- | ||
+ | |||
+ | [[Fichier:obj.png|1000px|left|Schéma des objectifs]] | ||
+ | <br style="clear: both;"> | ||
==== Fonctions diverses ==== | ==== Fonctions diverses ==== | ||
− | * Détecter les lignes extérieures | + | * Détecter les lignes extérieures : lorsque le robot se déplacera sur le terrain pour x raison, il ne devra pas dépasser les lignes extérieures du terrain |
− | * Détecter les obstacles | + | * Détecter les obstacles : le robot doit être capable d'éviter les collisions avec son adversaire ou toute autre objet de l'environnement |
− | * Suivre une ligne | + | * Suivre une ligne : le robot va devoir se servir des lignes pour rentrer à son garage et donc les suivre |
==== Phase de démarrage ==== | ==== Phase de démarrage ==== | ||
− | * Recevoir les ordres | + | |
− | * Sortir du garage | + | * Recevoir les ordres : il doit être capable de recevoir les ordres venant du ramasseur |
+ | * Sortir du garage : il doit se positionner sur le terrain | ||
==== Phase de jeu ==== | ==== Phase de jeu ==== | ||
− | + | * Se déplacer vers la balle : le robot devra être en mesure de capter la balle et de se déplacer vers elle | |
− | * Se déplacer vers la balle | + | * Capturer la balle : un mécanisme devra permettre au robot de saisir la balle |
− | * Capturer la balle | + | * Demander l’activation du but : le robot enverra une information pour activer le but |
− | * Demander l’activation du but | + | * Repérer le but adverse : le robot se déplacera sur le terrain pour trouver le but adverse |
− | * Repérer le but adverse | + | * Tirer : un mécanisme permettra au robot d'éjecter la balle |
− | * Tirer | + | * Recevoir les ordres : il doit être capable de recevoir les ordres venant du but |
==== Phase finale ==== | ==== Phase finale ==== | ||
− | * Retourner au garage | + | * Retourner au garage : le robot devra se déplacer grâce à son environnement pour parvenir à son garage |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Objectifs du but === | === Objectifs du but === | ||
---- | ---- | ||
− | |||
* Activer son émetteur infrarouge à la demande d'un joueur | * Activer son émetteur infrarouge à la demande d'un joueur | ||
Ligne 52 : | Ligne 51 : | ||
== <span style="font-size:32px;line-height:40px;">Journal de bord</span> == | == <span style="font-size:32px;line-height:40px;">Journal de bord</span> == | ||
+ | Ce journal de bord retrace l'histoire de notre robot, de sa conception à sa réalisation. Le but de cette partie n'est pas de raconter en détails nos séances mais de donner une idée de notre progression. La plupart des étapes de ce journal seront développées dans les parties suivantes. | ||
+ | |||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 1 : 18/01/2016 === | === JOUR 1 : 18/01/2016 === | ||
+ | </div> | ||
+ | |||
* Choix du robot compétiteur | * Choix du robot compétiteur | ||
Ligne 61 : | Ligne 66 : | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 2 : 21/01/2016 === | ||
+ | </div> | ||
− | |||
* Test capteur ultrasons (distance) | * Test capteur ultrasons (distance) | ||
Ligne 69 : | Ligne 76 : | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 3 : 25/01/2016 === | ||
+ | </div> | ||
− | |||
* Soudures moteurs et contrôleur | * Soudures moteurs et contrôleur | ||
* Montage du châssis | * Montage du châssis | ||
* Branchement électrique du contrôleur et des moteurs + renseignements sur le contrôleur | * Branchement électrique du contrôleur et des moteurs + renseignements sur le contrôleur | ||
− | * | + | * Début de réflexion sur le mécanisme de la pince |
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 4 : 28/01/2016 === | ||
+ | </div> | ||
− | |||
* Programme pour le contrôle des moteurs via le contrôleur (fonctionnel) | * Programme pour le contrôle des moteurs via le contrôleur (fonctionnel) | ||
Ligne 88 : | Ligne 99 : | ||
</gallery> | </gallery> | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 5 : 29/01/2016 === | === JOUR 5 : 29/01/2016 === | ||
+ | </div> | ||
+ | |||
* Programme capteur de lignes | * Programme capteur de lignes | ||
Ligne 96 : | Ligne 110 : | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 6 : 01/02/2016 === | ||
+ | </div> | ||
− | |||
− | * Prise en main du module | + | * Prise en main du module XBee |
* Allumage d’une LED à distance pour les tests | * Allumage d’une LED à distance pour les tests | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 7 : 04/02/2016 === | === JOUR 7 : 04/02/2016 === | ||
+ | </div> | ||
+ | |||
* Programme suiveur de lignes | * Programme suiveur de lignes | ||
Ligne 112 : | Ligne 131 : | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 8 : 08/02/2016 === | ||
+ | </div> | ||
− | |||
* Premiers essais de PCB (Fritzing) | * Premiers essais de PCB (Fritzing) | ||
Ligne 119 : | Ligne 140 : | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 9 : 11/02/2016 === | === JOUR 9 : 11/02/2016 === | ||
+ | </div> | ||
+ | |||
* Plan de la pince et mesures | * Plan de la pince et mesures | ||
Ligne 126 : | Ligne 150 : | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 10 : 22/02/2016 === | ||
+ | </div> | ||
− | |||
* Recherche de la balle (3 photo transistors pour le moment) | * Recherche de la balle (3 photo transistors pour le moment) | ||
Ligne 133 : | Ligne 159 : | ||
* Contrôleur qui ne fonctionne pas avec 1 seul ordre moteur | * Contrôleur qui ne fonctionne pas avec 1 seul ordre moteur | ||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 11 : 25/02/2016 === | === JOUR 11 : 25/02/2016 === | ||
+ | </div> | ||
+ | |||
* Premiers essais du suiveur de ligne à l'aide de 2 capteurs (il ne gère pas encore les virages) | * Premiers essais du suiveur de ligne à l'aide de 2 capteurs (il ne gère pas encore les virages) | ||
Ligne 144 : | Ligne 174 : | ||
</gallery> | </gallery> | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 12 : 29/02/2016 === | === JOUR 12 : 29/02/2016 === | ||
+ | </div> | ||
+ | |||
* Réservation de l'imprimante 3D | * Réservation de l'imprimante 3D | ||
* Suiveur de ligne complet avec 4 capteurs (il gère maintenant les virages) | * Suiveur de ligne complet avec 4 capteurs (il gère maintenant les virages) | ||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 13 : 03/03/2016 === | ||
+ | </div> | ||
− | |||
* Commencement du PCB sur Fritzing (PCB unique sous forme de shield) | * Commencement du PCB sur Fritzing (PCB unique sous forme de shield) | ||
* Impression du support et des 2 engrenages (problème de dimensionnement de la garde au sol et de la fente) | * Impression du support et des 2 engrenages (problème de dimensionnement de la garde au sol et de la fente) | ||
Ligne 160 : | Ligne 196 : | ||
</gallery> | </gallery> | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 14 : 07/03/2016 === | === JOUR 14 : 07/03/2016 === | ||
− | * | + | </div> |
+ | |||
+ | |||
+ | * PCB terminé (il faut maintenant le faire vérifier auprès des enseignants) | ||
<gallery style="margin: 30px 0;"> | <gallery style="margin: 30px 0;"> | ||
Ligne 167 : | Ligne 207 : | ||
</gallery> | </gallery> | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 15 : 10/03/2016 === | === JOUR 15 : 10/03/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
* Réalisation du circuit électrique du but (photo) | * Réalisation du circuit électrique du but (photo) | ||
* Programme du but terminé, encore quelques bricoles à modifier | * Programme du but terminé, encore quelques bricoles à modifier | ||
Ligne 177 : | Ligne 221 : | ||
</gallery> | </gallery> | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 16 : 14/03/2016 === | === JOUR 16 : 14/03/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
* Les 3 PCB sont terminés | * Les 3 PCB sont terminés | ||
* Le suiveur de ligne est complet, le robot s'arrête si un obstacle est sur son chemin (vidéo) | * Le suiveur de ligne est complet, le robot s'arrête si un obstacle est sur son chemin (vidéo) | ||
Ligne 188 : | Ligne 236 : | ||
</gallery> | </gallery> | ||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
=== JOUR 17 : 17/03/2016 === | === JOUR 17 : 17/03/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
* Modification du PCB contrôleur qui était encore en top et non en bottom | * Modification du PCB contrôleur qui était encore en top et non en bottom | ||
* Les PCB ont été vérifiés | * Les PCB ont été vérifiés | ||
* Recherche de la balle complet, le robot cherche sans sortir du terrain | * Recherche de la balle complet, le robot cherche sans sortir du terrain | ||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 18 : 21/03/2016 === | ||
+ | </div> | ||
− | |||
* Modification de la recherche de balle, plus performant | * Modification de la recherche de balle, plus performant | ||
* Réception des 3 PCB | * Réception des 3 PCB | ||
Ligne 206 : | Ligne 261 : | ||
Fichier:support2.jpg|Support capteurs | Fichier:support2.jpg|Support capteurs | ||
</gallery> | </gallery> | ||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 19 : 24/03/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
+ | * Les PCB sont imprécis : plan de masse trop proche des connecteurs (courts-circuits, difficultés pour souder) | ||
+ | * Correction des PCB en grattant les pistes (échec) | ||
+ | * La pince est opérationnel | ||
+ | * Le suiveur de lignes refonctionne (déplacement des capteurs) | ||
+ | |||
+ | <gallery style="margin: 30px 0;"> | ||
+ | Fichier:global_pince.jpg|Pince | ||
+ | </gallery> | ||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | |||
+ | === JOUR 20 : 18/04/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
+ | * Les PCB ont été regravés avec plus d'espace | ||
+ | * PCB principal imprimé en Top, on doit souder de l'autre coté pour corriger | ||
+ | * Soudures terminés sur le principal | ||
+ | * Démontage du robot (fils, breadboard ...) | ||
+ | * Montage du PCB et réagencement du robot (PHOTO) | ||
+ | |||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | |||
+ | === JOUR 21 : 21/04/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
+ | * Soudures terminés sur les 2 autres PCB | ||
+ | * Recâblage plus propre | ||
+ | * Premier test avec PCB | ||
+ | * Les moteurs tournent mais problèmes avec les suiveurs de lignes | ||
+ | |||
+ | <gallery style="margin: 30px 0;"> | ||
+ | Fichier:pcb_photo1.jpg|2ème version PCB phototransistors | ||
+ | Fichier:pcb_photo2.jpg|Idem | ||
+ | </gallery> | ||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 22 : 25/04/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
+ | * Le suiveur de lignes fonctionne correctement avec le PCB | ||
+ | * Altérations du PCB mère, certaines pistes/pastilles se détachent | ||
+ | * Installation du PCB suiveur de lignes | ||
+ | |||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 23 : 28/04/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
+ | * Envoie d'un nouveau PCB à graver (en bottom) | ||
+ | * Ajout d'un cerclage en carton sur la pince | ||
+ | * Le système de tir est opérationnel | ||
+ | |||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 24 : 02/05/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
+ | * Mise en place des 5 phototransitors | ||
+ | * Avancement sur le but | ||
+ | * Installation PCB photo (1 seul phototransistor qui fonctionne) | ||
+ | |||
+ | |||
+ | <div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;"> | ||
+ | === JOUR 25 : 03/05/2016 === | ||
+ | </div> | ||
+ | |||
+ | |||
+ | * Le PCB mère réimprimmé est toujours mauvais, on abandonne par manque de temps | ||
+ | * Découpe de l'ancien PCB mère, on a trouvé les problèmes des phototransitors (pistes et pastilles décollées) | ||
+ | * Cable management (robot et but) | ||
+ | * Programme de recherche et de capture fonctionnel | ||
+ | * But terminé et fonctionnel | ||
+ | |||
== <span style="font-size:32px;line-height:40px;">Réalisation mécanique</span> == | == <span style="font-size:32px;line-height:40px;">Réalisation mécanique</span> == | ||
Ligne 236 : | Ligne 376 : | ||
Ayant déjà eu des expériences avec la modélisation 3D, on a pu sauter l'étape de l’apprentissage. On a choisi, par habitude, d'utiliser le logiciel Solidworks pour concevoir les pièces. Mis à part quelques difficultés pour dessiner des pièces courbées, nous n'avons rencontré aucun problème majeur lors de la réalisation. | Ayant déjà eu des expériences avec la modélisation 3D, on a pu sauter l'étape de l’apprentissage. On a choisi, par habitude, d'utiliser le logiciel Solidworks pour concevoir les pièces. Mis à part quelques difficultés pour dessiner des pièces courbées, nous n'avons rencontré aucun problème majeur lors de la réalisation. | ||
− | * '''Impression 3D''' | + | <gallery style="margin: 30px 0;"> |
+ | Fichier:pince_last.PNG|Vue d'ensemble | ||
+ | </gallery> | ||
+ | |||
+ | * '''Impression 3D et montage''' | ||
Fichiers au bon format (STL), créneau réservé, direction le Fabricarium pour l'étape la plus concrète : l'impression. Pour notre première visite, un élève en 4ème année nous a gentiment expliqué le fonctionnement des deux imprimantes. Compte tenu de notre besoin de précision sur les pièces, il nous a conseillé plusieurs réglages comme un taux de remplissage bas. Pour cette première impression, on avait choisi de ne faire que le support et les engrenages, ce qui nous aurait permis d'enfin fixer nos capteurs. Mais malheureusement, le support n'était pas dimensionné correctement, la barre du bas était trop basse et trop fine. On a donc repris les mesures et revu le modèle 3D. | Fichiers au bon format (STL), créneau réservé, direction le Fabricarium pour l'étape la plus concrète : l'impression. Pour notre première visite, un élève en 4ème année nous a gentiment expliqué le fonctionnement des deux imprimantes. Compte tenu de notre besoin de précision sur les pièces, il nous a conseillé plusieurs réglages comme un taux de remplissage bas. Pour cette première impression, on avait choisi de ne faire que le support et les engrenages, ce qui nous aurait permis d'enfin fixer nos capteurs. Mais malheureusement, le support n'était pas dimensionné correctement, la barre du bas était trop basse et trop fine. On a donc repris les mesures et revu le modèle 3D. | ||
− | + | On a par la suite appris que l'imprimante 3D était en panne pour 2 semaines. Heureusement, le groupe de Kévin Descamps et d'Antoine Gosse nous a gentiment donné le premier modèle de leur pince (les 2 mâchoires). Pour la fixer on a apporté quelques modifications à notre support mal dimensionné. On a placé des entretoises dans les bras de la pince puis on a disposé les extrémités dans des trous plus large préalablement percés sur le support. Pour assurer la stabilité du mécanisme, on a bricolé 2 pièces en bois, l'une servant à maintenir le servomoteur et l'autre un des bras. | |
+ | |||
+ | <gallery style="margin: 30px 0;"> | ||
+ | Fichier:global_pince.jpg|Vue d'ensemble | ||
+ | Fichier:fix_bras.jpg|Fixation d'un bras | ||
+ | Fichier:fix_servo.jpg|Fixation du servomoteur | ||
+ | </gallery> | ||
=== Conception du support capteurs === | === Conception du support capteurs === | ||
− | Le support des capteurs est intégré au support de la pince. | + | Le support des capteurs est intégré au support de la pince. Au départ, il s'agissait d'une simple barre en plastique située au ras du sol sur laquelle on pouvait venir visser les capteurs de lignes. Mais son mauvais dimensionnement (la barre touche le sol et est beaucoup trop fine pour accueillir des trous de perçage) et la panne de l'imprimante 3D nous ont poussé à réfléchir à une solution alternative. On a décidé de sectionner le bas du support et d'y mettre à la place une barre en bois que l'on a récupéré. Cette pièce est attachée par 2 vis sur les bras du support et comporte 4 trous qui permettent la fixation des suiveurs de lignes. |
+ | |||
+ | <gallery style="margin: 30px 0;"> | ||
+ | Fichier:support2.jpg|Support capteurs | ||
+ | </gallery> | ||
+ | |||
+ | == <span style="font-size:32px;line-height:40px;">Réalisation informatique/électronique</span> == | ||
+ | |||
+ | === Circuits imprimés === | ||
+ | |||
+ | Afin d'éviter un amas de câbles au dessus du robot, nous avons réalisé des circuits imprimés (PCB). Durant les 19 premières séances, nous avons travaillé exclusivement sur une platine d'expérimentation plus souvent appelé "breadboard". Elle nous a permis d’expérimenter des montages et de tester nos différents capteurs très simplement et surtout rapidement. Nous nous sommes occupés des PCB à partir de la 13ème séance. Au départ, il était question d'un unique PCB que l'on aurait branché comme un shield entre l'Arduino et le module ZigBee. Puis, toujours dans l'optique de simplifier le câblage au maximum, on a pris la décision d'en concevoir 3. | ||
+ | |||
+ | '''PCB du contrôleur des moteurs : '''il s'agit de notre PCB mère, les 2 autres PCB y seront reliés. On retrouve sur cette carte un emplacement pour souder le contrôleur moteurs (1) ainsi qu'un autre pour le capteur ultrasons (2). En (3), il s'agit de 2 connecteurs sur lesquels arrivent les fils des piles. Cette source alimente à la fois l'Arduino (Vin), les moteurs et les 2 autres PCB. | ||
+ | |||
+ | '''PCB des phototransistors : '''ce PCB est déporté à l'avant du robot. Il permet d'alimenter les 5 photo transistors et d'en recueillir les informations. | ||
− | + | '''PCB des suiveurs de lignes : '''également déporté à l'avant du robot, il alimente les 4 capteurs et recueille les informations. | |
− | |||
− | + | Ces 3 circuits imprimés ont été réalisés à l'aide du logiciel Fritzing. Ce logiciel n'est guère utilisé dans le monde professionnel mais il a le mérite d'être simple d'utilisation, ce qu'il nous fallait pour ne pas perdre trop de temps. La première tentative de fabrication fut un échec, en effet, le plan de masse était connecté à certains endroits aux pistes ainsi qu'aux connecteurs (voir image ci-dessous). Pour pallier à ce problème, on a dans un premier temps essayé de gratter le cuivre. Bien que cette solution était fonctionnelle, il était toujours très difficile de souder les composants sans étaler de l'étain sur le PCB. Finalement, nous avons modifié sous Fritzing l'écart entre le plan de masse et les pistes (voir image ci-dessous). | |
− | + | Plus tard, on s'est aperçu que le PCB mère avait été gravé en top. Pour ne pas le réimprimer une troisième fois, on a décidé de le retourner et donc de souder les composants sur le coté cuivré. De ce fait, nous devions laisser un espace entre le composant et la pastille pour y mettre l'étain. Ça n'a pas été facile mais au final le résultat était satisfaisant. Néanmoins, après plusieurs d'utilisations et donc de sollicitations, les pistes et les pastilles ont commencé à s'enlever occasionnant ainsi des problèmes sur nos programmes. A quelques jours de notre présentation vidéo, nous avons réimprimé le PCB en bottom mais encore une fois celui-ci est sorti en top. On a contrôlé et comparé notre fichier Fritzing avec les autres groupes, et apparemment, chose que nous ne savions pas, il fallait mettre le modèle Arduino en top. Afin de rattraper notre erreur, on a découpé notre PCB pour récupérer les connecteurs femelles de l'Arduino. | |
− | + | Voici à présent quelques images annotées de nos PCB. | |
− | = | + | <gallery style="margin: 30px 0;"> |
+ | Fichier:pcb_fail.jpg|1ère version PCB phototransistors | ||
+ | Fichier:pcb_annote.jpg|PCB annoté | ||
+ | </gallery> | ||
− | + | <gallery style="margin: 30px 0;"> | |
− | + | Fichier:20160331_151231.jpg|2ème version PCB contrôleur | |
+ | Fichier:20160331_151246.jpg|2ème version PCB phototransistors | ||
+ | Fichier:20160331_151238.jpg|2ème version PCB suiveur | ||
+ | </gallery> | ||
− | === | + | === Fonctions du robot === |
− | + | Dans cette partie, nous détaillerons l'ensemble des fonctions du robot. Pour ce faire, nous parlerons pour chaque fonction des différents composants électroniques utilisés et de l'élaboration du programme associé. Ces programmes seront présents de manière simplifiés pour une lecture rapide mais ils seront également disponibles en téléchargement. | |
− | |||
− | + | <div style="background-color:#ACDACF;padding:7px;text-align:center;border:6px solid #cfefe7;"> | |
==== Déplacement vers la balle ==== | ==== Déplacement vers la balle ==== | ||
+ | </div> | ||
+ | |||
+ | |||
+ | [[Fichier:motage_photo.PNG|400px|thumb|left|Capteur ultrasons]] | ||
+ | <span style="color:red;">'''Fil rouge : '''</span>alimentation 5V du capteur. | ||
+ | |||
+ | <span style="color:black;">'''Fil noir : '''</span>il s'agit du fil de masse. | ||
+ | |||
+ | <span style="color:green;">'''Fil vert : '''</span>tension qui varie selon l'intensité du rayonnement infrarouge captée par le phototransistor. La valeur de la cette tension est lue par une entrée analogique sur l'Arduino. | ||
+ | |||
+ | <br style="clear: both;"> | ||
+ | |||
+ | '''Description''' | ||
+ | |||
+ | Pour attraper la balle, le robot doit d'abord être en mesure de la trouver et de s'en approcher le plus possible. Pour cela, nous avons positionné 5 phototransistors sur le devant du robot afin d'élargir son "champ de vision". De base, le robot avance tout droit. Il se déplace selon la tension retournée par le dispositif (résistance + phototransistor). Lorsqu'il capte une ligne extérieur, il fait marche arrière et change son angle, ce qui lui permet de parcourir le terrain. | ||
<include iframe src="https://www.youtube.com/embed/ceKmi5ZQNQ0" width="600px" height="400px" frameborder="0" scrolling="yes" /> | <include iframe src="https://www.youtube.com/embed/ceKmi5ZQNQ0" width="600px" height="400px" frameborder="0" scrolling="yes" /> | ||
+ | '''Programmation''' | ||
− | + | while (chercher balle) | |
+ | { | ||
+ | if (ligne détectée) | ||
+ | { | ||
+ | marche arrière pendant 1.5s | ||
+ | if (photo_droite supérieur) | ||
+ | { | ||
+ | Rotation à droite | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | Rotation à gauche | ||
+ | } | ||
+ | } | ||
+ | if (photo_droite supérieur) | ||
+ | { | ||
+ | Avancer sur la droite | ||
+ | } | ||
+ | if (photo_gauche supérieur) | ||
+ | { | ||
+ | Avancer sur la gauche | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | Aller tout droit | ||
+ | } | ||
+ | } | ||
− | |||
− | + | '''Problèmes''' | |
− | + | Du fait de la faible portée des phototransistors, nous avons modifié notre programme de base pour que le robot cherche la balle en parcourant le terrain même lorsqu'il ne reçoit plus d'informations venant des phototransitors. | |
− | |||
− | = | + | <div style="background-color:#ACDACF;padding:7px;text-align:center;border:6px solid #cfefe7;"> |
− | + | ==== Détecter un obstacle ==== | |
+ | </div> | ||
− | |||
− | + | [[Fichier:ultra.png|400px|thumb|left|Capteur ultrasons]] | |
+ | <span style="color:red;">'''Fil rouge : '''</span>alimentation 5V du capteur. | ||
+ | |||
+ | <span style="color:black;">'''Fil noir : '''</span>il s'agit du fil de masse. | ||
+ | |||
+ | <span style="color:green;">'''Fil vert : '''</span>le trig permet de déclencher une mesure lorsqu'une impulsion de 10 µs au minimum lui parvient. | ||
+ | |||
+ | <span style="color:orange;">'''Fil orange: '''</span>le echo envoie une impulsion de durée variable selon la distance qui sépare le capteur de l'obstacle. | ||
+ | |||
+ | Pour calculer la distance qui sépare le capteur ultrasons de son obstacle, on utilise la formule suivante : Distance = Temps / 58 | ||
+ | |||
+ | Cette formule se retrouve également. La vitesse du son étant approximativement 340 m/s ou 34 000 cm/s on a : ''Distance (cm) = 34 000 * Temps (s)'' soit encore ''Distance = 34 000 * 10^-6 * Temps (µs) = 0.034 * Temps (µs)''. | ||
+ | |||
+ | Comme l'onde ultra-sonore parcoure un aller-retour, il faut diviser cette distance par 2. Ainsi ''Distance = 0.017 * Temps (µs)'' ou encore ''Distance = Temps (µs) / 58''. | ||
+ | |||
+ | <br style="clear: both;"> | ||
+ | |||
+ | '''Description''' | ||
+ | |||
+ | La détection d'obstacles fait parti des fonctions diverses du robot. Elle sera active durant la phase de recherche et le retour au garage afin de ne pas percuter le robot adverse ou tout autre objet de l'environnement. Dans le cadre de la recherche, si le robot détecte un obstacle à 15 cm, il change de direction et repart alors que pour le suivi de ligne, il s’arrête tant que l'objet et devant lui. Le capteur ultrasons est placé au dessus de la pince et pointe légèrement vers le sol de telle sorte qu'il ne se capte pas lui même. | ||
+ | |||
+ | <include iframe src="https://www.youtube.com/embed/BCNhByGpGvk" width="600px" height="400px" frameborder="0" scrolling="yes" /> | ||
+ | |||
+ | '''Programmation''' | ||
+ | |||
+ | Envoyer une impulsion de 10µs | ||
+ | Lire la valeur du echo | ||
+ | Convertir la valeur echo en cm | ||
+ | |||
+ | |||
+ | '''Problèmes''' | ||
+ | |||
+ | Le relevé des distances nous a causé quelques problèmes pour les valeurs très grandes ou à l’inverse très petites. La capteur plante et renvoie 0 constamment quelque soit la distance. Il est nécessaire de reset l'Arduino. La fiche technique indique une plage d'utilisation de 2 cm à 5 m mais ne précise pas son dysfonctionnement dans le cas ou ses valeurs sont dépassées. Un petit tour sur les forums nous a permis de voir que ce problème était connu de tous et qu'il n'y avait pas de solutions. Au final, dans la pratique, le robot ne sera pas confronté à ce genre de configuration. | ||
+ | |||
+ | |||
+ | <div style="background-color:#ACDACF;padding:7px;text-align:center;border:6px solid #cfefe7;"> | ||
+ | |||
+ | ==== Capture de la balle ==== | ||
+ | </div> | ||
+ | |||
+ | |||
+ | '''Description''' | ||
+ | |||
+ | Lorsque le robot est assez proche de la balle, il doit être en mesure de la capturer. Pour cela, nous avons mis un 5ème phototransistor à l’intérieur de la pince qui va venir commander le servomoteur. | ||
+ | |||
+ | <include iframe src="https://www.youtube.com/embed/npJAch75fGA" width="600px" height="400px" frameborder="0" scrolling="yes" /> | ||
+ | |||
+ | '''Programmation''' | ||
+ | |||
+ | while (chercher balle) | ||
+ | { | ||
+ | if (photo > seuil) | ||
+ | { | ||
+ | Fermer la pince | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | '''Problèmes''' | ||
+ | |||
+ | On a du faire face à des problèmes d'exposition lumineuse qui venaient perturber la fermeture de la pince (fermeture trop tôt). | ||
+ | |||
+ | |||
+ | <div style="background-color:#ACDACF;padding:7px;text-align:center;border:6px solid #cfefe7;"> | ||
+ | |||
+ | ==== Communication sans fil ==== | ||
+ | </div> | ||
+ | |||
+ | |||
+ | Pour expérimenter la communication sans fil avec XBee, nous avons créé un programme permettant de contrôler le robot à distance grâce aux touches du clavier d'un PC. Cette fonctionnalité n'a aucun intérêt concret dans le projet mais elle a nous a permis d'en apprendre davantage sur la communication série. | ||
+ | |||
+ | <include iframe src="https://www.youtube.com/embed/enUwcWuyz-4" width="600px" height="400px" frameborder="0" scrolling="yes" /> | ||
+ | |||
+ | Concernant la communication entre robots et buts, celle-ci aurait du s’effectuer à l'aide de messages contenant également les identifiants : | ||
+ | |||
+ | MATCH_START : Robot ramasseur => Joueurs | ||
+ | BUT1_ON : Robot joueur => But 1 | ||
+ | BUT1_OFF : Robot joueur => But 1 | ||
+ | BUT2_ON : Robot joueur => But 2 | ||
+ | BUT2_OFF : Robot joueur => But 2 | ||
+ | GOAL : But 1/2 => Robot ramasseur / joueur | ||
+ | |||
+ | |||
+ | <div style="background-color:#ACDACF;padding:7px;text-align:center;border:6px solid #cfefe7;"> | ||
+ | |||
+ | ==== Repérage du but adverse ==== | ||
+ | </div> | ||
+ | |||
+ | |||
+ | Cette fonction n'a pas été réalisée mais elle est quasiment identique à la recherche de balle étant donné que le but émet des rayons infrarouges. | ||
+ | |||
+ | |||
+ | <div style="background-color:#ACDACF;padding:7px;text-align:center;border:6px solid #cfefe7;"> | ||
+ | |||
+ | ==== Tir au but ==== | ||
+ | </div> | ||
+ | |||
+ | '''Description''' | ||
+ | |||
+ | On a fait le choix de ne pas réaliser de système mécanique pour le tir mais d'utiliser ce qu'on avait déjà en notre possession : une pince et des roues motorisées. Pour tirer, le robot s'arrête, il ouvre la pince puis fait une petite accélération et se stop net. Ainsi, la balle est propulsée vers l'avant, suivant la direction du robot. | ||
+ | |||
+ | <include iframe src="https://www.youtube.com/embed/wd7sDmKKMmM" width="600px" height="400px" frameborder="0" scrolling="yes" /> | ||
+ | |||
+ | '''Programmation''' | ||
+ | |||
+ | Ouverture de la pince | ||
+ | Mise en marche des moteurs | ||
+ | Délai de 1s | ||
+ | Arrêt des moteurs | ||
+ | |||
+ | '''Problèmes''' | ||
+ | |||
+ | Aucun problème n'a été constaté sur cette partie. | ||
+ | |||
+ | |||
+ | <div style="background-color:#ACDACF;padding:7px;text-align:center;border:6px solid #cfefe7;"> | ||
==== Retour au garage ==== | ==== Retour au garage ==== | ||
+ | </div> | ||
+ | |||
+ | |||
+ | [[Fichier:capt_ligne.PNG|400px|thumb|left|Suiveur de lignes]] | ||
+ | <span style="color:red;">'''Fil rouge : '''</span>alimentation 5V du capteur. | ||
+ | |||
+ | <span style="color:black;">'''Fil noir : '''</span>il s'agit du fil de masse. | ||
+ | |||
+ | <span style="color:green;">'''Fil vert : '''</span>ce fil correspond à la sortie du capteur. Il est branché sur une entrée analogique et envoie des valeurs comprises entre 0 et 1023 selon l'intensité du noir. | ||
+ | |||
+ | <br style="clear: both;"> | ||
+ | |||
+ | '''Description''' | ||
+ | |||
+ | <gallery style="margin: 30px 0;"> | ||
+ | Fichier:FAST_lignes.PNG|Suivre une ligne | ||
+ | </gallery> | ||
+ | |||
+ | Le retour au garage s'effectue grâce à 4 capteurs de lignes qui vont permettre au robot de suivre une ligne pour se rendre à son garage. Au niveau du garage, la couleur de la ligne est différente et peut être différenciée du noir, ce qui lui permet ainsi de se garer. Nous avons choisi d'opérer avec 4 suiveurs afin d'accroître la vitesse du robot. Nous en avons 2 centraux qui permettent une correction douce du robot, les 2 moteurs tournent mais l'un est ralenti. Ceux aux extrémités sont utiles pour les virages plus importants comme les angles droits du terrain. Dans ce cas, un des 2 moteurs est complètement à l’arrêt. | ||
<include iframe src="https://www.youtube.com/embed/gIu50icPo4E" width="600px" height="400px" frameborder="0" scrolling="yes" /> | <include iframe src="https://www.youtube.com/embed/gIu50icPo4E" width="600px" height="400px" frameborder="0" scrolling="yes" /> | ||
+ | '''Programmation''' | ||
+ | |||
+ | while (rentrer au garage) | ||
+ | { | ||
+ | Lecture des données | ||
+ | while (cptd < seuil && cptdd < seuil && cptg < seuil && cptgg < seuil) | ||
+ | { | ||
+ | Même vitesse des moteurs | ||
+ | Lecture des données | ||
+ | } | ||
+ | if (cptd >= seuil && cptdd <= seuil && cptgg <= seuil) | ||
+ | { | ||
+ | Moteur gauche tourne | ||
+ | Moteur droit ralenti | ||
+ | } | ||
+ | if (cptg >= seuil && cptdd <= seuil && cptgg <= seuil) | ||
+ | { | ||
+ | Moteur gauche ralenti | ||
+ | Moteur droit tourne | ||
+ | } | ||
+ | if(cptdd >= seuil) | ||
+ | { | ||
+ | while(cptd < seuil) | ||
+ | { | ||
+ | Moteur gauche tourne | ||
+ | Moteur droit à l’arrêt | ||
+ | Lecture des données | ||
+ | } | ||
+ | } | ||
+ | if(cptgg >= seuil) | ||
+ | { | ||
+ | while(cptg < seuil) | ||
+ | { | ||
+ | Moteur gauche à l’arrêt | ||
+ | Moteur droit tourne | ||
+ | Lecture des données | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | '''Problèmes''' | ||
− | + | Pour optimiser au maximum, il nous a fallu modifier les nombreux paramètres de l'algorithme comme les seuils de détection et les délais des moteurs. On a également du abaisser les capteurs de lignes pour qu'ils soient plus proche du sol et qu'ils puissent sortir des valeurs cohérentes quelque soit la luminosité ambiante. Lorsque l'on a réalisé le support, on a oublié de mettre les capteurs latéraux en retrait par rapport à ceux du centre. Le robot ne parvenait plus à tourner correctement en angle droit. Une fois la modification apportée, tout refonctionnait comme avant. | |
== <span style="font-size:32px;line-height:40px;">Résultat final et tests</span> == | == <span style="font-size:32px;line-height:40px;">Résultat final et tests</span> == | ||
− | + | ||
− | + | [[Fichier:final1.jpg|300px|thumb|left|Vue 1]] | |
+ | [[Fichier:final2.jpg|300px|thumb|right|Vue 2]] | ||
+ | [[Fichier:final3.jpg|300px|thumb|center|Vue 3]] | ||
+ | |||
+ | |||
+ | Voici des photos du robot tel que nous l'avons présenté lors de la vidéo. | ||
== <span style="font-size:32px;line-height:40px;">But</span> == | == <span style="font-size:32px;line-height:40px;">But</span> == | ||
Ligne 308 : | Ligne 696 : | ||
=== Réalisation mécanique === | === Réalisation mécanique === | ||
− | + | [[Fichier:plan_but.jpg|200px|thumb|left|Plans du but]] | |
− | + | <br style="clear: both;"> | |
+ | |||
+ | Au départ, il était question de réaliser le but avec la découpeuse laser du Fabricarium. Seulement, avec tout le travail que nous avions en salle, on reportait chaque semaine la découpe. Les plans vectoriels ont été réalisés avec Adobe Illustrator mais n'ont pas été utilisés. On s'est servi d'un panneau de contreplaqué sur lequel on a scié les différents éléments du but que l'on a ensuite assemblé avec des équerres et des vis. Ensuite, nous avons percé un trou sur une des faces latérales afin d'y encastrer le capteur ultrasons. Pour la pente, nous l'avons fixé avec deux charnières ce qui nous permet d'accéder facilement au dessous du but où sont fixés les composants électroniques. | ||
+ | |||
+ | <gallery style="margin: 30px 0;"> | ||
+ | Fichier:cage_but.jpg|But sans pente | ||
+ | </gallery> | ||
=== Réalisation électronique === | === Réalisation électronique === | ||
− | + | <div style="background-color:#A7DBD8;padding:7px;text-align:center;border:6px solid #c3edeb;"> | |
− | + | ==== Affichage du score ==== | |
+ | </div> | ||
+ | |||
+ | |||
+ | [[Fichier:afficheur_but.PNG|400px|thumb|left|Suiveur de lignes]] | ||
+ | <span style="color:red;">'''Fil rouge : '''</span>alimentation 5V du capteur. | ||
+ | |||
+ | <span style="color:black;">'''Fil noir : '''</span>fil de masse. | ||
+ | |||
+ | <span style="color:green;">'''Fil vert : '''</span>horloge du bus I2C (SCL). | ||
+ | |||
+ | <span style="color:blue;">'''Fil bleu : '''</span>transfert des données du bus I2C (SDA). | ||
+ | |||
+ | <br style="clear: both;"> | ||
+ | |||
+ | '''Description''' | ||
+ | |||
+ | L'affichage du score se fait grâce à un afficheur 7 segments (4 digits) contrôlé à l'aide d'un Arduino UNO. On a choisit d'utiliser l'interface I2C pour communiquer afin d'économiser le nombre de câbles. | ||
+ | |||
+ | <include iframe src="https://www.youtube.com/embed/Gh0oCmxG57Y" width="600px" height="400px" frameborder="0" scrolling="yes"/> | ||
+ | |||
+ | '''Programmation''' | ||
+ | |||
+ | Le programme consiste à incrémenter des nombres sur l'afficheur en fonction des données recueillis par l'Arduino et plus précisément le capteur ultrasons qui lui est connecté. | ||
+ | |||
+ | '''Problèmes''' | ||
+ | |||
+ | Il nous a fallu prendre en main la librairie ''Wire'' qui n'est pas simple d'utilisation. | ||
+ | |||
+ | |||
+ | <div style="background-color:#A7DBD8;padding:7px;text-align:center;border:6px solid #c3edeb;"> | ||
+ | |||
+ | ==== Détection de la balle ==== | ||
+ | </div> | ||
+ | |||
+ | |||
+ | '''Description''' | ||
+ | |||
+ | Nous avons utilisé un capteur à ultrasons relié à l'Arduino. Il est placé sur une des faces latérales du but. Lorsque celui-ci est activé par un robot compétiteur, le capteur se calibre en prenant une mesure devant lui. Ainsi, quand il détectera une variation de cette distance, cela voudra dire que la balle est entrée. L'afficheur se chargera d'incrémenter le score de 1 point. | ||
+ | |||
+ | '''Programmation''' | ||
+ | |||
+ | dist_init = distance sans obstacles | ||
+ | while(but activé) | ||
+ | if (dist_init - dist > 4) | ||
+ | incrémentation du score | ||
+ | désactivation du but | ||
+ | |||
+ | '''Problèmes''' | ||
+ | |||
+ | Ayant déjà pris en main le capteur à ultrasons du robot, celui-ci ne nous a pas posé de problème. | ||
=== Résultat final et tests === | === Résultat final et tests === | ||
− | + | Nous avons oublié de prendre des photos du but finalisé. Il a tout de même était filmé et présenté pendant la vidéo. | |
== <span style="font-size:32px;line-height:40px;">Conclusion</span> == | == <span style="font-size:32px;line-height:40px;">Conclusion</span> == | ||
− | + | === Retour sur le robot et le but === | |
− | + | ||
− | + | Nous ne sommes pas parvenus à finaliser complètement le robot. La plupart de ses fonctions ont été réalisées, à l'exception du repérage du but, mais elles ne forment pas un tout qui permet au robot de disputer un match. Nous avons passé de nombreuses heures à la fin à corriger des problèmes liés aux PCB, ce qui nous a pas mal ralenti dans l'élaboration de nouvelles fonctionnalités. Pour terminer avec le robot, nous avons quelques regrets sur son esthétisme. En effet, nous aurions aimé un robot plus abouti, avec moins de "bricolage" et surtout moins de câbles. | |
− | + | ||
− | + | Concernant le but, il fonctionne correctement et rempli ses tâches. Encore une fois, l'esthétisme aurait pu être mieux, avec notamment l'emploi de la découpeuse laser, mais ce n'est que du détail. | |
− | + | ||
− | + | Malheureusement, la partie communication a été délaissée par manque de concertation entre les groupes et de temps. La fin du BE est vite arrivée et nous avons consacré le peu d'heures qu'ils nous restaient à faire fonctionner notre robot pour la présentation vidéo. On a quand même tenu à essayer le module XBee, c'est pourquoi nous avons réalisé un programme permettant de contrôler notre robot avec les touches du clavier. | |
− | + | ||
− | + | === Impressions de Lucas === | |
− | + | ||
+ | J'ai trouvé ce projet particulièrement intéressant. En effet, ce robot était mon premier projet mené en totalité et en quasi autonomie. | ||
+ | |||
+ | Concevoir ce robot nous a appris énormément de choses dans différents domaines. J'ai énormément développé mes capacités à travailler en équipe en proposant chacun nos idées, en les confrontant et en conservant les meilleurs aspects de chacune, nous avons surmonté toutes les difficultés rencontrées. Ce bureau d'étude m'a également permis d'appliquer les notions théoriques d'électroniques et de programmation acquises au cours de ces deux années de PEIP. J'ai également découvert la modélisation 3D et la conception de circuits imprimés qui sont pour moi deux choses très importantes à maîtriser pour la suite de mon cursus. | ||
+ | |||
+ | J'ai beaucoup aimé la liberté qui nous a été laissée au cours de ce projet et qui nous a poussé à nous débrouiller par nous même pour résoudre nos problèmes au lieu d'attendre de l'aide. Mais surtout, cette liberté nous a appris à tenir des délais et à se fixer des objectifs intermédiaires pour chaque séances. Ce fonctionnement nous a permis d'avancer à un bon rythme en créant de nouvelles fonctions pour notre robot à chaque séance puis en les combinant. | ||
+ | |||
+ | Mon seul regret, qui n'enlève en rien le côté enrichissant de ce projet, est de ne pas avoir pu faire de match comme prévu au départ. | ||
+ | |||
+ | === Impressions d'Antoine === | ||
+ | |||
+ | Ce bureau d’études nous a permis de mener à bien un projet pluridisciplinaire mélangeant à la fois de l’électronique, de l’informatique et de la mécanique. Bien que les deux premières disciplines soient mes favorites, j’ai trouvé du plaisir à modéliser des pièces en 3D et à trouver des solutions pour la conception et le montage des différentes pièces. Réaliser ce robot m’a permis d’appliquer toutes les connaissances théoriques que j’avais acquises durant ma scolarité, à savoir le langage C et les bases de l’électronique. Sur le plan individuel, j’ai appris à tenir des délais et à faire des choix en conséquence. De plus, la liberté offerte par ce BE nous a permis de travailler en autonomie et ainsi de trouver des solutions par nous-même ou en demandant de l’aide au besoin. J’ai vraiment apprécié cette pédagogie qui pour moi développe notre curiosité en nous faisant chercher par nos propres moyens. | ||
+ | |||
+ | Je n’ai pas grand-chose d’autres à dire, mise à part que j’ai grandement apprécié le travail d’équipe sur ce projet et que celui-ci m’a même donné l’envie de créer par moi-même d’autres gadgets électroniques. | ||
+ | |||
+ | Pour terminer, je tiens à remercier Mr. Redon et Mr. Boe pour avoir dirigé ce bureau d’études ainsi que Mr. Engels pour sa patience durant le tournage de notre vidéo. |
Version actuelle datée du 23 mai 2016 à 23:46
Sommaire
- 1 Introduction
- 2 Journal de bord
- 2.1 JOUR 1 : 18/01/2016
- 2.2 JOUR 2 : 21/01/2016
- 2.3 JOUR 3 : 25/01/2016
- 2.4 JOUR 4 : 28/01/2016
- 2.5 JOUR 5 : 29/01/2016
- 2.6 JOUR 6 : 01/02/2016
- 2.7 JOUR 7 : 04/02/2016
- 2.8 JOUR 8 : 08/02/2016
- 2.9 JOUR 9 : 11/02/2016
- 2.10 JOUR 10 : 22/02/2016
- 2.11 JOUR 11 : 25/02/2016
- 2.12 JOUR 12 : 29/02/2016
- 2.13 JOUR 13 : 03/03/2016
- 2.14 JOUR 14 : 07/03/2016
- 2.15 JOUR 15 : 10/03/2016
- 2.16 JOUR 16 : 14/03/2016
- 2.17 JOUR 17 : 17/03/2016
- 2.18 JOUR 18 : 21/03/2016
- 2.19 JOUR 19 : 24/03/2016
- 2.20 JOUR 20 : 18/04/2016
- 2.21 JOUR 21 : 21/04/2016
- 2.22 JOUR 22 : 25/04/2016
- 2.23 JOUR 23 : 28/04/2016
- 2.24 JOUR 24 : 02/05/2016
- 2.25 JOUR 25 : 03/05/2016
- 3 Réalisation mécanique
- 4 Réalisation informatique/électronique
- 5 Résultat final et tests
- 6 But
- 7 Conclusion
Introduction
Le choix de ce bureau d'étude (BE) s'est fait avant tout par passion pour l'électronique et l'informatique. En effet, nous savions grâce à la page wiki que ce projet allait combiner ces deux domaines avec en prime une partie mécanique. L’abandon des Lego Mindstorms nous a également aidé dans notre décision, puisque nous trouvions plus intéressant de concevoir ce robot par nous même.
Après une petite heure de présentation du BE, l'ensemble des groupes s'est concerté pour le choix du projet. Nous nous sommes réparties les différents acteurs du "jeu de balle" de telle sorte qu'il soit possible de réaliser une démonstration à l’issue du BE. Nous avons choisi de travailler sur un robot joueur ainsi qu'une cage de but.
Objectifs du robot
Fonctions diverses
- Détecter les lignes extérieures : lorsque le robot se déplacera sur le terrain pour x raison, il ne devra pas dépasser les lignes extérieures du terrain
- Détecter les obstacles : le robot doit être capable d'éviter les collisions avec son adversaire ou toute autre objet de l'environnement
- Suivre une ligne : le robot va devoir se servir des lignes pour rentrer à son garage et donc les suivre
Phase de démarrage
- Recevoir les ordres : il doit être capable de recevoir les ordres venant du ramasseur
- Sortir du garage : il doit se positionner sur le terrain
Phase de jeu
- Se déplacer vers la balle : le robot devra être en mesure de capter la balle et de se déplacer vers elle
- Capturer la balle : un mécanisme devra permettre au robot de saisir la balle
- Demander l’activation du but : le robot enverra une information pour activer le but
- Repérer le but adverse : le robot se déplacera sur le terrain pour trouver le but adverse
- Tirer : un mécanisme permettra au robot d'éjecter la balle
- Recevoir les ordres : il doit être capable de recevoir les ordres venant du but
Phase finale
- Retourner au garage : le robot devra se déplacer grâce à son environnement pour parvenir à son garage
Objectifs du but
- Activer son émetteur infrarouge à la demande d'un joueur
- Détecter une balle
- Renvoyer la balle
- Incrémenter le score
- Envoyer des messages aux robots
Journal de bord
Ce journal de bord retrace l'histoire de notre robot, de sa conception à sa réalisation. Le but de cette partie n'est pas de raconter en détails nos séances mais de donner une idée de notre progression. La plupart des étapes de ce journal seront développées dans les parties suivantes.
JOUR 1 : 18/01/2016
- Choix du robot compétiteur
- Choix du châssis “2 roues” (moins de contraintes)
- Création d'un document collaboratif
- Réflexions sur les objectifs du robot (liste des fonctions à réaliser)
- Première ébauche de l'algorithme “Suivi des lignes“
JOUR 2 : 21/01/2016
- Test capteur ultrasons (distance)
- Test capteur RGB (imprécisions)
- Objectifs séance 3 : soudure, test reste des capteurs et actionneurs
JOUR 3 : 25/01/2016
- Soudures moteurs et contrôleur
- Montage du châssis
- Branchement électrique du contrôleur et des moteurs + renseignements sur le contrôleur
- Début de réflexion sur le mécanisme de la pince
JOUR 4 : 28/01/2016
- Programme pour le contrôle des moteurs via le contrôleur (fonctionnel)
- Premier test sur la réception de signaux infrarouges
- Le robot tirera grâce à sa vitesse
JOUR 5 : 29/01/2016
- Programme capteur de lignes
- Le robot se déplace et esquive les obstacles (1 seul capteur ultrasons)
- Quelques soucis avec des files défectueux
- Début d’agencement des éléments sur le châssis
JOUR 6 : 01/02/2016
- Prise en main du module XBee
- Allumage d’une LED à distance pour les tests
JOUR 7 : 04/02/2016
- Programme suiveur de lignes
- Problème mécanique pour les tests (capteurs pas assez proches du sol)
- Programme fonctionne théoriquement
- Soudage capteurs
JOUR 8 : 08/02/2016
- Premiers essais de PCB (Fritzing)
- Programme robot télécommandé (à l’aide des touches du PC)
JOUR 9 : 11/02/2016
- Plan de la pince et mesures
- Plan du support à capteurs de lignes
JOUR 10 : 22/02/2016
- Recherche de la balle (3 photo transistors pour le moment)
- Problème de résistance trop faible
- Contrôleur qui ne fonctionne pas avec 1 seul ordre moteur
JOUR 11 : 25/02/2016
- Premiers essais du suiveur de ligne à l'aide de 2 capteurs (il ne gère pas encore les virages)
- Changement des résistances (Recherche de la balle opérationnelle)
- Création des pièces de la pince sur Solidworks (support, engrenages, bras de pince)
JOUR 12 : 29/02/2016
- Réservation de l'imprimante 3D
- Suiveur de ligne complet avec 4 capteurs (il gère maintenant les virages)
JOUR 13 : 03/03/2016
- Commencement du PCB sur Fritzing (PCB unique sous forme de shield)
- Impression du support et des 2 engrenages (problème de dimensionnement de la garde au sol et de la fente)
JOUR 14 : 07/03/2016
- PCB terminé (il faut maintenant le faire vérifier auprès des enseignants)
JOUR 15 : 10/03/2016
- Réalisation du circuit électrique du but (photo)
- Programme du but terminé, encore quelques bricoles à modifier
- Problème d'incrémentation du score réglé
- Toujours pas d'accord sur les communications entre robots et buts
JOUR 16 : 14/03/2016
- Les 3 PCB sont terminés
- Le suiveur de ligne est complet, le robot s'arrête si un obstacle est sur son chemin (vidéo)
- Rajouter des trous de perçage sur les 2 PCB non-shield
JOUR 17 : 17/03/2016
- Modification du PCB contrôleur qui était encore en top et non en bottom
- Les PCB ont été vérifiés
- Recherche de la balle complet, le robot cherche sans sortir du terrain
JOUR 18 : 21/03/2016
- Modification de la recherche de balle, plus performant
- Réception des 3 PCB
- Bricolage d'un support de capteurs
- Montage du support et des capteurs
- Problème avec le suiveur de lignes, capteurs trop alignés
JOUR 19 : 24/03/2016
- Les PCB sont imprécis : plan de masse trop proche des connecteurs (courts-circuits, difficultés pour souder)
- Correction des PCB en grattant les pistes (échec)
- La pince est opérationnel
- Le suiveur de lignes refonctionne (déplacement des capteurs)
JOUR 20 : 18/04/2016
- Les PCB ont été regravés avec plus d'espace
- PCB principal imprimé en Top, on doit souder de l'autre coté pour corriger
- Soudures terminés sur le principal
- Démontage du robot (fils, breadboard ...)
- Montage du PCB et réagencement du robot (PHOTO)
JOUR 21 : 21/04/2016
- Soudures terminés sur les 2 autres PCB
- Recâblage plus propre
- Premier test avec PCB
- Les moteurs tournent mais problèmes avec les suiveurs de lignes
JOUR 22 : 25/04/2016
- Le suiveur de lignes fonctionne correctement avec le PCB
- Altérations du PCB mère, certaines pistes/pastilles se détachent
- Installation du PCB suiveur de lignes
JOUR 23 : 28/04/2016
- Envoie d'un nouveau PCB à graver (en bottom)
- Ajout d'un cerclage en carton sur la pince
- Le système de tir est opérationnel
JOUR 24 : 02/05/2016
- Mise en place des 5 phototransitors
- Avancement sur le but
- Installation PCB photo (1 seul phototransistor qui fonctionne)
JOUR 25 : 03/05/2016
- Le PCB mère réimprimmé est toujours mauvais, on abandonne par manque de temps
- Découpe de l'ancien PCB mère, on a trouvé les problèmes des phototransitors (pistes et pastilles décollées)
- Cable management (robot et but)
- Programme de recherche et de capture fonctionnel
- But terminé et fonctionnel
Réalisation mécanique
Choix du modèle
Pour cette saison 2015-2016, les robots ne sont plus construits avec le kit de construction Lego Mindstorms. C'est pourquoi, nous avons passé une partie de notre première séance à débattre sur les avantages et inconvénients des deux châssis proposés (2 ou 4 roues motrices). Nous avons finalement opté pour le modèle 2 roues pour les raisons suivantes :
- Plus léger donc plus mobile
- Plus maniable grâce à sa roue libre (virage rapide)
- Moins gourmand en énergie (2 moteurs contre 4)
- 2 moteurs à contrôler via l'Arduino
- Moins de risque de patinage
Au final, les avantages en faveur du 4 roues étaient minimes. En théorie, il est censé se déplacer plus rapidement grâce à l'usage de ses 4 moteurs. Seulement, sur un terrain de petite taille, il est préférable que le robot soit maniable et réactif par rapport à son environnement. Ces propos ne sont bien sur que des spéculations. Le temps étant limité, le choix devait se faire rapidement.
Conception de la pince
La pince représente la grosse partie mécanique du projet. Sa réalisation s'est effectuée en plusieurs étapes.
- Réflexion
On ne s'est pas empressé à réaliser un fichier 3D. On a d'abord fixé les objectifs de cette pince ainsi que les contraintes qui lui seront liées. Pour le mécanisme d'ouverture et de fermeture, on a choisi un système composé de deux engrenages avec au- dessus de l'un d'eux, un servomoteur. La balle étant sphérique, il nous a semblé judicieux de réaliser les bras de la pince de manière circulaire. Concernant le mécanisme d'éjection, nous avons fait le choix de ne pas en faire mais d'éjecter la balle grâce à une accélération soudaine du robot. Cet ensemble sera maintenu sur un support qui lui-même sera fixé au châssis du robot à l'aide d'une "mâchoire". En ce qui concerne les contraintes, le robot doit être capable de distinguer les ondes infrarouges du but et de la balle. Comme solution, on a décidé de positionner les phototransistors sur le devant de la pince, nous évitant ainsi la réalisation d'un système pour cacher la balle.
- Mesures et dessins
Cette étape est primordiale pour commencer la conception 3D. On a réalisé quelques esquisses sur papier (voir photos) représentant plusieurs vues de la pince. On a ensuite pris les mesures nécessaires pour les reporter sur les schémas.
- Conception 3D
Ayant déjà eu des expériences avec la modélisation 3D, on a pu sauter l'étape de l’apprentissage. On a choisi, par habitude, d'utiliser le logiciel Solidworks pour concevoir les pièces. Mis à part quelques difficultés pour dessiner des pièces courbées, nous n'avons rencontré aucun problème majeur lors de la réalisation.
- Impression 3D et montage
Fichiers au bon format (STL), créneau réservé, direction le Fabricarium pour l'étape la plus concrète : l'impression. Pour notre première visite, un élève en 4ème année nous a gentiment expliqué le fonctionnement des deux imprimantes. Compte tenu de notre besoin de précision sur les pièces, il nous a conseillé plusieurs réglages comme un taux de remplissage bas. Pour cette première impression, on avait choisi de ne faire que le support et les engrenages, ce qui nous aurait permis d'enfin fixer nos capteurs. Mais malheureusement, le support n'était pas dimensionné correctement, la barre du bas était trop basse et trop fine. On a donc repris les mesures et revu le modèle 3D.
On a par la suite appris que l'imprimante 3D était en panne pour 2 semaines. Heureusement, le groupe de Kévin Descamps et d'Antoine Gosse nous a gentiment donné le premier modèle de leur pince (les 2 mâchoires). Pour la fixer on a apporté quelques modifications à notre support mal dimensionné. On a placé des entretoises dans les bras de la pince puis on a disposé les extrémités dans des trous plus large préalablement percés sur le support. Pour assurer la stabilité du mécanisme, on a bricolé 2 pièces en bois, l'une servant à maintenir le servomoteur et l'autre un des bras.
Conception du support capteurs
Le support des capteurs est intégré au support de la pince. Au départ, il s'agissait d'une simple barre en plastique située au ras du sol sur laquelle on pouvait venir visser les capteurs de lignes. Mais son mauvais dimensionnement (la barre touche le sol et est beaucoup trop fine pour accueillir des trous de perçage) et la panne de l'imprimante 3D nous ont poussé à réfléchir à une solution alternative. On a décidé de sectionner le bas du support et d'y mettre à la place une barre en bois que l'on a récupéré. Cette pièce est attachée par 2 vis sur les bras du support et comporte 4 trous qui permettent la fixation des suiveurs de lignes.
Réalisation informatique/électronique
Circuits imprimés
Afin d'éviter un amas de câbles au dessus du robot, nous avons réalisé des circuits imprimés (PCB). Durant les 19 premières séances, nous avons travaillé exclusivement sur une platine d'expérimentation plus souvent appelé "breadboard". Elle nous a permis d’expérimenter des montages et de tester nos différents capteurs très simplement et surtout rapidement. Nous nous sommes occupés des PCB à partir de la 13ème séance. Au départ, il était question d'un unique PCB que l'on aurait branché comme un shield entre l'Arduino et le module ZigBee. Puis, toujours dans l'optique de simplifier le câblage au maximum, on a pris la décision d'en concevoir 3.
PCB du contrôleur des moteurs : il s'agit de notre PCB mère, les 2 autres PCB y seront reliés. On retrouve sur cette carte un emplacement pour souder le contrôleur moteurs (1) ainsi qu'un autre pour le capteur ultrasons (2). En (3), il s'agit de 2 connecteurs sur lesquels arrivent les fils des piles. Cette source alimente à la fois l'Arduino (Vin), les moteurs et les 2 autres PCB.
PCB des phototransistors : ce PCB est déporté à l'avant du robot. Il permet d'alimenter les 5 photo transistors et d'en recueillir les informations.
PCB des suiveurs de lignes : également déporté à l'avant du robot, il alimente les 4 capteurs et recueille les informations.
Ces 3 circuits imprimés ont été réalisés à l'aide du logiciel Fritzing. Ce logiciel n'est guère utilisé dans le monde professionnel mais il a le mérite d'être simple d'utilisation, ce qu'il nous fallait pour ne pas perdre trop de temps. La première tentative de fabrication fut un échec, en effet, le plan de masse était connecté à certains endroits aux pistes ainsi qu'aux connecteurs (voir image ci-dessous). Pour pallier à ce problème, on a dans un premier temps essayé de gratter le cuivre. Bien que cette solution était fonctionnelle, il était toujours très difficile de souder les composants sans étaler de l'étain sur le PCB. Finalement, nous avons modifié sous Fritzing l'écart entre le plan de masse et les pistes (voir image ci-dessous).
Plus tard, on s'est aperçu que le PCB mère avait été gravé en top. Pour ne pas le réimprimer une troisième fois, on a décidé de le retourner et donc de souder les composants sur le coté cuivré. De ce fait, nous devions laisser un espace entre le composant et la pastille pour y mettre l'étain. Ça n'a pas été facile mais au final le résultat était satisfaisant. Néanmoins, après plusieurs d'utilisations et donc de sollicitations, les pistes et les pastilles ont commencé à s'enlever occasionnant ainsi des problèmes sur nos programmes. A quelques jours de notre présentation vidéo, nous avons réimprimé le PCB en bottom mais encore une fois celui-ci est sorti en top. On a contrôlé et comparé notre fichier Fritzing avec les autres groupes, et apparemment, chose que nous ne savions pas, il fallait mettre le modèle Arduino en top. Afin de rattraper notre erreur, on a découpé notre PCB pour récupérer les connecteurs femelles de l'Arduino.
Voici à présent quelques images annotées de nos PCB.
Fonctions du robot
Dans cette partie, nous détaillerons l'ensemble des fonctions du robot. Pour ce faire, nous parlerons pour chaque fonction des différents composants électroniques utilisés et de l'élaboration du programme associé. Ces programmes seront présents de manière simplifiés pour une lecture rapide mais ils seront également disponibles en téléchargement.
Déplacement vers la balle
Fil rouge : alimentation 5V du capteur.
Fil noir : il s'agit du fil de masse.
Fil vert : tension qui varie selon l'intensité du rayonnement infrarouge captée par le phototransistor. La valeur de la cette tension est lue par une entrée analogique sur l'Arduino.
Description
Pour attraper la balle, le robot doit d'abord être en mesure de la trouver et de s'en approcher le plus possible. Pour cela, nous avons positionné 5 phototransistors sur le devant du robot afin d'élargir son "champ de vision". De base, le robot avance tout droit. Il se déplace selon la tension retournée par le dispositif (résistance + phototransistor). Lorsqu'il capte une ligne extérieur, il fait marche arrière et change son angle, ce qui lui permet de parcourir le terrain.
Programmation
while (chercher balle) { if (ligne détectée) { marche arrière pendant 1.5s if (photo_droite supérieur) { Rotation à droite } else { Rotation à gauche } } if (photo_droite supérieur) { Avancer sur la droite } if (photo_gauche supérieur) { Avancer sur la gauche } else { Aller tout droit } }
Problèmes
Du fait de la faible portée des phototransistors, nous avons modifié notre programme de base pour que le robot cherche la balle en parcourant le terrain même lorsqu'il ne reçoit plus d'informations venant des phototransitors.
Détecter un obstacle
Fil rouge : alimentation 5V du capteur.
Fil noir : il s'agit du fil de masse.
Fil vert : le trig permet de déclencher une mesure lorsqu'une impulsion de 10 µs au minimum lui parvient.
Fil orange: le echo envoie une impulsion de durée variable selon la distance qui sépare le capteur de l'obstacle.
Pour calculer la distance qui sépare le capteur ultrasons de son obstacle, on utilise la formule suivante : Distance = Temps / 58
Cette formule se retrouve également. La vitesse du son étant approximativement 340 m/s ou 34 000 cm/s on a : Distance (cm) = 34 000 * Temps (s) soit encore Distance = 34 000 * 10^-6 * Temps (µs) = 0.034 * Temps (µs).
Comme l'onde ultra-sonore parcoure un aller-retour, il faut diviser cette distance par 2. Ainsi Distance = 0.017 * Temps (µs) ou encore Distance = Temps (µs) / 58.
Description
La détection d'obstacles fait parti des fonctions diverses du robot. Elle sera active durant la phase de recherche et le retour au garage afin de ne pas percuter le robot adverse ou tout autre objet de l'environnement. Dans le cadre de la recherche, si le robot détecte un obstacle à 15 cm, il change de direction et repart alors que pour le suivi de ligne, il s’arrête tant que l'objet et devant lui. Le capteur ultrasons est placé au dessus de la pince et pointe légèrement vers le sol de telle sorte qu'il ne se capte pas lui même.
Programmation
Envoyer une impulsion de 10µs Lire la valeur du echo Convertir la valeur echo en cm
Problèmes
Le relevé des distances nous a causé quelques problèmes pour les valeurs très grandes ou à l’inverse très petites. La capteur plante et renvoie 0 constamment quelque soit la distance. Il est nécessaire de reset l'Arduino. La fiche technique indique une plage d'utilisation de 2 cm à 5 m mais ne précise pas son dysfonctionnement dans le cas ou ses valeurs sont dépassées. Un petit tour sur les forums nous a permis de voir que ce problème était connu de tous et qu'il n'y avait pas de solutions. Au final, dans la pratique, le robot ne sera pas confronté à ce genre de configuration.
Capture de la balle
Description
Lorsque le robot est assez proche de la balle, il doit être en mesure de la capturer. Pour cela, nous avons mis un 5ème phototransistor à l’intérieur de la pince qui va venir commander le servomoteur.
Programmation
while (chercher balle) { if (photo > seuil) { Fermer la pince } }
Problèmes
On a du faire face à des problèmes d'exposition lumineuse qui venaient perturber la fermeture de la pince (fermeture trop tôt).
Communication sans fil
Pour expérimenter la communication sans fil avec XBee, nous avons créé un programme permettant de contrôler le robot à distance grâce aux touches du clavier d'un PC. Cette fonctionnalité n'a aucun intérêt concret dans le projet mais elle a nous a permis d'en apprendre davantage sur la communication série.
Concernant la communication entre robots et buts, celle-ci aurait du s’effectuer à l'aide de messages contenant également les identifiants :
MATCH_START : Robot ramasseur => Joueurs BUT1_ON : Robot joueur => But 1 BUT1_OFF : Robot joueur => But 1 BUT2_ON : Robot joueur => But 2 BUT2_OFF : Robot joueur => But 2 GOAL : But 1/2 => Robot ramasseur / joueur
Repérage du but adverse
Cette fonction n'a pas été réalisée mais elle est quasiment identique à la recherche de balle étant donné que le but émet des rayons infrarouges.
Tir au but
Description
On a fait le choix de ne pas réaliser de système mécanique pour le tir mais d'utiliser ce qu'on avait déjà en notre possession : une pince et des roues motorisées. Pour tirer, le robot s'arrête, il ouvre la pince puis fait une petite accélération et se stop net. Ainsi, la balle est propulsée vers l'avant, suivant la direction du robot.
Programmation
Ouverture de la pince Mise en marche des moteurs Délai de 1s Arrêt des moteurs
Problèmes
Aucun problème n'a été constaté sur cette partie.
Retour au garage
Fil rouge : alimentation 5V du capteur.
Fil noir : il s'agit du fil de masse.
Fil vert : ce fil correspond à la sortie du capteur. Il est branché sur une entrée analogique et envoie des valeurs comprises entre 0 et 1023 selon l'intensité du noir.
Description
Le retour au garage s'effectue grâce à 4 capteurs de lignes qui vont permettre au robot de suivre une ligne pour se rendre à son garage. Au niveau du garage, la couleur de la ligne est différente et peut être différenciée du noir, ce qui lui permet ainsi de se garer. Nous avons choisi d'opérer avec 4 suiveurs afin d'accroître la vitesse du robot. Nous en avons 2 centraux qui permettent une correction douce du robot, les 2 moteurs tournent mais l'un est ralenti. Ceux aux extrémités sont utiles pour les virages plus importants comme les angles droits du terrain. Dans ce cas, un des 2 moteurs est complètement à l’arrêt.
Programmation
while (rentrer au garage) { Lecture des données while (cptd < seuil && cptdd < seuil && cptg < seuil && cptgg < seuil) { Même vitesse des moteurs Lecture des données } if (cptd >= seuil && cptdd <= seuil && cptgg <= seuil) { Moteur gauche tourne Moteur droit ralenti } if (cptg >= seuil && cptdd <= seuil && cptgg <= seuil) { Moteur gauche ralenti Moteur droit tourne } if(cptdd >= seuil) { while(cptd < seuil) { Moteur gauche tourne Moteur droit à l’arrêt Lecture des données } } if(cptgg >= seuil) { while(cptg < seuil) { Moteur gauche à l’arrêt Moteur droit tourne Lecture des données } } }
Problèmes
Pour optimiser au maximum, il nous a fallu modifier les nombreux paramètres de l'algorithme comme les seuils de détection et les délais des moteurs. On a également du abaisser les capteurs de lignes pour qu'ils soient plus proche du sol et qu'ils puissent sortir des valeurs cohérentes quelque soit la luminosité ambiante. Lorsque l'on a réalisé le support, on a oublié de mettre les capteurs latéraux en retrait par rapport à ceux du centre. Le robot ne parvenait plus à tourner correctement en angle droit. Une fois la modification apportée, tout refonctionnait comme avant.
Résultat final et tests
Voici des photos du robot tel que nous l'avons présenté lors de la vidéo.
But
Réalisation mécanique
Au départ, il était question de réaliser le but avec la découpeuse laser du Fabricarium. Seulement, avec tout le travail que nous avions en salle, on reportait chaque semaine la découpe. Les plans vectoriels ont été réalisés avec Adobe Illustrator mais n'ont pas été utilisés. On s'est servi d'un panneau de contreplaqué sur lequel on a scié les différents éléments du but que l'on a ensuite assemblé avec des équerres et des vis. Ensuite, nous avons percé un trou sur une des faces latérales afin d'y encastrer le capteur ultrasons. Pour la pente, nous l'avons fixé avec deux charnières ce qui nous permet d'accéder facilement au dessous du but où sont fixés les composants électroniques.
Réalisation électronique
Affichage du score
Fil rouge : alimentation 5V du capteur.
Fil noir : fil de masse.
Fil vert : horloge du bus I2C (SCL).
Fil bleu : transfert des données du bus I2C (SDA).
Description
L'affichage du score se fait grâce à un afficheur 7 segments (4 digits) contrôlé à l'aide d'un Arduino UNO. On a choisit d'utiliser l'interface I2C pour communiquer afin d'économiser le nombre de câbles.
Programmation
Le programme consiste à incrémenter des nombres sur l'afficheur en fonction des données recueillis par l'Arduino et plus précisément le capteur ultrasons qui lui est connecté.
Problèmes
Il nous a fallu prendre en main la librairie Wire qui n'est pas simple d'utilisation.
Détection de la balle
Description
Nous avons utilisé un capteur à ultrasons relié à l'Arduino. Il est placé sur une des faces latérales du but. Lorsque celui-ci est activé par un robot compétiteur, le capteur se calibre en prenant une mesure devant lui. Ainsi, quand il détectera une variation de cette distance, cela voudra dire que la balle est entrée. L'afficheur se chargera d'incrémenter le score de 1 point.
Programmation
dist_init = distance sans obstacles while(but activé) if (dist_init - dist > 4) incrémentation du score désactivation du but
Problèmes
Ayant déjà pris en main le capteur à ultrasons du robot, celui-ci ne nous a pas posé de problème.
Résultat final et tests
Nous avons oublié de prendre des photos du but finalisé. Il a tout de même était filmé et présenté pendant la vidéo.
Conclusion
Retour sur le robot et le but
Nous ne sommes pas parvenus à finaliser complètement le robot. La plupart de ses fonctions ont été réalisées, à l'exception du repérage du but, mais elles ne forment pas un tout qui permet au robot de disputer un match. Nous avons passé de nombreuses heures à la fin à corriger des problèmes liés aux PCB, ce qui nous a pas mal ralenti dans l'élaboration de nouvelles fonctionnalités. Pour terminer avec le robot, nous avons quelques regrets sur son esthétisme. En effet, nous aurions aimé un robot plus abouti, avec moins de "bricolage" et surtout moins de câbles.
Concernant le but, il fonctionne correctement et rempli ses tâches. Encore une fois, l'esthétisme aurait pu être mieux, avec notamment l'emploi de la découpeuse laser, mais ce n'est que du détail.
Malheureusement, la partie communication a été délaissée par manque de concertation entre les groupes et de temps. La fin du BE est vite arrivée et nous avons consacré le peu d'heures qu'ils nous restaient à faire fonctionner notre robot pour la présentation vidéo. On a quand même tenu à essayer le module XBee, c'est pourquoi nous avons réalisé un programme permettant de contrôler notre robot avec les touches du clavier.
Impressions de Lucas
J'ai trouvé ce projet particulièrement intéressant. En effet, ce robot était mon premier projet mené en totalité et en quasi autonomie.
Concevoir ce robot nous a appris énormément de choses dans différents domaines. J'ai énormément développé mes capacités à travailler en équipe en proposant chacun nos idées, en les confrontant et en conservant les meilleurs aspects de chacune, nous avons surmonté toutes les difficultés rencontrées. Ce bureau d'étude m'a également permis d'appliquer les notions théoriques d'électroniques et de programmation acquises au cours de ces deux années de PEIP. J'ai également découvert la modélisation 3D et la conception de circuits imprimés qui sont pour moi deux choses très importantes à maîtriser pour la suite de mon cursus.
J'ai beaucoup aimé la liberté qui nous a été laissée au cours de ce projet et qui nous a poussé à nous débrouiller par nous même pour résoudre nos problèmes au lieu d'attendre de l'aide. Mais surtout, cette liberté nous a appris à tenir des délais et à se fixer des objectifs intermédiaires pour chaque séances. Ce fonctionnement nous a permis d'avancer à un bon rythme en créant de nouvelles fonctions pour notre robot à chaque séance puis en les combinant.
Mon seul regret, qui n'enlève en rien le côté enrichissant de ce projet, est de ne pas avoir pu faire de match comme prévu au départ.
Impressions d'Antoine
Ce bureau d’études nous a permis de mener à bien un projet pluridisciplinaire mélangeant à la fois de l’électronique, de l’informatique et de la mécanique. Bien que les deux premières disciplines soient mes favorites, j’ai trouvé du plaisir à modéliser des pièces en 3D et à trouver des solutions pour la conception et le montage des différentes pièces. Réaliser ce robot m’a permis d’appliquer toutes les connaissances théoriques que j’avais acquises durant ma scolarité, à savoir le langage C et les bases de l’électronique. Sur le plan individuel, j’ai appris à tenir des délais et à faire des choix en conséquence. De plus, la liberté offerte par ce BE nous a permis de travailler en autonomie et ainsi de trouver des solutions par nous-même ou en demandant de l’aide au besoin. J’ai vraiment apprécié cette pédagogie qui pour moi développe notre curiosité en nous faisant chercher par nos propres moyens.
Je n’ai pas grand-chose d’autres à dire, mise à part que j’ai grandement apprécié le travail d’équipe sur ce projet et que celui-ci m’a même donné l’envie de créer par moi-même d’autres gadgets électroniques.
Pour terminer, je tiens à remercier Mr. Redon et Mr. Boe pour avoir dirigé ce bureau d’études ainsi que Mr. Engels pour sa patience durant le tournage de notre vidéo.