Binome2015-8 : Différence entre versions
(→Servomoteur) |
|||
(39 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | < | + | <include nopre noesc src="/home/pedago/ppeip/include/video-Robot8-2015-iframe.html" /> |
+ | __TOC__ | ||
+ | <br style="clear: both;"> | ||
+ | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #ACACFC; vertical-align: top; width: 98%;">Introduction</div>= | ||
− | |||
+ | [[Fichier:RobotBE.JPG|thumb|500px|right]] | ||
Le projet de cette année consistait à créer un terrain de foot sur lequel deux robots compétiteurs s'affrontent, et un robot ramasseur qui sera chargé de récupérer le ballon dans un but à la fin d'une partie et de le repositionner au centre du terrain. | Le projet de cette année consistait à créer un terrain de foot sur lequel deux robots compétiteurs s'affrontent, et un robot ramasseur qui sera chargé de récupérer le ballon dans un but à la fin d'une partie et de le repositionner au centre du terrain. | ||
Ligne 14 : | Ligne 17 : | ||
Nous avons décidé d'organiser ce compte-rendu de la même façon que notre travail sur le projet, c'est à dire étape par étape, et non séance par séance. En effet comme il nous ait arrivé de rester bloqué pendant plusieurs séances sur un seul problème, puis d’avancer rapidement durant d’autres, nous nous sommes donc dit qu'il était plus intéressant de fonctionner ainsi. | Nous avons décidé d'organiser ce compte-rendu de la même façon que notre travail sur le projet, c'est à dire étape par étape, et non séance par séance. En effet comme il nous ait arrivé de rester bloqué pendant plusieurs séances sur un seul problème, puis d’avancer rapidement durant d’autres, nous nous sommes donc dit qu'il était plus intéressant de fonctionner ainsi. | ||
Ainsi nous détaillerons pour chaque étape, correspondant à une fonction de notre robot, les difficultés auxquelles nous avons été opposées, les solutions que nous avons trouvées pour y répondre mais aussi les problèmes que nous avons rencontrés dans l'agencement de ces différents composants. | Ainsi nous détaillerons pour chaque étape, correspondant à une fonction de notre robot, les difficultés auxquelles nous avons été opposées, les solutions que nous avons trouvées pour y répondre mais aussi les problèmes que nous avons rencontrés dans l'agencement de ces différents composants. | ||
− | + | <br style="clear: both;"> | |
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #ACACFC; vertical-align: top; width: 98%;">Découverte du projet</div>= | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #ACACFC; vertical-align: top; width: 98%;">Découverte du projet</div>= | ||
Ligne 91 : | Ligne 94 : | ||
Pour faciliter la recherche de la balle et avoir plus de chance de la détecter, nous avons décidé de placer 3 phototransistors à l'avant et 2 à l'arrière. | Pour faciliter la recherche de la balle et avoir plus de chance de la détecter, nous avons décidé de placer 3 phototransistors à l'avant et 2 à l'arrière. | ||
− | Voici le code en question: | + | Voici le code en question, c'est ce que nous appelons la détection de "précision": |
[[Fichier: Ir1.png |600px|center]] | [[Fichier: Ir1.png |600px|center]] | ||
Ligne 110 : | Ligne 113 : | ||
La fabrication de la pelle et des grues ont pris du temps, car il fallait encore découvrir de nouveaux outils, Freecad et Inkscape, qu'aucun de nous ne maîtrisions à la base | La fabrication de la pelle et des grues ont pris du temps, car il fallait encore découvrir de nouveaux outils, Freecad et Inkscape, qu'aucun de nous ne maîtrisions à la base | ||
− | === La Grue === | + | ===<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #EEAAAA; vertical-align: top; width: 98%;">La Grue</div>=== |
Pour la réalisation de la partie grue nous avons procédé en 2D sur Inkscape, sur lequel nous avons dessiné la même pièce deux fois. Puis sur l’une des 2 nous avons retiré un petit rectangle correspondant à l’endroit où vient se positionner le servomoteur. Nous avons obtenu ces 2 pièces identiques à l’aide de la découpeuse laser en découpant du contreplaqué. | Pour la réalisation de la partie grue nous avons procédé en 2D sur Inkscape, sur lequel nous avons dessiné la même pièce deux fois. Puis sur l’une des 2 nous avons retiré un petit rectangle correspondant à l’endroit où vient se positionner le servomoteur. Nous avons obtenu ces 2 pièces identiques à l’aide de la découpeuse laser en découpant du contreplaqué. | ||
Ces 2 pièces identiques viendront s’emboiter de part et d’autres de l’avant du robot en étant parralèles. | Ces 2 pièces identiques viendront s’emboiter de part et d’autres de l’avant du robot en étant parralèles. | ||
+ | |||
+ | [[Fichier: Grue.png |center|900px]] | ||
+ | |||
+ | ===<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #EEAAAA; vertical-align: top; width: 98%;">La Pelle (L)</div>=== | ||
+ | |||
+ | La réalisation de la partie en L a été faite en 3D sur Freecad. Nous l’avons imprimé grâce à l’imprimante 3D. | ||
+ | |||
+ | * Nous avons ainsi obtenu dans un premier temps la pièce suivante : (imprimée en jaune) | ||
− | + | [[Fichier: L1.png | center|500px]] | |
− | |||
Cette pièce comportait beaucoup de vide, cela était volontaire : nous avions pour but de ne pas faire obstacle au capteur ultrason qui sera positionné sur la grue, et également de ne pas masquer notre phototransistor central, nous permettant de viser la balle pour l’attraper. | Cette pièce comportait beaucoup de vide, cela était volontaire : nous avions pour but de ne pas faire obstacle au capteur ultrason qui sera positionné sur la grue, et également de ne pas masquer notre phototransistor central, nous permettant de viser la balle pour l’attraper. | ||
Ligne 126 : | Ligne 136 : | ||
Cependant il y avait un petit problème au niveau de la pelle : lorsque le robot se déplaçait avec la pince en position fermée et la balle à l’intérieur, la balle s’échappait de la pelle par les côtés. De plus lorsque la pince se fermait elle n’arrivait pas systématiquement a emporter la balle à l’intérieur de la pelle. | Cependant il y avait un petit problème au niveau de la pelle : lorsque le robot se déplaçait avec la pince en position fermée et la balle à l’intérieur, la balle s’échappait de la pelle par les côtés. De plus lorsque la pince se fermait elle n’arrivait pas systématiquement a emporter la balle à l’intérieur de la pelle. | ||
− | Pour résoudre ces 2 problèmes nous avons imprimé en 3D 3 petites pièces supplémentaires ( | + | Pour résoudre ces 2 problèmes nous avons imprimé en 3D 3 petites pièces supplémentaires : (imprimées en roses) |
+ | |||
* Les 2 tiges afin que la balle ne puisse pas sortir | * Les 2 tiges afin que la balle ne puisse pas sortir | ||
* Le rabat afin d’attraper la balle à coup sûr | * Le rabat afin d’attraper la balle à coup sûr | ||
+ | |||
+ | [[Fichier: R+t.png | center|500px]] | ||
+ | |||
Mais un autre problème se créait puisque maintenant la rabat faisait obstacle au capteur ultrason. Étant dans l’incapacité de placer le capteur ailleurs pour que celui si soit utile, nous avons fait le choix de le désactiver. | Mais un autre problème se créait puisque maintenant la rabat faisait obstacle au capteur ultrason. Étant dans l’incapacité de placer le capteur ailleurs pour que celui si soit utile, nous avons fait le choix de le désactiver. | ||
Ligne 135 : | Ligne 149 : | ||
C'est à cette étape que nous décidons définitivement de placer un 6eme phototransistors. Le 6ème, qui sera utilisé lorsque la pince sera en position fermée avec la balle emprisonnée à l’intérieur, sera placé en avant sur la grue, afin de pouvoir capter le but même quand la pince est fermée. | C'est à cette étape que nous décidons définitivement de placer un 6eme phototransistors. Le 6ème, qui sera utilisé lorsque la pince sera en position fermée avec la balle emprisonnée à l’intérieur, sera placé en avant sur la grue, afin de pouvoir capter le but même quand la pince est fermée. | ||
− | === Servomoteur === | + | ===<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #EEAAAA; vertical-align: top; width: 98%;">Le Servomoteur</div>=== |
Maintenant que notre pièce était complète, il ne nous restait plus qu’à réaliser le code faisant bouger notre pince et déterminer les positions du servomoteur correspondant à chaque étape. Nous avons opté pour : | Maintenant que notre pièce était complète, il ne nous restait plus qu’à réaliser le code faisant bouger notre pince et déterminer les positions du servomoteur correspondant à chaque étape. Nous avons opté pour : | ||
− | * Ouverte : 70 | + | * Ouverte : 70 -> (attrape la balle) -> Fermée : 0 -> (lance la balle) -> 200 (le max afin d’avoir plus de puissance) |
− | -> (attrape la balle) -> | ||
− | |||
− | -> (lance la balle) -> | ||
− | |||
Code pour le servomoteur | Code pour le servomoteur | ||
Ligne 149 : | Ligne 159 : | ||
[[Fichier: Servo.png|center]] | [[Fichier: Servo.png|center]] | ||
− | + | ||
+ | Le moment où la pince se ferme pour capturer la balle est le moment où, lorsque nous sommes en détection de précision, le phototransistors du milieu détecte plus la balle que les autres phototransistors. La balle est donc devant lui. Le robot avance donc légèrement puis la pince passe en position 0. | ||
+ | |||
+ | Réciproquement lorsque le capteur avant (le 6éme) détecte le but, la pince passe en position 200 et la balle est lancée. | ||
+ | |||
+ | |||
+ | C’est à ce moment que nous avons connu notre gros problème avec la pince… Lorsque tout était correctement assemblé nous avons voulu coller la pince sur le partie mobile du servomoteur car la pince se déboitait par moment, mais quand la colle a séché, notre servomoteur accroché. En essayant de régler ce problème notre servomoteur s’est endommagé et c’est pour cela que nous devons l’aider sur notre vidéo, il n’est plus assez puissant. | ||
==<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #EEEEAA; vertical-align: top; width: 98%;">Circuit imprimé</div>== | ==<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #EEEEAA; vertical-align: top; width: 98%;">Circuit imprimé</div>== | ||
− | Maintenant que tous nos composants étaient branchés et fonctionnels, nous pouvions enfin nous intéresser à comment se débarrasser de ce gros fouilli | + | Maintenant que tous nos composants étaient branchés et fonctionnels, nous pouvions enfin nous intéresser à comment se débarrasser de ce gros fouilli de fils et de la platine d’essai. |
− | Nous avons imprimé une première plaque mais il s'est avéré que de mauvais réglages dans le logiciel induisaient des court-circuits, nous avons alors repris la modélisation, afin de modifier ces réglages, supprimer des pins que nous avions placé à tort sur les pins de l'Arduino, et | + | |
− | Une fois les circuits réalisés, nous avons fait les soudures nécessaires et rebranché tous nos composants. | + | Grâce au logiciel Fritzing, nous avons modélisé le circuit imprimé. Nous avons fait le choix de réaliser 2 plaques imprimées : |
+ | |||
+ | * une placée à l'avant: comportant les 4 phototransistors de l’avant, le servomoteur de la pince, les 3 capteurs de lignes ainsi que le capteur ultrason. | ||
+ | * une placée à l'arrière: comportant le contrôleur moteur, éventuellement le Xbee et les 2 phototransistors arrière. C'est la plaque se fixant sur l'Arduino. | ||
+ | |||
+ | |||
+ | Nous avons imprimé une première plaque mais il s'est avéré que de mauvais réglages dans le logiciel induisaient des court-circuits, nous avons alors repris la modélisation, afin de modifier ces réglages, supprimer des pins que nous avions placé à tort sur les pins de l'Arduino, et ajouté une mise à la masse. | ||
+ | |||
+ | Une fois les nouveaux circuits réalisés, nous avons fait les soudures nécessaires et rebranché tous nos composants. | ||
==<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #EEEEAA; vertical-align: top; width: 98%;">Élaboration du code final</div>== | ==<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #EEEEAA; vertical-align: top; width: 98%;">Élaboration du code final</div>== | ||
− | Maintenant que tous nos composants | + | Maintenant que tous nos composants sont rebranchés, nous les re-testons. |
+ | |||
+ | Pour une raison que nous ignorons, nos fonctions utilisant les capteurs de lignes ne fonctionnent plus… (c'est à dire notre fonction pour rester dans le terrain, et celle pour suivre la ligne et donc rentrer au garage) | ||
+ | |||
+ | En reprenant le programme affichant la valeur renvoyée par chaque capteur de ligne, nous nous apercevons que les 3 valeurs évoluent de façon étrange. Par exemple si on place le capteur du milieu sur du noir et les deux autres sur du blanc : les trois valeurs renvoyées correspondent au noir alors que seul le capteur du milieu est sur du noir. | ||
+ | Nous avons essayé de régler ce problème mais sans y parvenir. Nous avons donc abandonné la partie suivie de lignes mais nous sommes parvenus à modifier la fonction pour rester dans le terrain en changeant les délais lorsqu'un des capteurs détectent une ligne. | ||
+ | |||
+ | |||
+ | En ce qui concerne le codage finale correspondant au déroulement d'une partie. Nous avons décidé de décomposer le déroulement d’une partie en différentes étapes et de les faire se dérouler grâce a un indice « étape » allant de 0 à 5 : | ||
+ | |||
+ | * 0) Il ne se passe rien (Pause) | ||
+ | |||
+ | |||
+ | * 1) la pince se positionne en position ouverte (70) et le robot se déplace en restant dans le terrain. | ||
− | |||
− | |||
Si la balle est détectée on passe à l’étape 2 | Si la balle est détectée on passe à l’étape 2 | ||
− | Nous avons essayé de placer une condition dans l’étape 1 mais celle-ci prenait systématiquement le dessus sur notre étape même si notre robot ne détectait pas la balle. | + | Nous avons essayé de placer une condition dans l’étape 1 pour passer à l'étape 2 mais celle-ci prenait systématiquement le dessus sur notre étape 1 même si notre robot ne détectait pas la balle. |
+ | |||
+ | |||
+ | * 2) La balle est détectée, on passe en détection de « précision » avec la fonction présenté dans la partie « Détection de la balle » de notre wiki. | ||
+ | |||
− | |||
Une fois la balle attrapée on passe à l’étape 3 | Une fois la balle attrapée on passe à l’étape 3 | ||
− | |||
− | |||
− | 4) Le robot vise maintenant le but avec la fonction détection de « précision ». Lorsque le 6éme capteur le | + | * 3) Le robot se déplace en restant dans le terrain avec la pince en position fermée (0) et la balle à l’intérieur. Le 6éme phototransistor à l'avant s’active pour chercher le but, il remplace celui du milieu. |
+ | |||
+ | |||
+ | Lorsque le robot détecte le but on passe à l’étape 4 (même problème de condition que précédemment) | ||
+ | |||
+ | |||
+ | * 4) Le robot vise maintenant le but avec la fonction détection de « précision ». Lorsque le 6éme capteur détecte le but, le robot lance la balle (la pince passe à 200). | ||
+ | |||
+ | |||
+ | * 5) La pince revient en position ouverte (70). Le robot se déplace jusqu’à rencontrer une ligne puis la suit pour rentrer au garage (lorsqu’il détecte du vert sur la ligne il s’arrête). | ||
+ | |||
+ | |||
+ | Voici le loop du code final : | ||
− | + | [[Fichier: Final.png|center|350px]] | |
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #ACACFC; vertical-align: top; width: 98%;">Tournage de la Vidéo</div>= | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #ACACFC; vertical-align: top; width: 98%;">Tournage de la Vidéo</div>= | ||
− | Comme nous vous l’expliquons dans notre vidéo, nous n’avons pas réussi à faire s’enchainer toutes les étapes correspondant à une partie. C’est pour cela que nous avons laissé le robot branché durant la vidéo, afin de faire s’enchainer les étapes « manuellement », et aussi afin d’apporter une alimentation supplémentaire. Notre robot fonctionne tout de même sans l’alimentation PC car les piles seules | + | |
+ | Comme nous vous l’expliquons dans notre vidéo, nous n’avons pas réussi à faire s’enchainer toutes les étapes correspondant à une partie. C’est pour cela que nous avons laissé le robot branché durant la vidéo, afin de faire s’enchainer les étapes « manuellement », et aussi afin d’apporter une alimentation supplémentaire. | ||
+ | |||
+ | Notre robot fonctionne tout de même sans l’alimentation PC car les piles seules suffisent, mais il reste quand même plus « énergique » avec les deux alimentations combinées. | ||
+ | |||
+ | |||
+ | Les étapes que nous franchissons manuellement sont : | ||
+ | |||
+ | * celle pour passer de la 1 à la 2 : détection de la balle | ||
+ | * celle pour passer de la 3 à la 4 : détection du but | ||
+ | |||
+ | Ces 2 passages d'étapes correspondent au moment où la détection de "précision" vient prendre le dessus sur la fonction rester_terrain. | ||
+ | |||
+ | |||
+ | Comme nous vous l'expliquons, nous avons eu un petit soucis avec le servomoteur de notre pince, c'est pour cela que nous aidons notre pince dans la vidéo. | ||
+ | |||
+ | |||
+ | Nous n'avons pas pu vous montrer la 5éme étape car malheureusement depuis que nous utilisons notre circuit imprimé, cette fonction ne fonctionne plus… | ||
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #ACACFC; vertical-align: top; width: 98%;">Perspectives d'amélioration</div>= | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #ACACFC; vertical-align: top; width: 98%;">Perspectives d'amélioration</div>= | ||
Ligne 196 : | Ligne 261 : | ||
Ce projet a pris beaucoup de temps, nous nous sommes fortement investis, surtout sur la fin. Toutefois il était plaisant de travailler sur ce robot car cela était un travail assez ludique et il nous apportait une certaine satisfaction de voir notre robot évoluer de semaine en semaine. | Ce projet a pris beaucoup de temps, nous nous sommes fortement investis, surtout sur la fin. Toutefois il était plaisant de travailler sur ce robot car cela était un travail assez ludique et il nous apportait une certaine satisfaction de voir notre robot évoluer de semaine en semaine. | ||
+ | |||
+ | Nous sommes conscient que notre compte rendu manque évidement de vidéos de nos tests et photos de notre robot, mais c'est avec regret que nous les avons toutes perdus suite à perte de téléphone avons que nous nous mettions remplir ce wiki... | ||
Nous sommes un peu déçus du résultat final de notre travail car nous ne sommes pas parvenus à faire fonctionner toutes les fonctions de notre robot ensemble et à les faire s'enchainer parfaitement lors de la vidéo. Alors que celle-ci fonctionnaient lorsque nous avons travaillé dessus indépendamment. Nous avions l'objectif d'obtenir un robot le plus fonctionnel possible. | Nous sommes un peu déçus du résultat final de notre travail car nous ne sommes pas parvenus à faire fonctionner toutes les fonctions de notre robot ensemble et à les faire s'enchainer parfaitement lors de la vidéo. Alors que celle-ci fonctionnaient lorsque nous avons travaillé dessus indépendamment. Nous avions l'objectif d'obtenir un robot le plus fonctionnel possible. | ||
− | Cependant nous sommes content d'avoir pu travailler ensemble sur ce projet. | + | Cependant nous sommes content d'avoir pu travailler ensemble sur ce projet très enrichissant. |
Version actuelle datée du 20 mai 2016 à 15:24
Sommaire
Introduction
Le projet de cette année consistait à créer un terrain de foot sur lequel deux robots compétiteurs s'affrontent, et un robot ramasseur qui sera chargé de récupérer le ballon dans un but à la fin d'une partie et de le repositionner au centre du terrain.
Notre binôme, composé de Théo Renard et Benjamin Delbos, a décidé de travailler sur un robot compétiteur. Nous allons vous faire le compte rendu de notre travail tout au long de ce bureau d'étude qui nous a permis de découvrir la section IMA.
Si ce compte-rendu n'a pas été tenu de manière régulière, il n'en est pas moins complet et exhaustif des réflexions que nous avons menées, des problèmes rencontrés et de l'avancement de notre projet.
Nous avons décidé d'organiser ce compte-rendu de la même façon que notre travail sur le projet, c'est à dire étape par étape, et non séance par séance. En effet comme il nous ait arrivé de rester bloqué pendant plusieurs séances sur un seul problème, puis d’avancer rapidement durant d’autres, nous nous sommes donc dit qu'il était plus intéressant de fonctionner ainsi.
Ainsi nous détaillerons pour chaque étape, correspondant à une fonction de notre robot, les difficultés auxquelles nous avons été opposées, les solutions que nous avons trouvées pour y répondre mais aussi les problèmes que nous avons rencontrés dans l'agencement de ces différents composants.
Découverte du projet
Nous avons fait le choix de travailler sur un robot compétiteur. Notre robot sera composé d'un châssis à 2 roues. Lors de la première séance nous avons commencé par monter la base du robot. Nous nous sommes ensuite penchés sur le cahier des charges à respecter pour l'aboutissement de notre projet et avons ainsi fixés nos objectifs.
Pour parvenir à la réussite de notre projet, il fallait que nous utilisions un nouveau matériel, l'Arduino, demandant la maitrise du langage C. Des lacunes dans le domaine informatiques nous ont alors ralentis puisque nous commencions les cours de Langage C en même temps que le Bureau d’étude (Janvier). Il était donc primordial pour la suite de notre travail de nous familiariser avec ce nouvel outil.
Nous l’avons alors découvert grâce aux cours disponibles sur Openclassroom. Ce cours, très complet, nous a permis d’apprendre rapidement les bases de l’Arduino. Nous pouvions maintenant nous lancer dans le vif du sujet !
Étapes principales
Déplacement du robot
Ce qui nous sembler le plus important pour commencer était que notre robot puisse se déplacer. La première étape a donc été de donner la mobilité à notre robot compétiteur.
Du fait de nos difficultés pour le codage et pour les branchements à ce moment du projet, cette étape a été plutôt longue. En effet, des questions se posaient, à ce moment nous hésitions notamment entre si nous devions utiliser le logiciel Ardublock ou plutôt Arduino IDE. Sachant que si nous commencions par utiliser Ardublock pour commencer, nous allions être vite limités et qu'il faudra bien finir par passer sur Arduino, nous avons finalement décidé de nous lancer directement sur le codage avec Arduino IDE.
C'est donc en nous inspirant de modèles trouvés sur internet que nous avons créé notre première fonction « move » sur Arduino IDE. Cette étape a été fondamentale pour la prise en main de cet outil informatique. Une fois notre contrôleur moteur branché, nous avions donc un robot capable d’avancer, reculer, tourner…
- Fonction move
- Fonction avancer / tourner
Partie Ultrason
Maintenant que notre robot se déplaçait, il fallait qu’il soit capable d’éviter des obstacles. Le deuxième composant que nous avons inclus a donc été le capteur ultrason.
Nous avons cherché un modèle de code pour ce composant sur internet, celui que nous avons trouvé permettait d’afficher les valeurs de distances des obstacles. En le testant, ces valeurs nous paraissaient correctes.
Nous avons alors créé une fonction permettant de détecter s’il y avait un obstacle. Cette fonction, combinée à la fonction de déplacement, permettait à notre robot joueur de dévier sa trajectoire s’il détectait un obstacle à 10 cm de son capteur.
- Code partie ultrason
Utilisation des lignes du terrain
A présent notre objectif était que le robot soit capable de rester à l’intérieur du terrain. Pour cela il nous fallait utiliser des capteurs de lignes. Notre choix s’est porté sur 3 capteurs de lignes.
Tout comme pour les composants précédents nous sommes inspirés d’un code trouvé sur internet. Ce code renvoyant des valeurs entre 0 et 1000 en fonction de quelle couleur se trouvait sous le capteur. En utilisant les lignes de l'ancien terrain, nous avons alors testé les valeurs données par nos capteurs de ligne. Nous avons notés les valeurs, afin de les utiliser dans le suivi de ligne.
Une premier problème se poser : il y avait des différences significatives dans les valeurs données par chaque capteur... Nous avons tenté de les cachés les uns des autres, mais aucun changement n’était observé. Pour résoudre ce problème nous avons modifié les distances les séparant du sol, ces distances s'avérant importantes. Une fois les capteurs de lignes situés au plus près du sol et surtout chacun à distances égales du sol, les écarts étaient beaucoup moins important. Mais comme il persistait encore de petites différences nous avons créé pour chacun des 3 capteurs une fonction permettant d’identifié la couleur présente. Le rouge cependant n'était pas détecté, les couleurs idéales pour les lignes étaient alors le noir, le vert et le bleu. Nous avons communiqué ces observations aux groupes travaillant sur l’élaboration du terrain de jeu.
- Fonction d'identification pour chaque capteur
Un autre problème se posait, nous avons décidé de mettre 3 capteurs de ligne situés à l'avant du robot, mais les lignes étant épaisses, il a fallu modifier leur écartement (le robot faisait demi-tour au lieu de suivre le virage). Finalement le groupe chargé du terrain a réduit la largeur des lignes, éliminant ce problème.
Nous avons finalement réalisé deux fonctions :
- une pour que le robot reste à l'intérieur du terrain
- une seconde permettant au robot de suive une ligne et pour rentrer au garage (en vert=2)
Détection de la balle
Toujours dans notre optique de travailler étapes par étapes, et toute les étapes de bases étant maintenant fonctionnelles, nous pouvions maintenant nous intéresser à la détection de la balle. Afin de pouvoir la détecter, nous avons branché, selon des schémas trouvés sur internet, un phototransistor, avec une résistance de 1 kOhm. Nous avons testé les valeurs renvoyés par le phototransistors en réalisant une fonction avec affichage.
Ce test nous a montrés que les valeurs renvoyées étaient très faibles (même avec la balle collée au phototransistor) et ne permettait donc pas de réellement détecter la balle. Nous avons alors testé différentes valeurs de résistances, pour opter finalement pour des résistances de 56 kOhm. L'augmentation de la valeur des résistances nous a permis d'obtenir des valeurs nettement plus utilisables. Nous avons donc réalisés les mêmes branchements pour 2 autres phototransistors puis créé une fonction de comparaisons des trois valeurs renvoyés par les phototransistors milieu, droit et gauche. Ensuite cette fonction, en fonction de la valeur la plus grande, fais se déplacer le robot dans la direction du phototransistors associé à cette valeur. On a alors testé sur le terrain si le robot arrivait à suivre la balle, le résultat était plutôt bon même si le robot manquait parfois de réactivité.
Pour faciliter la recherche de la balle et avoir plus de chance de la détecter, nous avons décidé de placer 3 phototransistors à l'avant et 2 à l'arrière.
Voici le code en question, c'est ce que nous appelons la détection de "précision":
A cette étape, deux questions se posaient :
- le capteur ultrason verra-t-il la balle comme un obstacle à éviter ? Auquel cas il faudra le prendre en compte dans le code final et désactiver le capteur ultrason à ce moment.
- comme la balle continue d'émettre une fois attrapée, le phototransistor du milieu la verra toujours et ne pourra pas détecter le but, faut-il alors rajouter un autre phototransistor dédié à la recherche du but ?
Pour répondre à cette question il nous fallait concevoir la pince.
La pince
Nous avons commencé à penser à différentes alternatives possible pour la conception de notre pince et réalisé divers croquis. Nous avons alors décidé de nous inspirer des projets IMA des saisons précédentes. Notre choix a été de confectionner un système de grue, avec une articulation sur laquelle est fixée un « L », qui bloquera la balle en position fermée et tapera la balle en s'ouvrant pour la lancer. Nous pensions alors à donner de la mobilité au L soit par le biais d'une courroie, soit par le biais d'engrenages. Mais finalement nous avons fait le choix beaucoup plus simple de placer le servomoteur directement au bout de la grue, sur l'axe de rotation de la pelle (le L).
La fabrication de la pelle et des grues ont pris du temps, car il fallait encore découvrir de nouveaux outils, Freecad et Inkscape, qu'aucun de nous ne maîtrisions à la base
La Grue
Pour la réalisation de la partie grue nous avons procédé en 2D sur Inkscape, sur lequel nous avons dessiné la même pièce deux fois. Puis sur l’une des 2 nous avons retiré un petit rectangle correspondant à l’endroit où vient se positionner le servomoteur. Nous avons obtenu ces 2 pièces identiques à l’aide de la découpeuse laser en découpant du contreplaqué.
Ces 2 pièces identiques viendront s’emboiter de part et d’autres de l’avant du robot en étant parralèles.
La Pelle (L)
La réalisation de la partie en L a été faite en 3D sur Freecad. Nous l’avons imprimé grâce à l’imprimante 3D.
- Nous avons ainsi obtenu dans un premier temps la pièce suivante : (imprimée en jaune)
Cette pièce comportait beaucoup de vide, cela était volontaire : nous avions pour but de ne pas faire obstacle au capteur ultrason qui sera positionné sur la grue, et également de ne pas masquer notre phototransistor central, nous permettant de viser la balle pour l’attraper.
L’assemblage de la pince n’a posé aucun problème, tout était bien dimensionné. Nous ne faisions ni obstacle au capteur ultrasons, et le phototransistor était toujours capable de détecter la balle.
Cependant il y avait un petit problème au niveau de la pelle : lorsque le robot se déplaçait avec la pince en position fermée et la balle à l’intérieur, la balle s’échappait de la pelle par les côtés. De plus lorsque la pince se fermait elle n’arrivait pas systématiquement a emporter la balle à l’intérieur de la pelle.
Pour résoudre ces 2 problèmes nous avons imprimé en 3D 3 petites pièces supplémentaires : (imprimées en roses)
- Les 2 tiges afin que la balle ne puisse pas sortir
- Le rabat afin d’attraper la balle à coup sûr
Mais un autre problème se créait puisque maintenant la rabat faisait obstacle au capteur ultrason. Étant dans l’incapacité de placer le capteur ailleurs pour que celui si soit utile, nous avons fait le choix de le désactiver.
Le phototransistor central lui voyait toujours la balle.
Cependant ce phototransistor ne pouvait plus servir lorsque la balle était dans la pince. Il nous fallait donc trouver un moyen pour pouvoir détecter le but.
C'est à cette étape que nous décidons définitivement de placer un 6eme phototransistors. Le 6ème, qui sera utilisé lorsque la pince sera en position fermée avec la balle emprisonnée à l’intérieur, sera placé en avant sur la grue, afin de pouvoir capter le but même quand la pince est fermée.
Le Servomoteur
Maintenant que notre pièce était complète, il ne nous restait plus qu’à réaliser le code faisant bouger notre pince et déterminer les positions du servomoteur correspondant à chaque étape. Nous avons opté pour :
- Ouverte : 70 -> (attrape la balle) -> Fermée : 0 -> (lance la balle) -> 200 (le max afin d’avoir plus de puissance)
Code pour le servomoteur
Le moment où la pince se ferme pour capturer la balle est le moment où, lorsque nous sommes en détection de précision, le phototransistors du milieu détecte plus la balle que les autres phototransistors. La balle est donc devant lui. Le robot avance donc légèrement puis la pince passe en position 0.
Réciproquement lorsque le capteur avant (le 6éme) détecte le but, la pince passe en position 200 et la balle est lancée.
C’est à ce moment que nous avons connu notre gros problème avec la pince… Lorsque tout était correctement assemblé nous avons voulu coller la pince sur le partie mobile du servomoteur car la pince se déboitait par moment, mais quand la colle a séché, notre servomoteur accroché. En essayant de régler ce problème notre servomoteur s’est endommagé et c’est pour cela que nous devons l’aider sur notre vidéo, il n’est plus assez puissant.
Circuit imprimé
Maintenant que tous nos composants étaient branchés et fonctionnels, nous pouvions enfin nous intéresser à comment se débarrasser de ce gros fouilli de fils et de la platine d’essai.
Grâce au logiciel Fritzing, nous avons modélisé le circuit imprimé. Nous avons fait le choix de réaliser 2 plaques imprimées :
- une placée à l'avant: comportant les 4 phototransistors de l’avant, le servomoteur de la pince, les 3 capteurs de lignes ainsi que le capteur ultrason.
- une placée à l'arrière: comportant le contrôleur moteur, éventuellement le Xbee et les 2 phototransistors arrière. C'est la plaque se fixant sur l'Arduino.
Nous avons imprimé une première plaque mais il s'est avéré que de mauvais réglages dans le logiciel induisaient des court-circuits, nous avons alors repris la modélisation, afin de modifier ces réglages, supprimer des pins que nous avions placé à tort sur les pins de l'Arduino, et ajouté une mise à la masse.
Une fois les nouveaux circuits réalisés, nous avons fait les soudures nécessaires et rebranché tous nos composants.
Élaboration du code final
Maintenant que tous nos composants sont rebranchés, nous les re-testons.
Pour une raison que nous ignorons, nos fonctions utilisant les capteurs de lignes ne fonctionnent plus… (c'est à dire notre fonction pour rester dans le terrain, et celle pour suivre la ligne et donc rentrer au garage)
En reprenant le programme affichant la valeur renvoyée par chaque capteur de ligne, nous nous apercevons que les 3 valeurs évoluent de façon étrange. Par exemple si on place le capteur du milieu sur du noir et les deux autres sur du blanc : les trois valeurs renvoyées correspondent au noir alors que seul le capteur du milieu est sur du noir. Nous avons essayé de régler ce problème mais sans y parvenir. Nous avons donc abandonné la partie suivie de lignes mais nous sommes parvenus à modifier la fonction pour rester dans le terrain en changeant les délais lorsqu'un des capteurs détectent une ligne.
En ce qui concerne le codage finale correspondant au déroulement d'une partie. Nous avons décidé de décomposer le déroulement d’une partie en différentes étapes et de les faire se dérouler grâce a un indice « étape » allant de 0 à 5 :
- 0) Il ne se passe rien (Pause)
- 1) la pince se positionne en position ouverte (70) et le robot se déplace en restant dans le terrain.
Si la balle est détectée on passe à l’étape 2
Nous avons essayé de placer une condition dans l’étape 1 pour passer à l'étape 2 mais celle-ci prenait systématiquement le dessus sur notre étape 1 même si notre robot ne détectait pas la balle.
- 2) La balle est détectée, on passe en détection de « précision » avec la fonction présenté dans la partie « Détection de la balle » de notre wiki.
Une fois la balle attrapée on passe à l’étape 3
- 3) Le robot se déplace en restant dans le terrain avec la pince en position fermée (0) et la balle à l’intérieur. Le 6éme phototransistor à l'avant s’active pour chercher le but, il remplace celui du milieu.
Lorsque le robot détecte le but on passe à l’étape 4 (même problème de condition que précédemment)
- 4) Le robot vise maintenant le but avec la fonction détection de « précision ». Lorsque le 6éme capteur détecte le but, le robot lance la balle (la pince passe à 200).
- 5) La pince revient en position ouverte (70). Le robot se déplace jusqu’à rencontrer une ligne puis la suit pour rentrer au garage (lorsqu’il détecte du vert sur la ligne il s’arrête).
Voici le loop du code final :
Tournage de la Vidéo
Comme nous vous l’expliquons dans notre vidéo, nous n’avons pas réussi à faire s’enchainer toutes les étapes correspondant à une partie. C’est pour cela que nous avons laissé le robot branché durant la vidéo, afin de faire s’enchainer les étapes « manuellement », et aussi afin d’apporter une alimentation supplémentaire.
Notre robot fonctionne tout de même sans l’alimentation PC car les piles seules suffisent, mais il reste quand même plus « énergique » avec les deux alimentations combinées.
Les étapes que nous franchissons manuellement sont :
- celle pour passer de la 1 à la 2 : détection de la balle
- celle pour passer de la 3 à la 4 : détection du but
Ces 2 passages d'étapes correspondent au moment où la détection de "précision" vient prendre le dessus sur la fonction rester_terrain.
Comme nous vous l'expliquons, nous avons eu un petit soucis avec le servomoteur de notre pince, c'est pour cela que nous aidons notre pince dans la vidéo.
Nous n'avons pas pu vous montrer la 5éme étape car malheureusement depuis que nous utilisons notre circuit imprimé, cette fonction ne fonctionne plus…
Perspectives d'amélioration
- La pince : Nous regrettons de ne pas avoir pris un servomoteur plus puissant. Cependant avec certaines précautions d'usage le petit servomoteur que nous avons utilisé auront pu faire l'affaire. Mais étant actuellement endommagé il faudrait donc le remplacer.
- Suivie de ligne : D'après nos conclusions, un problème dans la réalisation de notre circuit imprimé semble à l'origine du non-fonctionnement de notre fonction de suivie de ligne puisque celle ci fonctionner avec le retrait de la platine d’essais.
- Détection de la balle et du but : Notre fonction de détection IR fonctionnent très bien mais cependant celle ci fonctionnent uniquement lorsque la balle ou le but se trouvent relativement proche de notre robot. Peut-être que l'utilisation d'un autre composant que les phototransistors apporterait un meilleur résultat.
- Xbee : Nous avons fais le choix de négliger cette partie du projet. En effet voyant l'échéance de la fin du projet se rapprocher très rapidement, nous avons jugé plus important et judicieux de nous investir pleinement sur le fonctionnement notre robot joueur plutôt que de le faire communiquer avec le but. D'autant plus qu'en discutant avec les groupes ayant construit un but, ils nous ont dit qu'il allait être compliqué de les utiliser.
Conclusion
Ce bureau d'étude nous a permis d'apprendre différentes choses. Tout d'abord celui-ci nous a permis de réaliser un travail en équipe. Il s’agissait de notre première expérience avec les robots communicants et ce fut une expérience très intéressante. Nous avons pu découvrir de nouveau outil comme Arduino, Freecad, Frietzig,... et nous avons acquis certaine compétences en électronique.
Ce projet a pris beaucoup de temps, nous nous sommes fortement investis, surtout sur la fin. Toutefois il était plaisant de travailler sur ce robot car cela était un travail assez ludique et il nous apportait une certaine satisfaction de voir notre robot évoluer de semaine en semaine.
Nous sommes conscient que notre compte rendu manque évidement de vidéos de nos tests et photos de notre robot, mais c'est avec regret que nous les avons toutes perdus suite à perte de téléphone avons que nous nous mettions remplir ce wiki...
Nous sommes un peu déçus du résultat final de notre travail car nous ne sommes pas parvenus à faire fonctionner toutes les fonctions de notre robot ensemble et à les faire s'enchainer parfaitement lors de la vidéo. Alors que celle-ci fonctionnaient lorsque nous avons travaillé dessus indépendamment. Nous avions l'objectif d'obtenir un robot le plus fonctionnel possible. Cependant nous sommes content d'avoir pu travailler ensemble sur ce projet très enrichissant.