Projet IMA3 P5, 2017/2018, TD1
Sommaire
Projet IMA3-SC 2017-2018
Description du système
Le jeu de fléchettes sera équipé de capteurs piézoéléctriques afin de détecter les impacts réalisés sur le jeu. Les données seront traitées par un arduino qui enverra les coordonnées et le score du coup en liaison série à un raspberry. L'affichage des scores et des positions des tirs se ferront sur une page web accessible en wifi avec un ordinateur.
L'utilisateur aura accès à une interface web pour consulter les données en temps réel :
- le score
- les positions mesurées sur le plateau
Matériel nécessaire
- Carte Arduino
- Shield pour Arduino
- Carte Raspberry avec adaptateur wifi
- Capteurs piézo (pour le moment nous n'en avons que deux mais c'est suffisant pour faire les tests)
- Breadboard
- Jeu de fléchettes
Séance 1
Nous avons résumé les différentes parties du système afin de nous partager le travail :
Partie Informatique
Carte Raspberry
- Envoi du signal brut en wifi en temps réel
- Affichage en temps réelle du site web
Interface web
- réception du signal brut
- évaluation des points
- visualisation des données de pression et des points
Partie Electronique
Nous avons finalement choisi d'utiliser une carte Arduino pour le convertisseur analogique -> numérique.
Jeu de fléchettes
- minimum 3 zones de touches
- utilisation de capteurs piézo pour déterminer la touche
- plutôt souple pour aider à la localisation de la touche
Carte électronique
- amplification du signal
- filtrage du signal
- CAN (Arduino)
Nous avons constaté des pics de tension détectés par l'Arduino lorsque des chocs étaient infligés au capteur piézo.
Il est important de noter que le capteur piézo était plus efficace d'un côté que de l'autre, ceci était du à une soudure présente que d'un seul côté qui surélevait le capteur. Cette soudure rendait le capteur asymétrique et favorisait la concentration de contrainte, amplifiant ainsi les résultats. Il sera donc important d'avoir ceci à l'esprit sur le système réel en ajoutant un petit objet entre le capteur piézo et le jeu de fléchette afin d'amplifier la sensibilité au besoin.
Séance 2
Partie Informatique
Nous nous sommes aussi occupés de la configuration de la Raspberry pi en point d'accès Wifi.
Pour cela, nous nous sommes connectés à la Rapsberry via ssh et son adresse IP ethernet : 172.26.145.171 (différente de l'adresse IP wifi : 192.168.100.1).
Une fois connectés sur la carte, il nous suffit de configurer cette dernière en pont d'accès.
Pour cela, nous avons utilisé le paquetage hostapd et nous avons modifié les paramètres suivants :
- le nom de notre point d'accès via ssid="Flechettes"
- le code de la France via country_code=FR
- le canal pour éviter que toutes les Raspberry soit sur le même canal via channel=5;
- le WPA via wpa=1
- le mot de passe du point d'accès via wpa_passphrase = flechettes
- la protection de la Wifi via wap_key_mgmt = WPA-PSK
Une fois la configuration terminée, nous avons dû configurer les IP des clients du point d'accès afin d'avoir la possibilité de se connecter sur la Wifi.
Pour cela, nous avons utilisé le paquetage isc-dhcp-server et nous avons modifié les paramètres suivants :
- le nom de notre domaine via option domain-name
- l'adresse du serveur DNS (192.168.100.1)
- l'état de légitimité de notre serveur DHCP via authoritative
Ensuite, nous avons ajouter, dans le code, ce bloc réseau :
subnet 192.168.100.0 netmask 255.255.255.0 {range 192.168.100.100 192.168.100.200; option routers 192.168.100.1;}
Partie Electronique
Nous avons réalisés plusieurs essais avec la carte Arduino afin de mesurer les données envoyées par les capteurs piézo
Le problème que nous avions rencontré à la séance précédente était une impédance trop forte du capteur piézo lorsque aucune variation de pression n'est faite, donnant des valeurs erronées lors d'une mesure de tension.
Solution 1 - utilisation d'un AOP
Ceci est le premier montage essayé, nous avons utilisé un LM324 (non sujet au problème de "phase reversal" dans notre cas) afin de comparer la tension captée à une tension de référence modifiable par un potentiomètre.
Ce montage était supposé augmenter l'impédance d'entrée du montage après le capteur piézo tout en permettant des erreurs de mesures plus fortes (car seulement deux signaux possibles en sortie tout ou rien), cependant cela n'a pas suffit à stabiliser la mesure qui, bien que plus fiable pouvait s'avérer tout de même fausse car on devait parfois ré-ajuster la tension de référence.
Solution 2 - utilisation d'une résistance de faible valeur en parallèle du capteur piézo
Ceci est la solution retenue car elle permet l'utilisation d'une entrée analogique. La résistance ajoutée permet à l'entrée analogique d'être reliée à la masse lorsque le capteur piézo n'est pas sollicité.
Nous avons également trouvé un modèle qui nous à permis, avec deux capteurs posés à la base d'une règle de trouver à quelle coordonnées la pression était faite en analysant les deux signaux trouvés.
Ceci s'avère donc une solution efficace qui permettra d'utiliser plusieurs capteurs pour augmenter la précision de la mesure des coordonnées de l'impact.
Séance 3
Partie Informatique
Durant cette séance, nous avons commencé à créer notre site internet.
Il est composé d'un bloc Menu, avec les entrées, et d'un bloc d'affichage, avec les sorties.
Notre bloc Menu possède 2 boutons :
- Un bouton "JOUER" pour lancer la saisie des points et démarrer le jeu.
- Un bouton "RESET" qui remet a zéro les scores et l'affichage du dernier coup.
- Un bouton "ARRETER" qui arrête la carte raspberry en toute sécurité.
Notre bloc d'affichage affiche une cible et le résultat des 2 joueurs.
On aura donc accès à une visualisation de la cible ainsi qu'a une partie "tableau des scores" où on retrouvera le score du dernier coup tiré ainsi que le total des points.
Partie Electronique
Séance supplémentaire
Lors des séances supplémentaires nous avons fini le code html, css et javascript. Le site web final a été modifié pour aérer son affichage. Il se comporte donc d'une partie "menu" avec trois boutons, d'un bloc "Joueur 1" et d'un bloc "Joueur 2". Nous afficherons donc dynamiquement la position et la valeur du dernier coup tiré et le score total. Le code est organisé de la façon suivante:
- L'arduino calcule les coordonnées x et y de la fléchette par rapport au centre de la cible. Et le score que l'on obtient. On retourne sur la liaison série x puis y puis le score.
- La raspberry affiche le site web et attends que l'on clique sur le bouton "jouer" avant de lire la liaison série. Une fois l'acquisition faite on regarde à quel joueur on doit attribuer les points et on affiche le résultat sur le site.
- L'affichage de la flechète se fait en déplaçant une boite contenant une croix tandis que le score et le dernier coup sont des valeurs retournées dans un "span".
- En appuyant sur "reset" on remet les scores à 0.
Partie Mécanique
Pour réaliser notre projet, nous devions faire une cible afin de tester. Pour ce fait, nous avons décidé d'utiliser le Fabricarium (1).
Nous avons utilisé la découpeuse-laser pour créer notre cible.
(1) http://www.fabricarium.fr/mediawiki-1.23.5/index.php/Accueil
(1) https://fr-fr.facebook.com/fabricarium/
Partie Informatique
Afin de savoir combien de points un joueur a obtenu, nous avons choisi de trouver où la fléchette a frappé. Pour ce faire, nous avons donc utilisé 5 capteurs piézo-électrique, un au centre et 4 à 0 + k*pi/2, chacun au maximum des extrémités de la cible. Afin de trouver la position de la fléchette, nous avons fait une analogie avec le calcul du centre de masse sur un système discret. Ainsi la cible est munie d'un repère ce qui nous permet, en connaissant l'emplacement des capteur et leur amplitude au moment de la frappe, de calculer la position, puis le nombre de points obtenu grâce à ce tir.
Puisque les piézo transmettent pendant un temps non discret, il était nécessaire de faire une pause après chaque donnée prise (donc chaque tir), on ne peut par conséquent pas tirer deux fléchette à moins d'une seconde d'intervalle.
Bilan
Problèmes rencontrés
Le bois que nous avons utilisé est trop dur ce qui perturbe la lecture des coordonnées. Lorsqu'on tire une fléchette la valeur transmise ne correspond donc pas à la valeur réelle.
Conclusion
Nous avons donc réussi à créer une cible qui récupère des coordonnées et les affiche sur un site internet. Le raspberry héberge bien un site web et est connecté en série a un arduino.
Fichiers créés
Fichier:Html.zip -> Fichier contenant le code implémenté sur le raspberry. Fichier:Arduino.zip -> Fichier contenant le code implémenté sur l'arduino.