Binome2015-9 : Différence entre versions

De Wiki de bureau d'études PeiP
(Réalisation mécanique)
(Introduction)
 
(152 révisions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
<div style="float:right;margin:70px;"><include iframe src="https://www.youtube.com/embed/ttwgyzTrOzc" width="600px" height="400px" frameborder="0" scrolling="yes"/></div>
+
<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.
Ligne 37 : Ligne 39 :
  
 
* Retourner au garage : le robot devra se déplacer grâce à son environnement pour parvenir à son garage
 
* Retourner au garage : le robot devra se déplacer grâce à son environnement pour parvenir à son garage
 
<gallery style="margin: 30px 0;">
 
Fichier:FAST_lignes.PNG|Suivre une ligne
 
Fichier:Soon|Détection obstacles
 
Fichier:Soon|Détection lignes
 
</gallery>
 
  
 
=== Objectifs du but ===
 
=== Objectifs du but ===
Ligne 56 : Ligne 52 :
  
 
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.
 
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:#dedede;padding:7px;text-align:center;">
+
 
 +
 
 +
<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>
 
</div>
Ligne 68 : Ligne 66 :
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
 
=== JOUR 2 : 21/01/2016 ===
 
=== JOUR 2 : 21/01/2016 ===
 
</div>
 
</div>
Ligne 78 : Ligne 76 :
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
 
=== JOUR 3 : 25/01/2016 ===
 
=== JOUR 3 : 25/01/2016 ===
 
</div>
 
</div>
Ligne 89 : Ligne 87 :
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
 
=== JOUR 4 : 28/01/2016 ===
 
=== JOUR 4 : 28/01/2016 ===
 
</div>
 
</div>
Ligne 101 : Ligne 99 :
 
</gallery>
 
</gallery>
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<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>
 
</div>
Ligne 112 : Ligne 110 :
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
 
=== JOUR 6 : 01/02/2016 ===
 
=== JOUR 6 : 01/02/2016 ===
 
</div>
 
</div>
  
  
* Prise en main du module ZigBee
+
* 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:#dedede;padding:7px;text-align:center;">
+
<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>
 
</div>
Ligne 132 : Ligne 131 :
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
 
=== JOUR 8 : 08/02/2016 ===
 
=== JOUR 8 : 08/02/2016 ===
 
</div>
 
</div>
Ligne 139 : Ligne 138 :
 
* Premiers essais de PCB (Fritzing)
 
* Premiers essais de PCB (Fritzing)
 
* Programme robot télécommandé (à l’aide des touches du PC)
 
* Programme robot télécommandé (à l’aide des touches du PC)
 
'''Mettre une vidéo'''
 
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
  
 
=== JOUR 9 : 11/02/2016 ===
 
=== JOUR 9 : 11/02/2016 ===
Ligne 153 : Ligne 150 :
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
 
=== JOUR 10 : 22/02/2016 ===
 
=== JOUR 10 : 22/02/2016 ===
 
</div>
 
</div>
Ligne 163 : Ligne 160 :
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
  
 
=== JOUR 11 : 25/02/2016 ===
 
=== JOUR 11 : 25/02/2016 ===
Ligne 177 : Ligne 174 :
 
</gallery>
 
</gallery>
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<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>
 
</div>
Ligne 186 : Ligne 183 :
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
 
=== JOUR 13 : 03/03/2016 ===
 
=== JOUR 13 : 03/03/2016 ===
 
</div>
 
</div>
Ligne 199 : Ligne 196 :
 
</gallery>
 
</gallery>
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<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>
 
</div>
Ligne 210 : Ligne 207 :
 
</gallery>
 
</gallery>
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<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>
 
</div>
Ligne 224 : Ligne 221 :
 
</gallery>
 
</gallery>
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<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>
 
</div>
Ligne 239 : Ligne 236 :
 
</gallery>
 
</gallery>
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<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>
 
</div>
Ligne 249 : Ligne 246 :
  
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
 
=== JOUR 18 : 21/03/2016 ===
 
=== JOUR 18 : 21/03/2016 ===
 
</div>
 
</div>
Ligne 265 : Ligne 262 :
 
</gallery>
 
</gallery>
  
<div style="background-color:#dedede;padding:7px;text-align:center;">
+
<div style="background-color:#9CCFD7;padding:7px;text-align:center;border:6px solid #bfe6ec;">
 
=== JOUR 19 : 24/03/2016 ===
 
=== JOUR 19 : 24/03/2016 ===
 
</div>
 
</div>
Ligne 272 : Ligne 269 :
 
* Les PCB sont imprécis : plan de masse trop proche des connecteurs (courts-circuits, difficultés pour souder)
 
* 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)
 
* Correction des PCB en grattant les pistes (échec)
* La pince est opérationnel
+
* La pince est opérationnel  
 
* Le suiveur de lignes refonctionne (déplacement des capteurs)
 
* Le suiveur de lignes refonctionne (déplacement des capteurs)
  
Ligne 278 : Ligne 275 :
 
Fichier:global_pince.jpg|Pince
 
Fichier:global_pince.jpg|Pince
 
</gallery>
 
</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 308 : Ligne 375 :
  
 
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.
 +
 +
<gallery style="margin: 30px 0;">
 +
Fichier:pince_last.PNG|Vue d'ensemble
 +
</gallery>
  
 
* '''Impression 3D et montage'''
 
* '''Impression 3D et montage'''
Ligne 329 : Ligne 400 :
 
</gallery>
 
</gallery>
  
== <span style="font-size:32px;line-height:40px;">Réalisation électronique</span> ==
+
== <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.
  
=== Capteurs et composants ===
 
  
Détailler pour chaque capteur son rôle précis (général) et son fonctionnement (récupération des données)
+
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).
  
=== Circuits imprimés ===
+
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.     
  
Expliquer nos choix
+
Voici à présent quelques images annotées de nos PCB.
  
=== Programmation ===
+
<gallery style="margin: 30px 0;">
 +
Fichier:pcb_fail.jpg|1ère version PCB phototransistors
 +
Fichier:pcb_annote.jpg|PCB annoté
 +
</gallery>
  
* Résumer l'approche utilisée pour atteindre les objectifs
+
<gallery style="margin: 30px 0;">
* Illustrer avec des morceaux de code
+
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>
  
==== Sortie du garage ====
+
=== Fonctions du robot ===
  
Prochainement ...
+
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.
  
==== Repérage de la balle ====
 
  
Prochainement ...
+
<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" />
  
Prochainement ...
+
'''Programmation'''
  
==== Capture de la balle ====
+
  while (chercher balle)
 +
  {
 +
    if (photo > seuil)
 +
    {
 +
      Fermer la pince
 +
    }
 +
  }
  
Prochainement ...
 
  
==== Demande d’activation du but ====
+
'''Problèmes'''
  
Prochainement ...
+
On a du faire face à des problèmes d'exposition lumineuse qui venaient perturber la fermeture de la pince (fermeture trop tôt).
  
==== Repérage du but adverse ====
 
  
Prochainement ...
+
<div style="background-color:#ACDACF;padding:7px;text-align:center;border:6px solid #cfefe7;">
  
==== Tir ====
+
==== Communication sans fil ====
 +
</div>
  
Prochainement ...
+
 
 +
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'''
  
Prochainement ...
+
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> ==
  
*Inclure des images et vidéos
+
 
*Faire une sorte de timelapse de la construction
+
[[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 394 : Ligne 699 :
 
<br style="clear: both;">
 
<br style="clear: both;">
  
* Plans vectoriels
+
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.
* Découpe laser
+
 
 +
<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 ====
 
==== 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"/>
 
<include iframe src="https://www.youtube.com/embed/Gh0oCmxG57Y" width="600px" height="400px" frameborder="0" scrolling="yes"/>
  
* Matériels utilisés
+
'''Programmation'''
* 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 ===
  
Inclure des images et vidéos
+
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> ==
  
* Ne pas oublier de parler des problèmes rencontrés (dans chaque partie)
+
=== Retour sur le robot et le but ===
* Apport de connaissances
+
 
* Tenir des délais
+
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.
* Trouver des solutions
+
 
* Travailler en autonomie
+
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.
* Liberté offerte sur le robot
+
 
* Pluridisciplinaires (mécanique, informatique, électronique)
+
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.
* Travail d'équipe, répartition efficace des tâches
+
 
* Projet ludique
+
=== Impressions de Lucas ===
* Investissement important
+
 
 +
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


Vidéo HD


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


Schéma des objectifs


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


Capteur ultrasons

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


Capteur ultrasons

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


Suiveur de lignes

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

Vue 1
Vue 2
Vue 3


Voici des photos du robot tel que nous l'avons présenté lors de la vidéo.

But

Réalisation mécanique

Plans du but


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


Suiveur de lignes

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.