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

De Wiki de Projets IMA
(Séance 3)
(Documents)
 
(85 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
= Projet IMA3-SC 2017-2018  =
 
= Projet IMA3-SC 2017-2018  =
  
Jeu en ligne de gestion à interface tangible
+
Interface de gestion à interface tangible
  
 
== Cahier des charges ==
 
== Cahier des charges ==
Ligne 7 : Ligne 7 :
 
=== Description du système ===
 
=== Description du système ===
  
Nous prévoyons de mettre en forme un jeu en ligne de gestion qui serait en relation avec une carte électronique où l'on suivrait en direct l'évolution du jeu à l'aide d'un écran LCD et avec laquelle on interagirait avec une interface web.
+
Nous prévoyons de mettre en forme une interface de gestion de Tamagotchi qui serait en relation avec une carte électronique sur un Arduino. Cette carte nous indiquera l'évolution du Tamagotchi à l'aide d'un écran LCD.
  
 
=== Matériel nécessaire ===
 
=== Matériel nécessaire ===
Ligne 15 : Ligne 15 :
 
*<span style="color: green;">Raspberry Pi 2 <br/>
 
*<span style="color: green;">Raspberry Pi 2 <br/>
 
*<span style="color: green;">4 LEDs <br/>
 
*<span style="color: green;">4 LEDs <br/>
*<span style="color: green;">5 résistances <br/>
+
*<span style="color: green;">5 résistances 330 ohm <br/>
 
*<span style="color: green;">Afficheur LCD 2 par 16 bits <br/>
 
*<span style="color: green;">Afficheur LCD 2 par 16 bits <br/>
 
*<span style="color: green;">2 boutons <br/>
 
*<span style="color: green;">2 boutons <br/>
*<span style="color: green;">1 potentiomètre
+
*<span style="color: green;">1 potentiomètre 22k
  
 
== Séance 1 ==
 
== Séance 1 ==
Ligne 24 : Ligne 24 :
 
*:Nous avons tout d'abord décidé le sujet que nous allons réaliser et les étapes de sa réalisation.  
 
*:Nous avons tout d'abord décidé le sujet que nous allons réaliser et les étapes de sa réalisation.  
 
*:Ensuite nous avons listé le matériel dont nous aurons besoin pour notre projet.
 
*:Ensuite nous avons listé le matériel dont nous aurons besoin pour notre projet.
*:Nous avons enfin prévu deux équipes de deux personnes : la première équipe va s'occuper de la configuration de la Raspberry Pi tandis que l'autre s'occupera de d'assembler le montage contenant l'arduino et l'afficheur et de créer le shield.  
+
*:Nous avons enfin prévu deux équipes de deux personnes : la première équipe va s'occuper de la configuration de la Raspberry Pi tandis que l'autre s'occupera de de créer le shield qui sera appliqué sur l'Arduino.
  
 
*'''Exemple de jeu'''
 
*'''Exemple de jeu'''
 
<br>
 
<br>
[[Fichier:ogame1.png||thumb|center|400px|Exemple d'interface web d'un jeu de gestion en ligne]]<br>
+
[[Fichier:tamago_exemple.png||thumb|center|200px|Exemple de Tamagotchi]]<br>
 
*'''Raspberry Pi'''
 
*'''Raspberry Pi'''
*:Nous avons débuté la configuration du Raspberry Pi et sommes parvenu à la configuration en point d'accès;
+
*:Nous avons débuté la configuration du Raspberry Pi et sommes parvenus à la configuration en point d'accès;
 
*'''Appréhension du logiciel Fritzing'''
 
*'''Appréhension du logiciel Fritzing'''
 
*:Découverte du logiciel Fritzing et de l'arduino.
 
*:Découverte du logiciel Fritzing et de l'arduino.
Ligne 44 : Ligne 44 :
 
*:A partir du SparksFun Inventors Kit fourni, nous avons effectué le montage électronique que nous avions réalisé la séance précédente sur Fritzing.
 
*:A partir du SparksFun Inventors Kit fourni, nous avons effectué le montage électronique que nous avions réalisé la séance précédente sur Fritzing.
 
*:Nous avons également programmé l'Arduino pour parcourir différents affichages sur le LCD à partir d'un bouton.
 
*:Nous avons également programmé l'Arduino pour parcourir différents affichages sur le LCD à partir d'un bouton.
 +
[[Fichier:cablage_arduino.jpg|thumb|center|300px|Aperçu du montage sur l'Arduino]]
  
 
== Séance 3 ==
 
== Séance 3 ==
 
*'''Raspberry Pi'''
 
*'''Raspberry Pi'''
Nous avons terminé la réalisation du guide pour configurer la Raspberry Pi.
+
*:Nous avons terminé la réalisation du guide pour configurer la Raspberry Pi et avons continué la réalisation du site web dans l'optique de mettre en relation la Raspberry et l'arduino.
Nous avons continué le travail de la réalisation du site web toujours dans l'optique de mettre en relation la Raspberry et l'arduino grâce au langage Java script. Nous sommes parvenus à obtenir un début de site web.
 
[[Fichier:cablage_arduino.jpg|thumb|center|400px|Aperçu du montage sur l'Arduino]]
 
  
 
*'''Mise en place du shield'''
 
*'''Mise en place du shield'''
Nous avons terminé la réalisation du PCB sur Fritzing et avons lancé l'impression.
+
*:Nous avons terminé la réalisation du PCB sur Fritzing et avons lancé sa gravure.
Nous avons également continué la programmation de l'affichage du jeu de gestion et de l'affichage du PCB.
+
*:Nous avons également continué la programmation de l'affichage du jeu de gestion et de l'affichage du PCB.
[[Fichier:platine_pcb_final.png|thumb|center|400px|Schéma PCB final]]
+
<gallery mode="packed" heights="300px">
 +
Fichier:platine_pcb_final.png|Platine d'essai finale
 +
Fichier:pcb_final.png|PCB final
 +
</gallery>
  
== Bilan ==
+
= Travail hors-séance =
  
== Activité électronique ==
+
== Configuration SSH ==
 +
Tout d'abord, pour pouvoir travailler hors de l'école, nous avons mis en place un moyen de se connecter en SSH à partir de nos ordinateurs Windows ou Linux avec un câble ethernet. Pour cela, sur le raspberry, dans le fichier <code>/etc/network/interfaces</code>, on écrit la configuration suivante:
 +
auto eth0
 +
iface eth0 inet static
 +
address 192.168.0.200
 +
netmask 255.255.255.0
 +
De même pour nos ordinateurs sous Linux, on écrit la configuration suivante:
 +
auto "nom_port_ethernet"
 +
iface "nom_port_ethernet" inet static
 +
address 192.168.0.11
 +
netmask 255.255.255.0
 +
Puis à partir de la console, on se connecte en SSH avec:
 +
ssh pi@192.168.0.200
 +
 
 +
Sous Windows, il faut modifier l'IPv4 du port ethernet en question. Pour cela, on va dans le panneau de contrôle, puis Network and Sharing Center, puis Change adapter settings, et là on trouve l'adaptateur ethernet. On accède à ses propriétés et on modifie le protocole internet version 4 de cette manière:
 +
[[Fichier:ipv4_exemple.jpg|300px|center]]
 +
Maintenant que notre addresse IP ethernet est statique, à l'aide du logiciel Putty, on se connecte en SSH au RPi, comme on peut le voir ci-dessous:
 +
[[Fichier:putty.jpg|300px|center]]
 +
 
 +
== PCB ==
 +
 
 +
<gallery mode="packed" heights="300px">
 +
Fichier:img_pcb_cuivre.jpg|PCB avec composants soudés
 +
Fichier:img_shield_arduino.jpg|Shield sur Arduino
 +
</gallery>
 +
Les tests de routage ont été effectués et tout fonctionne correctement.<br>
 +
Il était également nécessaire d'ajouter deux fils entre deux des LEDs et le GND; En effet sur Fritzing nous n'étions pas parvenus à les connecter sans que les fils ne se croisent. Nous n'avions pas de fil gainé sous la main, on a dû utiliser du fil d'acier, et isoler le tout du mieux possible.
 +
 
 +
== Fonctionnalités du système ==
 +
Le shield simule le Tamagotchi, en ayant un bouton qui permet de changer d'affichage (niveau et timer de progression), et l'autre qui permet d'entraîner son Tamagotchi pour passer au niveau supérieur. La progression est aussi indiquée par les 4 LEDs: 1 LED allumée représente 1/4 du temps écoulé. Egalement, on souhaite pouvoir réinitialiser son niveau en appuyant sur les deux boutons simultanément. Il faut donc que ces fonctionnalités soient utilisables sur l'interface web grâce à la liaison série, et que les informations soient synchronisées.
 +
 
 +
*'''Arduino'''
 +
*:Le premier bouton, pour changer d'affichage, n'est pas en relation avec la liaison série comme il ne sert qu'à changer l'affichage LCD.
 +
*:Le second bouton, pour augmenter le niveau, incrémente le niveau et débute le timer sur l'affichage LCD, et envoye avec la ligne <code>Serial.write()</code> l'instruction à la page web d'incrémenter le niveau affiché, et le ''temps d'entraînement'' débute également.
 +
*:Le potentiomètre permet d'ajuster la luminosité de l'affichage LCD.
 +
*:Appuyer sur les deux boutons simultanément reset le niveau à 1 et le timer à 0, et envoie également une instruction spécifique à la page web pour faire de même.
 +
*:'''Le programme Arduino commenté est fourni plus bas.'''
 +
 
 +
*'''Raspberry Pi et interface web'''
 +
*:Avec le websocket, on peut envoyer et recevoir des données de l'interface web sur le Raspberry Pi jusqu'à l'Arduino. On a donc mis en place l'interface ci-contre en HTML et JavaScript en s'inspirant de l'exemple du guide de configuration.
 +
*:Le domaine du site est ''jeudegestion.jeudegestion.org'', il est accessible une fois connecté au SSID WIFI ''jeudegestion''.
 +
*:[[Fichier:interface_web.png||thumb|center|800px|Interface web]]
 +
*:Le bouton ''entraîner'' permet d'augmenter d'un niveau le Tamagotchi.<br>
 +
*:Le bouton ''synchroniser'' permet de récupérer le niveau du Tamagotchi de l'Arduino car le niveau est réinitialisé à 1 lors de l'ouverture de la page web.<br>
 +
*:Le ''niveau du Tamagotchi'' s'incrémente dès qu'on appuie sur ''entraîner'', et également lorsque le bouton ''niveau'' du shield est appuyé, parce que le websocket est en constante écoute de la liaison série.<br>
 +
*:''Temps d'entraînement'' est le temps nécessaire entre chaque passage au niveau supérieur.<br>
 +
*:'''Le code commenté HTML et JS est fourni plus bas.'''<br>
 +
 
 +
Comme nous avons décidé de configurer le timer en fonction du niveau sur l'Arduino et sur la page web, et non pas d'envoyer la donnée timer de l'Arduino vers la page web, il s'est avéré délicat d'ajuster la valeur d'une seconde identique entre les deux dispositifs.<br>
 +
Il est donc possible qu'une fois arrivé à des niveaux élevés et de ce fait des temps d'entraînement élevés, les timers ne soient pas en total synchronisation et peuvent avoir 2 à 3 secondes de décalage.
 +
 
 +
= Bilan =
 +
Nous sommes ainsi parvenus à mettre en place un projet qui répond aux demandes du sujet, c'est-à-dire mettre en relation le raspberry pi et le micro-contrôleur Arduino à l'aide d'une communication série à travers un serveur Websocket. Il serait intéressant d'ajouter plus de fonctionnalités au Tamagotchi et ainsi obtenir une interface de contrôle plus complète. Il est également possible de rentre le dispositif Arduino portable à l'aide d'une batterie, ainsi on pourrait jouer au jeu lorsqu'on se déplace, puis une fois en présence du raspberry pi, il suffirait de le connecter et le synchroniser, et le contrôler sur la page web et non plus sur le shield.
 +
 
 +
= Annexes =
 +
Fichier Fritzing: [[Fichier: fritzing_tamagotchi.zip]]<br>
 +
Fichier page web: [[Fichier: page_web_tamagotchi.zip]]<br>
 +
Fichier page web: [[Fichier: arduino_tamagotchi.zip]]<br>

Version actuelle datée du 18 juin 2018 à 19:01

Projet IMA3-SC 2017-2018

Interface de gestion à interface tangible

Cahier des charges

Description du système

Nous prévoyons de mettre en forme une interface de gestion de Tamagotchi qui serait en relation avec une carte électronique sur un Arduino. Cette carte nous indiquera l'évolution du Tamagotchi à l'aide d'un écran LCD.

Matériel nécessaire

  • SparksFun Inventors Kit
  • Arduino Uno
  • Raspberry Pi 2
  • 4 LEDs
  • 5 résistances 330 ohm
  • Afficheur LCD 2 par 16 bits
  • 2 boutons
  • 1 potentiomètre 22k

Séance 1

  • Mise en place du projet
    Nous avons tout d'abord décidé le sujet que nous allons réaliser et les étapes de sa réalisation.
    Ensuite nous avons listé le matériel dont nous aurons besoin pour notre projet.
    Nous avons enfin prévu deux équipes de deux personnes : la première équipe va s'occuper de la configuration de la Raspberry Pi tandis que l'autre s'occupera de de créer le shield qui sera appliqué sur l'Arduino.
  • Exemple de jeu


Exemple de Tamagotchi

  • Raspberry Pi
    Nous avons débuté la configuration du Raspberry Pi et sommes parvenus à la configuration en point d'accès;
  • Appréhension du logiciel Fritzing
    Découverte du logiciel Fritzing et de l'arduino.
    Mise en place partielle du PCB sur Fritzing.
Aperçu conception PCB

Séance 2

  • Raspberry Pi
    Nous sommes parvenus à mettre en marche l'interface web en relation avec la Raspberry Pi. Insertion d'images et textes sur la page web.
    Quelques problèmes ont été rencontrés lors de la configuration car certaines commandes n'étaient pas indiquées dans le guide. Par exemple ifup wlan qu'il fallait écrire pour réussir la configuration IP des clients WIFI.
  • Appréhension du logiciel Fritzing et mise en place du PCB
    A partir du SparksFun Inventors Kit fourni, nous avons effectué le montage électronique que nous avions réalisé la séance précédente sur Fritzing.
    Nous avons également programmé l'Arduino pour parcourir différents affichages sur le LCD à partir d'un bouton.
Aperçu du montage sur l'Arduino

Séance 3

  • Raspberry Pi
    Nous avons terminé la réalisation du guide pour configurer la Raspberry Pi et avons continué la réalisation du site web dans l'optique de mettre en relation la Raspberry et l'arduino.
  • Mise en place du shield
    Nous avons terminé la réalisation du PCB sur Fritzing et avons lancé sa gravure.
    Nous avons également continué la programmation de l'affichage du jeu de gestion et de l'affichage du PCB.

Travail hors-séance

Configuration SSH

Tout d'abord, pour pouvoir travailler hors de l'école, nous avons mis en place un moyen de se connecter en SSH à partir de nos ordinateurs Windows ou Linux avec un câble ethernet. Pour cela, sur le raspberry, dans le fichier /etc/network/interfaces, on écrit la configuration suivante:

auto eth0
iface eth0 inet static
address 192.168.0.200
netmask 255.255.255.0

De même pour nos ordinateurs sous Linux, on écrit la configuration suivante:

auto "nom_port_ethernet"
iface "nom_port_ethernet" inet static
address 192.168.0.11
netmask 255.255.255.0

Puis à partir de la console, on se connecte en SSH avec:

ssh pi@192.168.0.200

Sous Windows, il faut modifier l'IPv4 du port ethernet en question. Pour cela, on va dans le panneau de contrôle, puis Network and Sharing Center, puis Change adapter settings, et là on trouve l'adaptateur ethernet. On accède à ses propriétés et on modifie le protocole internet version 4 de cette manière:

Ipv4 exemple.jpg

Maintenant que notre addresse IP ethernet est statique, à l'aide du logiciel Putty, on se connecte en SSH au RPi, comme on peut le voir ci-dessous:

Putty.jpg

PCB

Les tests de routage ont été effectués et tout fonctionne correctement.
Il était également nécessaire d'ajouter deux fils entre deux des LEDs et le GND; En effet sur Fritzing nous n'étions pas parvenus à les connecter sans que les fils ne se croisent. Nous n'avions pas de fil gainé sous la main, on a dû utiliser du fil d'acier, et isoler le tout du mieux possible.

Fonctionnalités du système

Le shield simule le Tamagotchi, en ayant un bouton qui permet de changer d'affichage (niveau et timer de progression), et l'autre qui permet d'entraîner son Tamagotchi pour passer au niveau supérieur. La progression est aussi indiquée par les 4 LEDs: 1 LED allumée représente 1/4 du temps écoulé. Egalement, on souhaite pouvoir réinitialiser son niveau en appuyant sur les deux boutons simultanément. Il faut donc que ces fonctionnalités soient utilisables sur l'interface web grâce à la liaison série, et que les informations soient synchronisées.

  • Arduino
    Le premier bouton, pour changer d'affichage, n'est pas en relation avec la liaison série comme il ne sert qu'à changer l'affichage LCD.
    Le second bouton, pour augmenter le niveau, incrémente le niveau et débute le timer sur l'affichage LCD, et envoye avec la ligne Serial.write() l'instruction à la page web d'incrémenter le niveau affiché, et le temps d'entraînement débute également.
    Le potentiomètre permet d'ajuster la luminosité de l'affichage LCD.
    Appuyer sur les deux boutons simultanément reset le niveau à 1 et le timer à 0, et envoie également une instruction spécifique à la page web pour faire de même.
    Le programme Arduino commenté est fourni plus bas.
  • Raspberry Pi et interface web
    Avec le websocket, on peut envoyer et recevoir des données de l'interface web sur le Raspberry Pi jusqu'à l'Arduino. On a donc mis en place l'interface ci-contre en HTML et JavaScript en s'inspirant de l'exemple du guide de configuration.
    Le domaine du site est jeudegestion.jeudegestion.org, il est accessible une fois connecté au SSID WIFI jeudegestion.
    Interface web
    Le bouton entraîner permet d'augmenter d'un niveau le Tamagotchi.
    Le bouton synchroniser permet de récupérer le niveau du Tamagotchi de l'Arduino car le niveau est réinitialisé à 1 lors de l'ouverture de la page web.
    Le niveau du Tamagotchi s'incrémente dès qu'on appuie sur entraîner, et également lorsque le bouton niveau du shield est appuyé, parce que le websocket est en constante écoute de la liaison série.
    Temps d'entraînement est le temps nécessaire entre chaque passage au niveau supérieur.
    Le code commenté HTML et JS est fourni plus bas.

Comme nous avons décidé de configurer le timer en fonction du niveau sur l'Arduino et sur la page web, et non pas d'envoyer la donnée timer de l'Arduino vers la page web, il s'est avéré délicat d'ajuster la valeur d'une seconde identique entre les deux dispositifs.
Il est donc possible qu'une fois arrivé à des niveaux élevés et de ce fait des temps d'entraînement élevés, les timers ne soient pas en total synchronisation et peuvent avoir 2 à 3 secondes de décalage.

Bilan

Nous sommes ainsi parvenus à mettre en place un projet qui répond aux demandes du sujet, c'est-à-dire mettre en relation le raspberry pi et le micro-contrôleur Arduino à l'aide d'une communication série à travers un serveur Websocket. Il serait intéressant d'ajouter plus de fonctionnalités au Tamagotchi et ainsi obtenir une interface de contrôle plus complète. Il est également possible de rentre le dispositif Arduino portable à l'aide d'une batterie, ainsi on pourrait jouer au jeu lorsqu'on se déplace, puis une fois en présence du raspberry pi, il suffirait de le connecter et le synchroniser, et le contrôler sur la page web et non plus sur le shield.

Annexes

Fichier Fritzing: Fichier:Fritzing tamagotchi.zip
Fichier page web: Fichier:Page web tamagotchi.zip
Fichier page web: Fichier:Arduino tamagotchi.zip