Projet IMA3 P5, 2017/2018, TD2

De Wiki de Projets IMA

Projet IMA3-SC 2017-2018: La catapulte BeerPong

Cahier des charges

Description du système

Le jeu du Beer-Pong, très répandu chez les jeunes, consiste à envoyer une balle de ping-pong dans un gobelet situé à l'extrémité d'une table. La catapulte BeerPong consiste donc à reproduire ce principe. Grâce à un capteur, la catapulte mesure la distance entre elle même et le gobelet, l'utilisateur peut, grâce à son smartphone, faire pivoter la catapulte jusqu'à obtenir l'angle souhaité. Une fois calibrée, l'utilisateur appuie sur le bouton "lancer". En fonction de la distance mesurée, la catapulte règle sa puissance, le but étant de mettre la balle de ping-pong dans le gobelet.

Matériel nécessaire

  • Une carte Arduino
  • Une carte Raspberry Pi 3
  • Un capteur à ultrasons
  • 3 servo moteurs
  • Du matériel pour la partie mécanique (Elastiques , pièces imprimées en 3D..)

Séance 1

  • Choix du sujet:

Discutant en groupe, plusieurs idées nous sont venues à l'esprit, nous devions donc discuter de la faisabilité des différentes idées. 2 idées se sont alors démarquées: une catapulte, ou bien un robot sur roues qui suivrait une personne, à l'aide d'une caméra. Ce dernier projet reprenait l'idée de la valise qui suit son utilisateur. Nous avons donc décidé d'opter pour une idée amusante et inconnue: la catapulte beerpong.

  • Élaboration de la liste du matériel nécessaire
  • Détermination et répartition des tâches à effectuer

Partie Informatique

Grâce à un tutoriel proposé par nos encadrants, nous devions créer un point d'accès wifi via une Raspberry Pi, afin de pouvoir commander notre système via un téléphone intelligent. Pour cela, nous avons dû réaliser plusieurs étapes. Tout d'abord, il a fallut procéder à l'installation du Linux (Raspbian) dans la Raspberry PI 3 via la carte microSD. Ensuite, nous devions nous occuper de l'activation de la connexion ssh à la Raspberry. Malgré le tutoriel donné, une commande n'était pas indiquée dans celui-ci afin de gérer les conflits entre les paquets. Ce n'est seulement qu'après plusieurs essais et l'aide de notre encadrant que nous avons réussi à obtenir un réseau wifi. Il nous restait cependant à permettre à la Raspberry Pi de générer son adresse IP afin de pouvoir se servir du serveur web, et donc de l'interface Utilisateur. Cette interface nous permettra par la suite de communiquer avec l'arduino.

Partie électronique

Nous nous sommes également occupé de la partie FPGA. Lors de cette première séance, nous avons d'abord dû travailler sur un tutoriel fourni sur Altium, dans le but de nous familiariser avec le logiciel. Ce tutoriel nous a permis de générer un compteur afin d'allumer des Leds. Une fois réalisé, nous devions réfléchir à comment mettre en lien le FPGA avec notre projet. Nous avons donc décidé de nous intéresser à un des servo-moteurs de la catapulte. La recherche du matériel nécessaire ainsi que la compréhension de son fonctionnement nous ont pris la fin de la séance.

Séance 2

Partie Informatique

Lors de cette séance nous avons fait en sorte que notre Raspberry devienne un HotSpot Wi-Fi du nom de : Catapulte PMA. Beaucoup de problèmes sont survenus lors de cette séance, de plus nous n'étions pas encore habitué à l'environnement Debian. Nous avons passé la séance à nous documenter de manière autodidacte afin de mieux nous en sortir. Nous avons appris beaucoup de choses sur le fonctionnement de GNU/LINUX.

En même temps, nous nous sommes attaqués à la programmation de l'arduino. Nous avons commencé par la fonction permettant de mesurer la distance entre la catapulte et le gobelet. Cette fonction nous permettrait par la suite, à l'aide d'équations mécaniques et différents tests, de pouvoir ajuster la puissance du tir en fonction de la distance du gobelet.

code arduino

Partie mécanique

La catapulte nécessitant de fabriquer certains éléments nous même, nous avons décider de modéliser les éléments sur Onshape afin de les imprimer ensuite en impression 3D. Notre vision de la catapulte fût tout de suite celle adoptée. Nous n'avons donc réalisé aucune grande modification sur l'aspect général de la catapulte. Le but serait le suivant: un servo-moteur (n°1) bloquerait le bras de la catapulte. Une fois le bras bloqué et la distance mesurée, l'autre servo-moteur situé en haut du support (n°2) tendrait l'élastique. le servo-moteur n°1 tournerait ensuite afin de libérer le bras afin d'envoyer la balle. Nous avons ainsi modélisé le support de la catapulte ainsi que le bras. Les éléments ont été conçus afin de pouvoir placer les servo-moteurs ainsi que l'élastique sur le bras.

Support de la catapulte Bras de la catapulte


Partie électronique

Cette séance a été moins concentrée sur la partie électronique. Nous avons quand même commencé les recherches sur les servomoteurs. Nous avons recherché la datasheet des moteurs et, grâce au site openclassroom.com nous avons pu comprendre comment faire tourner nos moteurs. En effet selon la longueur de l'impulsion envoyée le moteur tournera sur un plus ou moins grand angle avec toujours un espacement de 20ms entre deux signaux.

Datasheet des moteurs Graphiques du signal pour les moteurs

Séance 3 et travail personnel

Partie Informatique

Lors de cette séance, nous avons repris la configuration des paramètres de la Raspberry Pi. Grâce au tutoriel fourni, elle est désormais capable de communiquer avec l'arduino via la liaison série (USB). Suite à cela, nous avons pu créer un site web sur le serveur web de la Raspberry qui affichera en temps presque réel des données de l'arduino : Distance avec la cible , catapulte armée ou pas..

Partie Mécanique

Au niveau de la catapulte en elle-même, mettre un servomoteur classique pour tendre l'élastique ne correspondait pas. En effet, le servomoteur ne tournant pas à 360 degrés, nous avons donc décidé d'utiliser un autre moteur, un moteur 360. Ce nouveau moteur permettrait d'effectuer plusieurs tours sur lui même et donc de tendre l'élastique comme il le souhaite. Nous avons donc réalisé une nouvelle pièce en impression 3D afin que l'élastique puisse s'enrouler autour.

Rondelle qui tire l'élastique

Partie électronique

Lors de cette séance, nous sommes retourné en salle d'électronique dans le but de mettre en lien la FPGA et notre projet. Comme notre projet demande plusieurs servomoteurs, nous avons donc décidé de nous focaliser sur un seul servomoteur. Le principe était de pouvoir faire tourner un servomoteur à l'aide du logiciel Altium et de la board électronique.

Nous avons d'abord pensé qu'il suffisait de brancher le servomoteur directement sur la FPGA. Nous avons donc créé un schématic Altium en envoyant des impulsions plus ou moins longue lorsque l'on appuyait sur un bouton, ceci grâce à une clock préréglée.

Schema Altium

Après avoir tester en branchant notre moteur nous avons remarqué que cela ne fonctionnait pas.

Après discussion avec le professeur, le servomoteur que l'on nous a donné ne pouvait pas être alimenté directement avec la FPGA car elle ne délivrait pas assez de courant. Après de multiples recherches,nous n'avons pas réussi à brancher correctement le moteur et n'avons pas pu le tester. Cette partie reste encore incomprise pour notre part.

Par rapport à la catapulte, un problème est observé. En effet, le code Arduino étant bien avancé, nous avons décidé d'effectuer quelques tests afin de savoir si notre projet était bien réalisable en l'état. Nous avons donc simulé un jeter de balle, en faisant tendre l'élastique et en le relâchant. L'Arduino se réinitialise par sécurité car asservir les deux servo-moteurs en continu consomme trop de courant. Nous pensons qu'utiliser un condensateur, ou des transistors ou un contrôleur servo-moteur pourraient résoudre le problème !

Après réflexion, le plus simple pour remédier à cela serait d'utiliser une alimentation externe pour les servo-moteurs.

Bilan

Notre catapulte fonctionne en théorie. La partie mécanique est terminée et tout est monté sur une plaque en bois comme support.

Catapultepma.jpg

L'Arduino envoie par le biais de la liaison série des informations au Raspberry pi 3 comme la distance entre la catapulte et l'objet. Au lancement de la Raspberry un fichier en python est lancé en arrière plan. Ce fichier python permet d'écrire dans le fichier /var/www/html/texte.txt les données reçues via la liaison série. Ainsi avec un peu de javascript pour rafraîchir la page régulièrement et la balise <object>, on peut afficher en temps presque réel la distance catapulte-gobelet.

JavascriptF5.png

Balisedisplay.png

Capture du 2018-06-17 20-00-02.png

Le problème que nous avons est que nous n'arrivons pas à asservir en position le servo 360. Le système peut alors enrouler l’élastique et tirer correctement MAIS le servo 360 ne peut retourner à sa position initiale ( celle avant d'avoir tiré ). Par conséquent, la catapulte ne peut pas se réinitialiser et réitérer l'opération.. Ainsi la variable distance ne sert à rien puisque nous n'avons pas pu définir une fonction du temps d'enroulement en fonction de la distance.

Voici la vidéo d'un tir sans prise en compte de la distance :

Schéma bilan de notre projet (En gris ce qui n'a pas pu être fait) :

Catapulte resume.PNG

Améliorations possibles

Avec plus de temps et de connaissances, nous aurions pu développer d'avantage notre catapulte. En effet, au début nous voulions pouvoir faire pivoter la catapulte sur elle même afin qu'elle puisse viser différents verres sans la déplacer. De plus, notre capteur reste imprécis : nous ne pouvons pas savoir si celui-ci détecte le gobelet en son milieu ou sur son coté, ce qui peut varier de plusieurs centimètres. Dû à cela, nous pensons que le lancer de la balle sera toujours approximatif et imprécis. Comme dit dans le bilan, le fait d'avoir opté pour un servomoteur asservi en vitesse, c'était plus compliqué au niveau hardware pour retourner à la position initiale, il nous faudrait donc travailler sur certaines modifications afin d'obtenir le résultat voulu.