Binome2015-5

De Wiki de bureau d'études PeiP
LE RONALDUINO


Introduction

Le projet de cette saison consiste à réaliser un jeu de balle entre des robots que nous allons construire nous même. Notre binôme a choisi de travailler sur le robot joueur ainsi que les cages de buts. La clé pour l'aboutissement du projet consiste a un travail d'équipe afin de pouvoir mettre en commun les avancées de chacun, c'est dans ce but que nous tenons cette page régulièrement actualisée au fil des séances de cours et de recherche personnelle.


Objectifs principaux

Certaines contraintes vont devoir être respectées pour réaliser le robot joueur et la cage de but. Nous allons donc essayer de les respecter pour atteindre les objectifs fixés à la fin de la saison et avoir un matériel fonctionnel :

Pour le robot joueur :

  • Construction du châssis fourni à la première séance.
  • Disposition des capteurs sur le chassis (capteur IR, ultrason, de ligne)
  • Partie programmation :
    • Codes liés aux moteurs.
    • Code lié a la détection d'obstacles par UltraSon.
    • Code lié a la détection de la balle par Infrarouge.
    • Code lié a la détection des lignes.
    • Mise en place de la communication radio entre les robots et les cages de buts par module Xbee.
    • Rassembler tous les codes pour former le programme final.
  • Conception mécanique :
    • Réalisation du système de pince.
    • Réalisation du système de tir.
  • Réalisation du PCB pour réduire le nombre de fils et par conséquent les faux contacts.

Pour la cage de but :

  • Construction de la structure du but.
  • Fixation des capteurs IR et émetteurs IR sur la cage de but.
  • Fixation de l'afficheur sur la cage de but.
  • Réalisation du programme permettant d'émettre et recevoir un signal infra-rouge en pulser.

L'ordre à suivre pour les différentes étapes a été réfléchi et nous en sommes venu a la conclusion qu'il est primordial de réaliser les tâches dans l'ordre défini précédemment. Celui ci nous permettra de nous adapter progressivement au langage Arduino et de travailler chacun parallèlement en nous répartissant les tâches sur des étapes différentes pour avancer plus rapidement. La mise en commun de nos travaux aboutira ensuite à un robot joueur et des cages de buts fonctionnelles .

Descriptif des séances :

Dans un soucis de préserver une trace écrite du contenu de nos séances , nous tenons à jour cette section et décrivons brièvement le contenu de chaque jour. Le travail personnel n'est pas décrit dans cette section .

Séance 1 : 18/01/16

La première séance a principalement consisté à l'établissement du cahier des charges. Nous avons écrit une liste contenant le matériel nécessaire, les contraintes auxquelles sera soumis le robot ainsi que les différentes options possibles pour les résoudre. Nous avons décidé de débattre tout d'abord les contraintes mécaniques, nous avons donc dessiné un premier système de pince, ainsi qu'un système de tir. Les pièces nécessaires à ces systèmes seront imprimées en 3D ou coupées au laser. Nous avons également convenu que le châssis a 2 roues convenait mieux à notre projet, en raison de sa plus grande maniabilité.

Séance 2 : 21/01/16

La seconde séance nous a permis de construire le châssis 2 roues et de commencer à programmer sur l'Arduino Mega. Nous avons pu écrire l'algorithme permettant la mesure de la distance par ultrason ainsi que le contrôle global du servomoteur à utiliser grâce a la librairie associée.

Séance 3 : 25/01/16

  • Découverte du logiciel freecad.
  • Dessin des engrenages pour la pince du robot.

Séance 4 : 28/01/16

  • Impression 3D des engrenages grâce au logiciel Cura.
  • Dessin des barres dentées pour la pince grâce au logiciel Freecad.

Séance 5 : 29/01/16

  • Création d'une maquette en carton pour tester le système de récepteurs infrarouge avec un arduino UNO.
  • Codage du programme contrôlant les récepteurs infrarouge.

Séance 6 : 01/02/16

  • Essai d'impression d'une première pince en 3D. Cette impression fut peu concluante mais nous a permis de comprendre le fonctionnement de l'imprimante 3D, mieux maîtriser le logiciel Freecad pour dessiner les pièces et de voir quels étaient les problèmes de notre système. Nous avons donc fait des modifications sur le premier dessin de la pince.
  • Installation des récepteurs infrarouge sur le robot.

Séance 7 : 04/02/16

  • Travail sur le problème des récepteurs infrarouges qui ne fonctionnent pas. Nous obtenons par moment des valeurs mais n'arrivons pas à faire marcher le système correctement.
  • Réalisation sur Freecad d'une nouvelle pince qui doit être plus efficace. Nous attendons donc de pouvoir l'imprimer pour la tester.

Séance 8 : 08/02/16

  • Résolution du problème des récepteurs infrarouges ne fonctionnant pas correctement.

Nous avons du démonter tout le circuit pour rebrancher les récepteurs IR un par un et finalement, obtenir un résultat satisfaisant. Nous réglerons le programme pour localiser la balle durant une autre séance.

  • Nous avons commencé à utiliser les capteurs noir et blanc mais pour l'instant, ceux-ci ne fonctionnent pas bien sauf en collant les capteurs sur le sol.

Séance 9 : 11/02/16

Séance 10 : 22/02/16

  • Impression des derniers composants de la pince. Il ne manque plus que les taquets sur lesquels les roues dentées vont tourner. Nous les réaliserons en bois car l'imprimante 3D n'arrive pas à les imprimer correctement.

Séance 11 : 25/02/16

Début de la réalisation des 2 circuits imprimés. Le premier concerne le contrôleur moteur, le module XBee, les capteurs infrarouges, le capteur ultrason ainsi que les deux servomoteurs qui serviront à actionner la pince et le système de tir. Le second PCB sera placé sous le châssis et il servira a connecter les capteurs de ligne.

Nous avons également pu mettre en avant un problème supplémentaire concernant les capteurs infrarouges : ils renvoient une valeur même lorsque la balle n'est pas présente. Cette contrainte sera abordée à la prochaine séance.

Séance 12 : 03/03/16

La pince est fonctionnelle. Elle a été réalisée grâce a un système d'engrenages, un premier engrenage est connecté à un servomoteur qui met en mouvement les 3 autres engrenages. Deux barres dentées qui actionnent les serres sont reliées aux roues dentées des extrémités.

Séance 13 : 07/03/16

Nous avons fini par résoudre le problème des valeurs incohérentes des capteurs Infrarouge en réalisant un nombre conséquent d'acquisitions (200 acquisitions consécutives), qui sont stockées dans un tableau. Afin de confirmer la présence de la balle et non d'une autre source infrarouge temporaire, on vérifie que lorsqu'une valeur est enregistrée, elle est suivi par une autre valeur plus ou moins élevée. Si c'est le cas, la balle est présente. Sinon, il s'agit de la lumière ambiante qui parasite la détection de la balle. La prochaine séance sera entièrement consacrée a la détection de la balle et au PCB.

Séance 14 : 10/03/16

Cette séance à été entièrement consacrée à la détection de la balle. Nous avons pu mettre au point le système de détection de balle énoncé lors du résumé de la séance précédente. Nous avons rencontrés quelques problèmes notamment dans certains cas à une sortie de la capacité de mémoire de l'Arduino. Dans d'autres cas, certains capteurs continuent de renvoyer des valeurs erratiques dues à la lumière du jour. Le capteur situé à l'avant retourne ainsi continuellement une valeur (petite, mais assez pour faire croire au programme que la balle est présente). Le problème provient surement d'un faux contact dans les branchements.

Séance 15 : 14/03/16

Nous avons continué à mettre au point le programme de détection de la balle. Quelques problèmes liés à la sortie de mémoire ont été réglé en réalisant moins de tours de boucle (ce qui ajoute une petite perte de précision) mais aussi en modifiant le type de valeurs dans le tableau du programme de détection de la balle. Nous sommes passés de "int" à "long int". Concernant les PCBs, nous avons finalement réalisés 2 PCB concernant respectivement les capteurs de lignes, à plaquer sur le châssis inférieur et le PCB principal à utiliser sur l'Arduino et contenant les autres composants.

Séance 16 : 17/03/16

Le programme pour la détection de la balle est au point. Il ne détecte que la balle pulsée a 1200 Hz et aucune source non pulsée (nous avons testé avec une lampe). Il ne manque plus qu'à l'intégrer au programme principal. Le problème rencontré précédemment était simplement dû au fait que la balle n'était pas pulsée (les autres binômes travaillant sans modulation de signal). La gravure du PCB à quant a elle été interrompue en raison d'un problème de format, nous ne l'avons appris qu'à la fin de la séance. Nous allons donc nous pencher sur ce problème pour le faire valider à la prochaine séance.

Séance 17 : 21/03/16

Le problème du PCB était que les fichiers n'étaient pas au bon format. Nos enseignants nous ont expliqué comment envoyer le fichier du PCB sous un bon format, ce qui a été fait. Nous avons alors pu recevoir le PCB principal deux heures plus tard. L'autre PCB rencontre toujours un problème dont la source reste à déterminer car l'aperçu sur le visualiseur Gerber ne montre pas de problèmes pour nous (Le mail de refus précise un problème de drills). Nous avons terminé le programme visant a orienter le robot selon la puissance du signal envoyé par la balle. Nous nous sommes alors penchés sur les capteurs de lignes que nous avons entièrement finis lors de cette séance : le robot ne sort plus des zones délimitées. A la rencontre d'une ligne noire, il recule puis change d'angle. Cependant un problème majeur a été rencontré : le rafraîchissement des valeurs n'est parfois pas assez rapide et si elle ne se fait pas alors que le robot traverse une ligne, celle-ci n'est pas détectée. Une solution consiste à prendre un des capteurs et le placer a l'arrière du robot. Nous allons en discuter lors de la prochaine séance. Un autre problème à été mis en avant : du fait du nombre élevé de composants, si les piles ne sont pas entièrement chargées, l'Arduino ne tourne pas. De plus, les piles se déchargent vite durant nos test. Nous allons donc augmenter le nombre de piles alimentant notre robot.

Séance 18 : 18/04/16

La séance à permis de régler quelques incertitudes avec les capteurs infrarouges . Les autres capteurs sont entièrement finalisé . Il ne manque que le PCB et le Xbee sur le robot . Le code régissant le fonctionnement des cages des buts a été mis en place . Il ne manque plus qu'à découper les cages .

Séance 19 : 25/04/16

  • Finalisation du but.
  • Test de mise en place du Xbee. Sans succés par manque de temps.
  • Réalisation du programme permettant au robot de suivre une ligne pour rentrer au garage.

Séance 20 : 02/05/16

Dernière séance, nous avons essayé de régler les derniers problèmes dans le programme avant de tourner la vidéo. Malheureusement, certains problèmes ont persistés comme le système de détection de balle qui marchait pourtant précédemment. Nous tenterons donc de refaire des vidéos par nous même pour montrer l'efficacité de notre programme.

La pince

La pince

Pour fabriquer cette pince, nous avons utilisé les logiciels Freecad pour le dessin 3D; Cura et UP pour l'impression 3D. Nous avons d'abord dessiné des croquis de la pince pour ensuite la réaliser sur Freecad.

Croquis

Les objectifs de la pince

  • Pouvoir s'écarter un maximum afin de faciliter la prise de la balle (pas trop non plus pour ne pas gêner le déplacement du robot)
  • Se refermer suffisamment pour saisir la balle (6.5cm)
  • Permettre au système de tir de lancer la balle lorsque la pince est fermée afin de guider la balle. De plus, le tir doit être assez puissant.
  • N'utiliser qu'un seul servomoteur

Les éléments de la pince

  • 2 serres
  • 4 roues dentées
  • 4 taquets servant d'axe de rotation aux roues
  • la structure principale de la pince.
Petite roue dentée
Grande roue dentée
Structure haute
Structure basse
Taquets
Serre



Le fonctionnement de la pince

Pour actionner la pince, il suffit de mettre en route 1 servo-moteur (numéro 1 sur le rendu final vu du dessus). Celui ci va alors faire tourner la grande roue dentée de gauche qui va elle même actionner le système d'engrenage composé de 2 petites roues dentées. Celles ci servent à écarter suffisamment les 2 grandes roues dentées ainsi qu'à les faire tourner dans le sens inverse l'une de l'autre. Ce système d'engrenage va alors faire tourner la grande roue dentée de droite. Les deux serres qui sont chacune reliée à une grande roue dentée par un système de crémaillère vont alors pouvoir se rapprocher ou s'écarter.

Les deux serres ont dû être décalée l'une de l'autre en hauteur afin de leur permettre de se rapprocher au maximum en largeur et de pouvoir saisir la balle (écartement de 6.5cm). Pour décaler les deux serres en hauteur, il a donc fallut construire un système de taquets permettant d'échelonner les engrenages (bien visible sur le rendu final vu de derrière).

Les problèmes rencontrés

  • les 2 serres, les 4 roues dentées ainsi que la structure principale ont pu être dessinées sur Freecad puis imprimées grâce à l'imprimante 3D du Fabricarium. Mais les 4 taquets n'ont pas pu être imprimés par imprimante 3D car ceux ci étaient trop fins et de forme cylindrique ce que l'imprimante a plus de mal à produire.

Les 4 taquets ont donc été réalisés en découpant un long clou de diamètre voulu (3.5mm) et un tuyau de diamètre légèrement supérieur.

découpe du clou
assemblage roue et axe de rotation
rendu final


  • L'espace calculé pour faire entrer les serres dans la structure basse au niveau de la crémaillère était légèrement insuffisant. Il a donc fallu poncer la structure basse pour réduire sa largeur. Ce qui a permis aux serres de coulisser le long de la partie élevée de la structure basse.
  • Nous avons dû modifier plusieurs fois la taille des roues dentées afin d'obtenir l'écartement de pince maximum. Car plus les serres peuvent s'écarter, plus cela sera facile de saisir la balle.
  • Il a fallu placer le moteur et le bloquer grâce à la structure haute et à une enveloppe faite en contreplaqué. En effet, si on ne bloquait pas le moteur, celui ci tournait sur lui même plutôt que d’entraîner la roue. Nous avons enfin peint l'enveloppe en noir pour l'esthétique.

Le système de tir

propulseur


Le système de tir est composé de:

  • Un propulseur qui est constitué d'une crémaillère ainsi que d'une surface d'appui permettant de tirer la balle. De plus, un ressort a été ajouté dans l'espace vide de la crémaillère (numéro 3 sur le rendu final vu du dessus) afin d'augmenter sa puissance. Ce ressort est piégé entre deux zones d'appui (noté en vert sur le rendu final vu du dessus). Mais cela n'est pas visible car caché par une pièce de couleur rose qui permet de garder le ressort droit lorsqu'il est compressé.
  • un support permettant de relier la roue dentée et le propulseur.
  • une roue dentée dont certaines dents ont été supprimées. Reliée au moteur, elle permet d'amer le système de tir et de tirer lorsqu'il n'y a plus de dent.


Le tir se déroule donc en deux actions:

  • On arme tout d'abord le tir en faisant tourner le moteur (moteur 1 sur le rendu final vu du dessus) collé à la roue dentée jusqu'à la dernière dent de cette roue.
  • Puis, on introduit la balle entre les pinces et on fait un tour de roue dentée afin de propulser la balle grâce à l'étirement du ressort se situant dans le propulseur. Le tour de roue permettant aussi de réarmer le propulseur pour le prochain tir.

Le système de tir a été fixé sur la structure basse de la pince en essayant de faire dépasser le moins possible la pince du robot. En effet, celle ci pourrait gêner le robot dans son déplacement.

La pince finale

Les moteurs ne sont pas présents sur la représentation graphique de la pince. Cela permet une meilleure visibilité et une meilleure compréhension du système. ceux-ci sont indiqué à l'aide de numéro sur le rendu final vu du dessus.

le rendu final :

vu de derriere
vu du dessus
vu de face


Réalisation du PCB

PCB Capteurs de lignes

La réalisation du PCB est une étape majeure de notre projet : elle permet d'éviter les nombreux faux contacts rencontrés sur la plaque d'essai, de rendre plus compacte la disposition des composants et de diminuer le nombre de fils. De plus, sa réalisation nous a permis d'en apprendre plus sur les circuits imprimés et de nous familiariser avec la méthode à suivre. La première version du PCB n'était pas du tout fonctionnelle car nous ne savions pas que les fils ne peuvent pas se croiser sur la plaque. Cette information nous a rapidement été donnée et nous nous sommes empressés de réaliser un PCB fonctionnel. En une semaine, nous avions fini notre premier PCB principal où étaient disposés tous les composants de notre robot. Nos enseignants nous ont alors proposé de faire plusieurs cartes afin d'alléger le nombre de fils sur le robot (chose que nous tentions d'éviter). Le premier envoi de la carte à l'impression s'est soldé par une erreur due au format du fichier. En effet, nous n'avions remplacé que le format du drill par .drd et laissé les autres dans leurs format exporté de Fritzing. Cette erreur a retardé l'impression d'une semaine de plus.

PCB Capteurs de lignes

Avant de procéder à la validation de la demande d'impression, nous avons fait vérifier nos fichiers par un visualiseur Gerber. Celui ci permet de s'assurer que notre PCB sera bien interprété par la machine en nous imprimant a l'écran les différents fichiers exportés un a un. Ainsi, nous pouvons voir les positionnement des drills, des pastilles, le plan de masse et les connexions.

Les circuits imprimés ont ainsi été reçus très rapidement.



Réalisation de la cage de but

Aspect Mécanique

La partie mécanique de la cage de but comprend la réalisation de la forme voulue pour le but en une matière solide et accessible. Nous nous sommes ainsi tourné vers des plaques de bois MDF de 3 mm d'épaisseur en raison de son abondance dans l'établissement. Nous avons décidés de réaliser le but de forme rectangulaire et d'ajouter des filets afin de parfaire la ressemblance avec de vrais buts. Nous avions tout d'abord réfléchi sur la possibilité de placer un filet couvrant tout le but sauf la partie supérieure, avant de décider d'en placer uniquement sur les côtés. Ce choix est uniquement motivé par l'aspect esthétique. Nous avons également dessiné des encoches sur les planches de bois lors de la découpe laser afin de pouvoir emboîter les différentes parties du but et éviter d'utiliser de la colle ou encore de visser. La cage de but a été dessinée sur Inkscape afin de pouvoir découper au laser la plaque MDF. Le résultat sur le logiciel était le suivant :

PCB Capteurs de lignes

Le rendu après découpe et assemblage est le suivant :

Aspect Electronique

Le matériel utilisé pour la réalisation de la cage de but est constitué de 6 émetteurs infrarouge, un afficheur 7 segments, un transistor et deux phototransistors.

Les deux phototransistors sont positionnés de chaque coté du but de façon à détecter l'entrée de la balle. L'afficheur 7 segments incrémente le score lorsque les phototransistors détectent la balle. Trois émetteurs infrarouge sont positionnés sur le toit, deux sur les cotés afin de délimiter le but, et le dernier est positionné sur le milieu de la partie arrière du but. Le circuit a été fixé sous le toit du but de manière a ne pas gêner l’accès de la balle. Nous avons schématisé les connections sur Fritzing, à l'exception de l'afficheur 7 segments qui n'est pas disponible sous ce logiciel :

Schéma Fritzing pour le but

Les trois émetteurs reliés aux transistors émettent un signal pulsé a 1000 Hz. La motivation du choix de connecter ces émetteurs au transistor est notamment de pouvoir les alimenter par un unique pin de l'Arduino en amplifiant le courant qui en provient afin d'alimenter les trois émetteurs de la même manière. L'utilité de cet aspect sera détaillé dans la partie concernant la programmation. Les trois autres émetteurs sont reliés à différents pins et ne sont pas pulsés : ils émettent en continu. Nous avons choisi de placer ces deux types d'émission dans notre but afin que les autres groupes puissent également l'utiliser. Car aucun autre groupe ne se base sur une émission pulsée. Les photo-transistors sont connectés aux entrées analogiques de l'Arduino. Lorsque la balle traverse le but, elle est détectée par ce premier photo-transistor. Le second sert à vérifier si la balle est toujours dans le but afin d'éviter d'incrémenter continuellement le score. L'afficheur 7 segments est utilisé en communication série. Nous l'alimentons directement sur la sortie 3.3 V de l'Arduino. Enfin, nous avons placé le récepteur Xbee (non représenté sur le schéma), mais il n'est pas utilisé car nous l'avons reçu tardivement.

Programmation :

La programmation est une des principales partie du projet. Nous avons utilisé une plateforme Arduino Mega qui a nécessité de se familiariser avec le langage arduino. Celui ci étant une simplification du langage C, nous avons réussi sans trop de difficultés. Nous avons suivi quelques cours dispensés par plusieurs plateformes d'éducation en ligne afin de connaître les principales subtilités du langage. Pour le reste, nos cours de langage C à l'université nous ont beaucoup aidé.

Contrôle du moteur

Le premier programme que nous avons réalisé fût celui du contrôle moteur. Chaque moteur est connecté à une sortie PWM et digitale. Nous avons dû renvoyer un signal analogique pour le contrôle de la vitesse (valeur allant de 0 à 255), l'entrée digitale étant utilisée pour faire tourner la roue dans le sens horaire ou trigonométrique. Le programme réalisé est très simple et répond a toute nos attentes :

 void avancer(int moteur,boolean direct,int vitesse)
 {
 
   //avance par defaut
   boolean montre = HIGH;
   boolean trigo = LOW;
   if(!direct){ //si boolean nul , recule
     montre = LOW;
     trigo = HIGH;
   }
 
   if(moteur == 1) //moteur 1 selon les branchement
   {
     digitalWrite(AIN1,montre); //AIN1 cntrol le sens du courant 
     digitalWrite(AIN2,trigo); //AIN2 aussi autre sens
     analogWrite(PWMA,vitesse); //control vitesse analogique pr garder une vitesse stable (asservis)
   }
   else
   {
     digitalWrite(BIN1,montre);
     digitalWrite(BIN2,trigo);
     analogWrite(PWMB,vitesse);
   }
     
 }
 //Tourner
 //tourner(0,75); //tourbne a fguahce
 //tourner(1,75); //tourne a droite
 void tourner(boolean sens,int vitesse)
 {
   if(sens)
   avancer(1,1,vitesse);
   avancer(2,1,vitesse);
   if(!sens)
   avancer(1,0,vitesse);
   avancer(2,0,vitesse);
   
 }
 void arret()
 {
   digitalWrite(STBY,LOW); //standby off
 }
 //démarrer
 void demarrer()
 {
   digitalWrite(STBY,HIGH); //standby on
 }

Nous avons donc divisé le tout en trois fonctions principales permettant de mettre en marche ou d'arrêter le moteur et d'avancer. Une fonction secondaire, utilisant les précédentes, permet de tourner.

Détection d'obstacles par UltraSon

Nous nous sommes ensuite penchés sur la partie détection ultrason qui s'est également traduite par un code simple mesurant la distance entre un objet et le capteur ultrason par émission d'impulsions :

 float distanceUltraSon(int trig,int echo)
 {
   digitalWrite(trig,HIGH);
   delayMicroseconds(10);
   digitalWrite(trig,LOW);
   unsigned long pulsation = pulseIn(echo,HIGH);/*duree de l'etat 
   car echo change si il recoit un signal */
   if(pulsation>3000)//signal perdu
     {
     return 0.0;
     }
   else{
     pulsation = pulsation/2; //division de laller retour
     
     float tmps = pulsation/1000000.0; //conversion en sec
     float dist = (tmps*340)*100.0; //formule de base en cm
     
     return dist;}   
 }

Recherche de la balle

Vient ensuite la partie de détection de la balle InfraRouge par les phototransistor. Cette partie est celle qui nous a posée le plus de problèmes car les phototransistors renvoyaient continuellement des données brouillés par la lumière ambiante : il était donc impossible de différencier ces valeurs de celles de la balle. Sauf si celle-ci était vraiment très proche des capteurs. Dans un premier temps, nous avons relié ces capteurs à une résistance de 330 Ohm et avons simplement utilisé un analogRead afin de recevoir la valeur renvoyée. Cette méthode fut rapidement abandonnée à cause du problème énoncé précédemment. Nous nous sommes alors penchés sur un programme plus complexe qui nous permet de capter simplement les signaux infrarouges pulsés. Le principe est le suivant : Pendant un petit laps de temps, nous réalisons un grand nombre d'acquisitions et enregistrons les valeurs dans un tableau. Sachant que la balle est pulsée (supposons une pulsation à 1200 Hz). Elle renvoie une valeurs chaque milliseconde environ dans le meilleur des cas, ce qui se traduit par une succession de valeurs positives et négatives. La lumière renvoyée par le soleil par exemple, n'est quant a elle, pas pulsée. Il s'agit donc de valeurs continues et très variables. Ainsi, notre programme vérifie si deux valeurs qui se suivent sont très éloignées. Si oui, il s'agit de la balle. Sinon, il s'agit d'une autre source de lumière.

Ce code fonctionnait parfaitement lorsque le robot n'était pas en mouvement. Lorsqu'il l'était, les valeurs étaient erronées et le robot tournait sur lui même ou suivait des mauvaises directions. Puis, lorsque nous avons ajouté le PCB qui évite les faux contacts, notre système s'est mis à très bien fonctionner. La lumière du jour ou d'une lampe n'est pas détectée, cependant avec une télécommande de télévision ou la balle pulsée, on arrive à attirer le robot. voir vidéo :

Détections des bords du terrain

La partie concernant les capteurs de ligne a été réalisée rapidement. Le capteur de ligne renvoi des valeurs différentes selon qu'il soit positionné au dessus d'une ligne noire ou du terrain blanc. Il suffit ainsi de connaître ces deux valeurs et de faire tourner le robot lorsqu'il renvoi une valeur associée a une ligne noire. Cependant, nous avons rencontré un obstacle majeur : si le robot avance trop rapidement sur une ligne, les valeurs des capteurs de lignes ne sont pas rafraîchies assez rapidement et la ligne n'est donc pas détectée. Ce problème était dû au fait que notre programme de détection de la balle était trop lent. Nous avons donc diminué le nombre d'acquisition pour accélérer le programme.

Problèmes rencontrés et résolution

Nous avons dû faire face a de nombreux problèmes durant notre bureau d'étude , que nous avons résolu plus ou moins facilement en fonction de la nature du problème . Cette section les énumères en décrivant la nature du problème , l'élément concerné et la méthode de résolution .

  • Capteur Ultrason :

Le capteur Ultrason en lui même ne présentait pas de problèmes particuliers , ni son code qui renvoyait une valeur adéquate. C'est les faux contacts dû a la plaque d'essai qui erronnait le plus souvent les valeurs , soit en ne renvoyant quasiment rien du tout, soit en renvoyant constamment une même valeur . Ce problème est réglé par la mise en place du PCB , supprimant les faux contacts .

  • Capteurs Infrarouge :

La détection de balle par les capteurs infrarouge est la partie qui nous a pris le plus de temps a résoudre en raison de nombreux problèmes que nous n'avions pu résoudre rapidement . En effet , les capteurs infrarouge , comme leur nom l'indique , captent le rayonnement infrarouge . Cependant , ce rayonnement est présent dans toute les sources lumineuses tels que le soleil , la lumière émise par une ampoule , et également , en moindre intensité , par le corps humain . Ainsi , a moins que la balle ne se trouve a une distance inférieure a 5 centimètre des capteur , les valeurs renvoyé par les différents capteur disposés de part et d'autre du robot sont toutes un peu prés les même . Nous nous sommes donc penchés sur un programme ne prenant en compte que les signaux infrarouge modulés afin de ne pas capter les signaux parasites . Ce programme nous a pris jusqu’à 5 séances a mettre en place car nous captions toujours quelques valeurs parasites . Nous avons alors tentés de changer les résistances afin d'obtenir des valeurs adéquates et nous avons conclus que la résistance de 330 Ohm est l'idéale car elle permet de ne pas recevoir de signal trop faible mais le signal renvoyé par la balle est quand même pris en compte par le programme .

Vient maintenant la disposition des capteurs : nous avons disposé 5 capteurs . Deux aux extremités arrière du robot , et 3 disposés devant , dont deux sont positionnés aux extrémités et un est centré . Ce système permet une bonne précision et une détection de la balle a n'importe quel endroit . En effet , si nous n'avions pas disposés de capteurs a l'arrière , le robot aurait effectué une rotation complète avant de trouver la balle par ses capteurs avant . Nous avons également disposés des petits cache entre les capteurs afin d'augmenter la précision et éviter que plusieurs capteurs ne reçoivent un signal simultanément .

  • Capteurs de ligne :

Le majeur problème qui s'est révélé avec les capteurs de ligne concerne le temps de rafraîchissement des valeurs . En effet , le programme tournant seul détecte parfaitement les lignes , mais l'ajout du programme de recherche de la balle limite les détections en raison du temps qu'il prend a stocker les valeurs dans un tableau de plus de 100 cases . Cependant , ce problème peut être partiellement résolu en limitant la vitesse du robot . Ainsi , il passera sur une ligne plus lentement et aura ainsi le temps de détecter le changement de valeur tout en cherchant la balle par ses capteurs infrarouge .

  • Réalisation du PCB :

Les problèmes liés au PCB sont dûs au fait que nous n'avions jamais réalisé un PCB avant . Il a suffit qu'on nous explique ce que nous pouvions et ne pouvions pas faire afin de réaliser un PCB fonctionnel .

  • Problème de taille des fils de cuivre. Ceux ci étaient trop fins à certains endroits. Nous ne pouvions alors pas souder les composants correctement.
  • Réalisation de la pince :

Les taquets qui ont tout d'abord été imprimé avec l'imprimante 3D, ne convenaient pas car ils étaient déformés. L'imprimante 3D ayant du mal à réaliser ces formes arrondis. Cela nous a donc permis d'en apprendre plus sur le fonctionnement de cette imprimante. Ceux ci ont donc finalement été réalisé grâce à des gros clous et un bout de tuyau. Nous avons aussi du modifier la taille des roues dentées qui au départ été trop petite. En effet, nous avons voulut maximiser la largeur d'écartement des pinces pour faciliter la prise de la balle.

  • Réalisation du système de tir :

Nous avons eu un problème de puissance de tir. En effet, nous avions tout d'abord prévu d'utiliser la crémaillère seule. Mais le moteur n'était finalement pas assez rapide et la balle n'avançait que très peu lors du tir. Nous avons donc décidé d'utiliser un ressort et une roue dentée dont nous avons retiré certaines dents. Cela permet donc d'armer le système de tir et de tirer avec une bonne puissance.