Projet IMA3 P5, 2017/2018, TD1 : Différence entre versions

De Wiki de Projets IMA
(Partie Informatique)
(Séance supplémentaire)
 
(19 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
= Projet IMA3-SC 2017-2018 =
 
= Projet IMA3-SC 2017-2018 =
 
 
 
== Cahier des charges ==
 
 
 
=== Jeu de fléchettes intelligent ===
 
 
  
 
=== Description du système ===
 
=== Description du système ===
  
  
Le jeu de fléchettes sera équipé de capteurs piézo afin de détecter les impacts réalisés sur le jeu. Les données seront traitées et envoyées en wifi à un ordinateur.<br>
+
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.<br>
 
L'utilisateur aura accès à une interface web pour consulter les données en temps réel :
 
L'utilisateur aura accès à une interface web pour consulter les données en temps réel :
 
* le score
 
* le score
* les pressions mesurées sur le plateau
+
* les positions mesurées sur le plateau
  
 
=== Matériel nécessaire ===
 
=== Matériel nécessaire ===
Ligne 26 : Ligne 18 :
 
* <font style="color: red;">Breadboard</font>
 
* <font style="color: red;">Breadboard</font>
 
* <font style="color: red;">Jeu de fléchettes</font>
 
* <font style="color: red;">Jeu de fléchettes</font>
 
  
 
==Séance 1==
 
==Séance 1==
Ligne 79 : Ligne 70 :
  
 
Nous nous sommes aussi occupés de la configuration de la Raspberry pi en point d'accès Wifi. <br>
 
Nous nous sommes aussi occupés de la configuration de la Raspberry pi en point d'accès Wifi. <br>
Pour cela, nous nous sommes connectés à la Rapsberry via ssh et son adresse IP ethernet : 172.26.145.110 (différente de l'adresse IP wifi : 192.168.100.1).<br>  
+
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).<br>  
 
Une fois connectés sur la carte, il nous suffit de configurer cette dernière en pont d'accès.<br>
 
Une fois connectés sur la carte, il nous suffit de configurer cette dernière en pont d'accès.<br>
 
Pour cela, nous avons utilisé le paquetage <font style="color: red;">'''hostapd''' </font> et nous avons modifié les paramètres suivants :
 
Pour cela, nous avons utilisé le paquetage <font style="color: red;">'''hostapd''' </font> et nous avons modifié les paramètres suivants :
  
  
* le nom de notre point d'accès via <font style="color: red;">'''ssid="..."'''</font>
+
* le nom de notre point d'accès via <font style="color: red;">'''ssid="Flechettes"'''</font>
  
 
* le code de la France via <font style="color: red;">'''country_code=FR'''</font>
 
* le code de la France via <font style="color: red;">'''country_code=FR'''</font>
Ligne 92 : Ligne 83 :
 
* le WPA via <font style="color: red;">'''wpa=1'''</font>
 
* le WPA via <font style="color: red;">'''wpa=1'''</font>
  
* le mot de passe du point d'accès via <font style="color: red;">'''wpa_passphrase = **********'''</font>
+
* le mot de passe du point d'accès via <font style="color: red;">'''wpa_passphrase = flechettes'''</font>
  
 
* la protection de la Wifi via <font style="color: red;">'''wap_key_mgmt = WPA-PSK'''</font>
 
* la protection de la Wifi via <font style="color: red;">'''wap_key_mgmt = WPA-PSK'''</font>
Ligne 112 : Ligne 103 :
 
   {range 192.168.100.100 192.168.100.200;
 
   {range 192.168.100.100 192.168.100.200;
 
   option routers 192.168.100.1;}
 
   option routers 192.168.100.1;}
 
 
  
 
=== Partie Electronique ===
 
=== Partie Electronique ===
Ligne 142 : Ligne 131 :
 
Durant cette séance, nous avons commencé à créer notre site internet.  
 
Durant cette séance, nous avons commencé à créer notre site internet.  
  
<br>[[Fichier:Site_Web.png|700px|center]]<br>
+
<br>[[Fichier:Partie_jeu.png|700px|center]]<br>
  
 
Il est composé d'un bloc Menu, avec les entrées, et d'un bloc d'affichage, avec les sorties.
 
Il est composé d'un bloc Menu, avec les entrées, et d'un bloc d'affichage, avec les sorties.
Ligne 149 : Ligne 138 :
 
Notre bloc Menu possède 2 boutons :
 
Notre bloc Menu possède 2 boutons :
  
* Un bouton "RESET"  
+
* 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 "JOUER"
+
* Un bouton "ARRETER" qui arrête la carte raspberry en toute sécurité.
  
<br>[[Fichier:Site_Web_Menu.png|700px|center]]<br>
+
<br>[[Fichier:Banniere.png|700px|center]]<br>
  
 
Notre bloc d'affichage affiche une cible et le résultat des 2 joueurs.
 
Notre bloc d'affichage affiche une cible et le résultat des 2 joueurs.
  
<br>[[Fichier:Site_Web_Affichage.png|700px|center]]<br>
+
<br>[[Fichier:partiejeu.png|700px|center]]<br>
 +
 
 +
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 ===
 
=== Partie Electronique ===
  
 
==Séance supplémentaire==
 
==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===
 
===Partie Mécanique===
 
<br>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'').<br>
 
<br>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'').<br>
Ligne 172 : Ligne 171 :
  
 
===Partie Informatique===
 
===Partie Informatique===
    <br>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.
+
<br>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.</br>
+
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.<br>
  
 
== Bilan ==
 
== 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.

Version actuelle datée du 21 juin 2018 à 10:40

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 :


Principe jeuFlechettes.png


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.

ConcentrationContrainte.png

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.


Partie jeu.png

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é.

Banniere.png

Notre bloc d'affichage affiche une cible et le résultat des 2 joueurs.


Partiejeu.png

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.