Binome2015-1

De Wiki de bureau d'études PeiP

Introduction

Pour le BE IMA football de Peip, le but était de faire s'affronter deux robots compétiteurs, que l'un d'un des deux marque un but, puis un robot ramasseur viendrait prendre la balle et la déposer au milieu du terrain pour le match suivant.


Nous avons choisi de travailler sur le robot compétiteur dont les tâches sont les suivantes :

  • Trouver la balle et le but grâce à l'Infrarouge
  • Récupérer et lancer la balle par le biais d'une pince à faire sois même
  • Ne pas sortir du terrain délimité par des lignes
  • Retourner à son "garage" pour ne pas interférer dans le travail du robot ramasseur


Le concept paraît simple et nous pensions que le travail à effectuer le serai également. Mais c'était une lourde erreur de sous estimer la tâche qui nous attendait alors.


Compte rendu des séances

Séance 1

Le robot
Montage du châssis.

Le projet nous a été présenté par les professeurs lors de cette séance. L'objectif est de créer un jeu de foot en utilisant la robotique. Ce jeu sera composé de robot-joueurs qui vont devoir récupérer la balle et la tirer dans des buts également créés par nous. Le jeu contiendra également des robots ramasseurs qui devront venir chercher la balle dans les buts et la remettre à sa position initiale. Ces robots se déplaceront sur un terrain délimité par des lignes, qui devra aussi être construit par nos soins. Nous devrons programmer et câbler nous même le robot ainsi que mettre en œuvre les différentes interactions avec les autres joueurs, le terrain et les buts. De plus, tous les robots devront se replacer dans un "garage" à la fin de leur mission.

Séance 2

Durant cette séance, nous avons débuté le montage de la structure du robot. Le montage des pièces nous a pris beaucoup de temps car celles-ci ne s'imbriquaient pas parfaitement et que la notice n'était pas très claire. Nous avons monté le support des piles, les roues ainsi que soudé des fils sur les bornes des moteurs. Pour finir, nous avons découvert le logiciel arduino en langage C qui assurera le bon fonctionnement des modules une fois transférer sur la carte.

Séance 3

Cette séance a été centrée le contrôleur. Tout d'abord, nous avons soudé les broches sur le contrôleur puis nous avons étudier le processeur pour comprendre l'utilité des différents branchements pour bien câbler l'Arduino Mega avec ce composant. La difficulté résidait sur les différents types de connexion sur l'Arduino : broches analogiques, digitales, PWM, PWM ~, etc. D'un autre côté nous avons compris le fonctionnement de PWA, PWB pour contrôler la vitesse, A1O, A2IN pour le courant dans les roues... Ensuite nous nous sommes fixé comme objectif de faire rouler le robot pendant cette séance. Pour cela, nous avons travaillé sur le codage des moteurs par l'intermédiaire du contrôleur. Nous nous sommes beaucoup servi du site internet de Arduino entre-autres pour assimiler les différentes fonctions, bibliothèques d'Arduino. A la fin de la séance nous pouvions moduler la vitesse du robot, inverser le sens mais aussi la direction du joueur. L'objectif de nos prochaines séances est d'explorer et observer les composants dans le but de tout faire fonctionner ensemble.

Séance 4

Lors de ces 2 heures nous avons étudié le détecteur d'ultrason. Celui-ci permettra au robot d'éviter les obstacles comme les joueurs, les buts ou des objets étranger au jeu. A nouveau, nous avons procédé a la soudure et au branchement du détecteur d’ultrason sur l'Arduino. Puis, à l'aide d'Arduino IDE, nous avons codé le capteur de sorte que le robot s’arrête de tourner lorsqu'il voit un obstacle à moins de 10cm de lui. Sur ce composant le câblage a été plutôt facile car il n'y avait que 4 broches. Cependant, le code a été cette fois plus difficile car on ne récupérait pas tout de suite l'information sur la distance entre la voiture et l'objet, on avait tout d'abord la distance que parcourt l'onde pour aller et revenir au joueur. Ce que nous obtenions était la valeur de la tension aux bornes du détecteur proportionnelle à la distance de l'obstacle. Grâce a internet, nous avons pu utilisé cette valeur pour la transformé en une distance en centimètre de l'obstacle. Point important, la courbure des broches fait que le composant bouge sur la plaque et provoque donc des erreurs de mesures ce qui fausse la détection d'obstacles. Pour cela nous devons trouver un système pour fixer cet élément.

Séance 5

Dans cette séance, c'est sur le détecteur de couleur, RGB sensor, que nous nous sommes penchés. Sur ce composant nous retrouvons une fois de plus les pins communs VIN, GROUND... Ce composant possédait des pins particuliers : SDA et SCl qui ne peuvent se brancher que sur des emplacements prévus à cet effet sur l'Arduino. Le dernier utilisé était LED qui permet d'allumer la LED du composant, dans l'optique de mieux détecter la couleur. Pour ce composant c'est le professeur qui nous a aidé en nous montrant le programme pour connaître le "taux" de rouge, bleu et vert détecté par le capteur. En effet, le programme était beaucoup trop compliqué et aurait nécessité trop de connaissances et de temps pour le réaliser tout seul. Nous avons donc dû télécharger un exemple depuis internet que nous avons modifié pour pour ne garder que la fonction de détection et d'affichage de la couleur qui nous intéressait. Lors des tests pour voir comment se comportait ce composant, nous avons remarqué que indépendamment de la couleur devant son capteur, il détectait plus de rouge que de bleu ou de vert. Pour la construction du terrain il faudrait donc éviter d'utiliser des obstacles, des lignes rouges.


En accord avec la séance 4, nous avons ajouté un intermédiaire entre la plaque et le détecteur pour éviter qu'il ne bouge beaucoup. Cependant, cette solution est temporaire car elle permet de réduire seulement un peu la mobilité. Dans cet objectif de fixation, nous en avons profité pour ajouter des broches et des "caches" thermiques sur les fils des piles et des moteurs pour les allonger et éviter de tirer dessus lors de leur connexion avec la plaque d'essai.

Séance 6

Cette fois, c'est l'utilisation du logiciel Fritzing qui a été privilégiée. En effet, la première étape a été de sélectionner les différents composants et de les relier entre eux par le biais de la plaque d'essai. Seulement, le problème ici était l'absence de certains composants tels que le RGB sensor. Nous avons donc utilisé inkscape pour le dessiner et l'ajouter au logiciel, ce qui nous a occupé un certain temps. Grâce à Fritzing, nous allons pouvoir réaliser un circuit imprimé en vue d'alléger le câblage entre nos éléments. Il devrait également diminuer les problèmes de faux contacts causés par l'ensemble des fils.

Séance 7

Séance 8

Séance 9

Pour compléter notre collection de capteurs, il fallait travailler sur le capteur de lignes noir et blanc. Avec seulement trois broches, il était facile de le connecter à l'Arduino. Il y avait les habituels Ground et VIN, ainsi que un câble pour la communication avec l'Arduino. Celui-ci se branche sur un port analogique. Pour ce qui est du codage, on s'est servi de l'exemple déjà disponible sur le logiciel, ça a été relativement rapide à comprendre et à adapter à notre problème. Cependant, au vu des valeurs obtenues on a pensé avoir un problème. On a ensuite appris que le capteur doit être très près des ligne pour une meilleure optimisation : environ 3 mm. Il nous reste encore à faire suivre les lignes à notre robot et à ajouter d'autres capteurs pour les virages.

Séance 10

Lors de cette séance nous nous sommes concentré sur la détection infrarouge. l'objectif est ainsi de détecter la balle qui émet dans ce domaine d'onde. Le circuit nous a pris un peu de temps car il est difficile à comprendre, en effet pour savoir ce que détecte la led on doit brancher le Ground sur l'Arduino pour connaître la valeur qu'elle renvoie : cela n'est pas intuitif. Également, nous avons dû effectuer quelques modifications sur la balle car elle clignotait ce qui signifie qu'elle n'avait plus assez de pile. De plus, nous sommes passés le mode d'émission d'onde d'alternatif vers continu pour que les valeurs détectées soient toujours dans le même intervalle.

Séance 11

Pour optimiser au mieux le circuit et réduire la quantité de câbles, nous avons réfléchi pour le PCB et nous avons décidé de créer deux circuits imprimés distincts.

  • Tout d'abord le shield qui sera composé des liaisons pour le moteur, les piles, le contrôleur et le capteur ultrason. Il sera situé en haut à l'arrière du robot.
  • L'autre PCB contiendra les liaisons pour 3 infrarouges et les 2 capteurs RGB. Lui, sera plus bas et à l'avant de la voiture pour être au plus près de ses composants.

Séance Supplémentaire

Hors des séances, nous avons créé la pince qui servira à récupérer et lancer la balle. Nous avons créé cette dernière grâce à l'utilisation d'un logiciel de modélisation 3D blender. Nous avons fait en sorte de vérifier toutes les dimensions ainsi que d'évider les parties inutiles. De plus, nous avons créé un "plafond" pour que les détecteurs infrarouges ne détectent pas en même temps la balle et le but. Pour finir, nous comptons utiliser un servo-moteur qui sera fixé sur une des deux pinces pour les faire tourner. La deuxième pince sera reliée à la première par l'intermédiaire d'engrenages. Pour ceux-ci nous envisageons 2 techniques : l'impression 3D ou la découpe laser qui a l'avantage d'être plus précise et moins gourmande en temps mais qui ne peux imprimer des pièces qu'en 2 dimensions. Nous avons donc opté pour la découpe laser pour les engrenages, et l'impression 3D pour la pince.

A ajouter : photos de l'engrenage et de la pince (avant et après impression)

Séance 12

Durant cette séance nous avons codé le servomoteur. Avant cela, il a évidemment fallu le brancher; 3 fils: Ground, VIN et un digital PWM. En ce qui concerne le code, nous avons utilisé un programme déjà existant à notre disposition sur le logiciel. Ce qui a été un peu plus délicat, c'était la modification du code. En effet, quand on a tenté de changer l'angle de rotation, le servo a fait des tours complets et des demi tours sans qu'on sache pourquoi. Mais après quelques minutes d'intense réflexion, on a réglé le problème et tout fonctionne très bien maintenant. Reste encore à le visser à la pince et tester le bon fonctionnement des deux.

Séance 14

  • Nous avons terminé les deux circuits imprimés (PCB) sur fritzing.

Nous avons bien avancé durant cette séance puisque nous avons terminé l'arrangement du deuxième circuit imprimé; c'est a dire que nous avons modifié l'orientation des composants ainsi quel a position des fils pour que aucun fils ne se croisent sur le PCB ainsi que tous soient bien relié au Ground, au VIN et également pour que les électrons puissent bien circuler en évitant de mettre des angles droits Ce circuit imprimé sera placé à l'avant du véhicule pour être au plus proche des led infrarouges et des détecteurs de couleurs et lignes. Pendant ce temps, nous avons également testé le capteur d'intensité de gris qui permettra au robot de suivre les contours du terrain. Celui-ci fonctionne a l'inverse, c'est a dire qu'il s'arrête lorsqu'il voit une ligne mais il sera facile de le changer lors de la prochaine séance.

Séance 15

Pendant cette séance nous avons enfin pu finalisé fritzing : en effet, le professeur a vérifié que les PCB étaient bien conforme pour la réalisation. De plus nous avons placé la masse, en cuivre, qui composera le fond de la plaque pour relier tous les Ground ensemble. Nous avons aussi du enlever des éléments de la masse "orphelins" : c'est a dire qu'il ne devrait pas apparaître et doivent donc être supprimé un par un.

Nous avons également ajouter sur notre robot le détecteur d'ultrason. Un programme contenant le contrôle des moteurs, la détection des lignes et la détection des ultrasons a ainsi été complété pour le robot. Un problème est survenue lorsque nous avons placé le robot sur l'ancien terrain pour nos test : en effet le robot s'arrête régulièrement (le rythme correspond au délai entre chaque valeur de mesure de distance des obstacle). Cela n'est pas cohérent avec notre objectif de programmation, il faudra donc le modifier lors de la première séance.

Ainsi le robot dispose désormais de plus de tâche et le programme est complété de manière régulière en ajoutant uniquement un composant à chaque fois pour mieux faire interagir les programmes sur Arduino ensemble.

Séance 16

Séance 21

Lorsque nous sommes arrivées et que nous avons lancé le robot pour continuer les tests plus rien ne marchait. Nous avons donc du passait en revu tous les composants, les cables, les soudures, les piles pour essayer de trouver le problème. nous avons donc découvert qu'une ou deux soudure semblait laissé le courant passé de manière aléatoire et que les câbles composé de plusieurs câbles ont beaucoup de problème de faux contacts, sans doute au niveau des liaisons. Nous avons donc décidé de nous concentré sur le PCB pour pouvoir éliminé le plus possible ce problème. Nous avons récupérer la deuxième version des PCB, en effet la première version possédait pour tous les groupes des trous trop proches les uns des autres. Nous avons réalisé toutes les soudures en dehors des heures de cours. Il nous restait durant cette séance la réalisation d'un levier de contrôle ON/OFF. Pour cela nous avons souder un levier sur des pins pour ne laisser passer le courant que dans une certaine position du levier (PHOTO !!!!!!!!!!!!!!!). La soudure à été difficile car la pièce est très petite et la pièce difficile d'accès mais le résultat fonctionne très bien. Nous avons pu ainsi supprimer beaucoup de câbles et notamment brancher directement le contrôleur ce qui évitera tout problème de faux contact.


Séance 22

Nos avons voulu pouvoir enfin testé correctement notre detection d'infrarouge ainsi que la pince. Pour cela nous avons décidé d'installer le modèle de pince qui est trop plat au niveau de l'engrenage en attendant de pouvoir imprimé la nouvelle si on le peut.

Cela a été compliqué car d'une part le professeur a remarqué que notre servo-moteur ne pouvait pas fonctionnait avec le programme car nous avions un servo-moteur continue. Après en avoir changé il a fallut réfléchir à fixer la pince. Le servo-moteur a été placé entre les deux plaques en plastique du robot à l'aide de barre en métal et la deuxième a été fixé a une pièce relié à une autre barre en métal à mis hauteur (même hauteur que l'autre morceau de pince) qui se fixe normalement sur le servo-moteur.

Une fois que cela été terminé, nous avons réalisé tous les branchement servo-moteurs et détecteurs infra-rouges sur le PCB et l'Arduino. Lorsque nous avons testé notre programme 2 des 3 detecteurs IR gardait la valeur 0. Nous avons donc testé 1 à 1 tous les éléments pour savoir si le problème venait d'une mauvaise soudure, d'un composant grillé, d'un manque de batterie, etc. Sur les conseils du professeur nous avons ensuite débranché le servo-moteur pour voir si il n'y avait simplement pas trop de composant pour le courant accessible. En effet 2 des 3 leds IR ont commencé à correctement détecter la balle. Nous devons donc rajouter une série de pile pour envoyé suffisamment de courant ou de tension à tous les appareils. Pour cela nous avons récupérer un boitier de pile que nous avons soudé en parallèle avec les piles déjà installés. ???????????? ????????????


A ajouter

  • Créer la pince en 3D + photos (+refaire pince)
  • Réaliser et imprimer des engrenages en découpe laser + photos
  • Réaliser les 2 PCB (+ soudures)
  • Programme arduino suivre les lignes ( + vidéo ?)
  • Problèmes rencontrés : pour la pince ( et solution apportées )
  • différentes manières de procéder pour programme arduino et celle qu'on a choisi, pourquoi