Binome2015-9
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
- 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
- Soon
Détection obstacles
- Soon
Détection lignes
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 ZigBee
- 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)
Mettre une vidéo
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)
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).
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.
Sortie du garage
Prochainement ...
Déplacement vers la balle
Prochainement ...
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
Prochainement ...
Demande d’activation du but
Prochainement ...
Repérage du but adverse
Prochainement ...
Tir
Prochainement ...
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
Variables cptg (capteur gauche) cptgg (capteur extrême gauche) cptd cptdd seuil (à définir selon les capteurs)
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.
Résultat final et tests
- Inclure des images et vidéos
- Faire une sorte de timelapse de la construction
But
Réalisation mécanique
- Plans vectoriels
- Découpe laser
Réalisation électronique
Affichage du score
- Matériels utilisés
- Programmation
Résultat final et tests
Inclure des images et vidéos
Conclusion
- Ne pas oublier de parler des problèmes rencontrés (dans chaque partie)
- Apport de connaissances
- Tenir des délais
- Trouver des solutions
- Travailler en autonomie
- Liberté offerte sur le robot
- Pluridisciplinaires (mécanique, informatique, électronique)
- Travail d'équipe, répartition efficace des tâches
- Projet ludique
- Investissement important