Contrôle d'accéléromètre, 2012/2013, TD2

De Wiki de Projets IMA


Vidéo HD


Evaluation informatique et électronique

Gestion de projet / rédaction Wiki

  • Informatique : Quelques mots sur la gestion de projet. Le Wiki est rédigé mais avec des coquilles et dans un style parfois peu soutenu. Des schémas et des illustrations. Une vidéo décrivant la partie informatique et présentant une démonstration. Note : 90%.
  • Electronique :wiki peu détaillé, présence d’un synoptique mais celui-ci n’est pas décrit, peu d’illustration. Note : 65%.

Note : 77.5%.

Test fonctionnels

  • Sous-système. Note : 88.5%.
    • Sous-système informatique : Pas de test réalisé devant l'enseignant. Test par l'enseignant concluant. Pas vraiment d'amélioration par rapport au groupe précédent mais une approche différente. Note : 100%.
    • Sous-système électronique : Seule la PWM est fonctionnelle. Note : 65%

Qualité de la réalisation

  • Informatique : Note : 90%.
    • procédure de test : Mode d'emploi dans le Wiki. Note : 100%.
    • pages HTML et Javascript : Code HTML et Javascript non indenté. Une feuille de style. Du code mort et de la duplication de code Javascript. Note : 80%.
    • scripts PHP ou programmes C : Un programme C CGI-BIN pour récupérer les valeurs d'accélération. Code sous-optimal mais fonctionnel. Note : 90%.
    • installation sur FoxBoard : Lancement automatique du démon série. Installation correct mais avec des sources et des exécutable dans le répertoire du serveur Web. Note : 90%.
  • Electronique : Note : 72.5%.
    • qualité de la réalisation : La description de la partie numérique n’est pas claire. Un registre de 5bits est présent sur le schéma mais quel est son rôle ? Aucun schéma présentant la partie analogique. Note : 70%
    • tests autonomes : quelques tests ont été envisagés avec l’analyseur logique en séance complémentaire. Note : 75%.

Bilan

Note finale : 82.5% => 16.5/20.

Rapports des élèves

Partage des tâches

Etant donné que nous étions un trinôme, ce fut plutôt difficile de se partager le travail. La première séance, Clément et Jérémy ont commencé à travailler sur la partie électronqie pendant que Florian faisait la page Web. Entre les 2 séances, Jérémy a réfléchi à la mise en place d'un PWM performant et Florian a analysé les morceaux de codes de configuration du port série. La deuxième séance, Florian a travaillé sur un fichier de configuration du port série et a fait un petit programme en C permettant d'afficher les valeurs de l'accéléromètre dans le terminal pendant que Jérémy et Clément finissait sur Altium le schéma électronique. La troisième séance, Jérémy a rejoint Florian, car une grosse quantité de travail restait à fournir en informatique. Nous avons appliqué le petit programme en C au WEB (cgi-bin), avons commencé le javascript, et la récupération des données au moyen d'ajax pendant que Clément effectuait les tests des schémas électroniques avec Altium sur la Nanoboard. Des séances supplémentaires furent nécessaires afin de vérifier l'efficacité de notre système sur la nanoboard. Nous n'avons pu relié la partie électronique de la partie informatique car la pièce principale (accéléromètre) ne nous a pas été fourni en électronique et par manque de temps du développement supplémentaire pour recevoir l'information de la nanoboard vers la foxeboard. 2 Séances supplémentaires en informatique ont permis à Jérémy et Florian de finaliser le projet (du moins le sous-système informatique).

README et manuel d'utilisation de la Foxeboard

La Foxeboard est un système embarqué qui est ici utilisée pour accueillir un accéléromètre. Elle embarque un serveur de type Apache et PHP.


Mise en place du système :


1) Brancher la Foxeboard (hors-tension) au réseau.

2) Brancher l'antenne de l'accéléromètre sur un des 2 ports USB de la Foxeboard.

3) Brancher l'alimentation.

4) Attendre quelques secondes que la Foxeboard soit démarrée.

N.B : l’exécution du programme de configuration de reconnaissance de l'antenne (root/serial_config)est automatiquement lancé au démarrage.


Utilisation :


1) Utiliser un navigateur internet sur un poste connecté au même réseau et entrer l'adresse de la foxe : 172.26.79.16

2) Incliner la télécommande de haut en bas pour illuminer les flèches verticales.

3) faites une rotation sur la gauche ou la droite pour illuminer les flèches horizontales.


Emplacements des fichiers :


Page internet : var/www/index.html

Images utiles à la page web : var/www/images

Programme compilé de configuration du port série/USB : root/serial_config

Programme non compilé de configuration du port série/USB : root/serie/serial_config.c

Programme CGI-BIN compilé de récupération des valeurs des 3 axes utiles pour la page WEB : usr/lib/cgi-bin/cgi_get_serial.cgi

Programme CGI-BIN non compilé de récupération des valeurs des 3 axes utiles pour la page WEB : root/serie/cgi_get_serial.c


Compte rendu de la première séance:


Après avoir pris connaissance du sujet et compris les différentes taches a réaliser lors de celui ci, nous avons décidé de nous séparer en deux groupes: Florian s'est occupé de la partie informatique. Jérémy et Clément de la partie électronique. Afin de garder une vision globale du sujet, ce qui devrait nous permettre de "relier" la partie électronique à la partie informatique de façon plus aisée, nous avons décidé de travailler côte à côte et non dans des salles séparées.

Partie informatique:

Réalisation de la page d’accueil (fichier HTML), choix du mode d'utilisation afin de tester l'interface WEB en entrant des valeurs 'manuelles'. A l'avenir on choisira le mode 'banc d'essai' pour tester avec la télécommande d'essai fournie. Puis 'partie électronique' pour tester avec la nanoboard.

CaptureWEBinterface.JPG

Partie électronique:


La première étape de ce projet a été la lecture du sujet et la compréhension des taches a réaliser. Une fois le logiciel Altium pris en main grâce au tutoriel, nous avons commencé la réalisation du circuit. Au début nous avons utilisé une PWM fournie par le logiciel. Nous avons aussi réfléchi au reste du circuit et a la réalisation d'un filtre RC et d'un AOP afin de récupérer la valeur moyenne des PWM et de la comparer au signal de l'accéléromètre.

Une visualisation rapide du signal de sortie permet de vérifier qu'on obtient un signal de rapport cyclique variable. Schemaaltium.png Schema de principe.png

Compte rendu de la seconde séance:


Jérémy a d'abord aidé Clément pour que le schéma électronique soit opérationnel. Une fois celui-ci fini, il a pu venir en salle informatique afin d'avancer dans la partie informatique. Florian a finiolé l'interface WEB, tout en constatant que nous avons fait une erreur dans l'avancement du projet. L'interface WEB n'étant pas indispensable, nous n'avons pas commencé le projet par le commencement.

Partie informatique: 1) Florian et Jérémy se sont servi de la documentation fournie sur rex.plil afin de pouvoir recevoir les données provenant du port série/USB, création d'un fichier serial_config.c afin de reconnaître l'antenne de l'accéléromètre. Nous avons alors mis au point un second petit programme en C qui affiche les données dans le terminal suivant les 3 axes de l'accéléromètre et avec un rafraîchissement de 1 seconde.

while true; do ./get_serial; sleep 1; done

78

82

9A

0

---


Alors que nous pensions que l'accéléromètre fonctionnait avec l'accélération, on constate que celui-ci renvoie les valeurs suivant le centre de gravité et une valeur d'accélération (difficile à obtenir car le rafraîchissement de 1 seconde est trop faible).

2) Nous nous sommes aussi renseignés sur le fonctionnement de JQuery et Ajax, et avons injecté les scripts Java dans HTML.

3) Un programme en C (cgibin) pour faire l'intermédiaire entre l'accéléromètre et la page web. Schéma fonctionnel.JPG


Partie électronique:


Au cours de cette séance nous avons remplacé la PWM fournie par le logiciel par une PWM réalisé par nos soins. Une fois son fonctionnement vérifié nous l'avons triplé pour pouvoir l'implanter sur les 3 axes de l'accéléromètre. Nous avons ensuite tenté d'implanter le schéma dans la nanoboard mais de nombreuses de compilation sont apparue et nous avons mis un certain temps a toutes les corriger. On obtient le montage suivant et l'on observe bien les 3 signaux de rapport cyclique variable a l'aide de l'oscilloscope (lorsque les deux horloges sont correctement réglées). L'ajout d'une bascule D nous permet de réaliser la fonction de mémorisation. Lorsque la valeur moyenne du signal PWM (en sortie du FPGA)est égale à la valeur de la tension analogique délivrée par l'accéléromètre, on autorise l'écriture du rapport cyclique dans cette bascule reliée au port série. En effet un 1 est envoyé par l'AOP sur la broche Clock Enable de cette bascule.


Le fonctionnement de notre PWM.

Nous utilisons un compteur (CYCLIQUE) 5 bits qui va servir à incrémenter le rapport cyclique.

1 correspondra à un rapport cyclique de 1/31 ème

31 correspondra à un rapport cyclique de 1

Nous utilisons un autre compteur (CPT) de 5 bits également.

Ce compteur qui fonctionnera à une fréquence beaucoup plus rapide que celle de CYCLIQUE, tant que sa valeur est inférieur à celle de CYCLIQUE, on envoie un 1 vers la partie analogique. Lorsque sa valeur est supérieur à celle de CYCLIQUE, on envoie un 0. On a donc, pour un rapport cyclique souhaitée de 0.5, (équivalent à 15 dans le compteur CYCLIQUE), un signal égal à 1 sur la moitié d'une période du compteur CYCLIQUE et égal à 0 sur l'autre moitié.

Schema2.png

  Exemple du signal PWM pour un rapport cyclique de 6/31ème (équivalent à un rapport cyclique numérique de 6)

Chronogramme twiki.png

Compte rendu de la troisième séance:


Partie informatique:

Durant cette séance, nous avons paramétré la Foxeboard (à savoir attribution IP, mise en place du réseau, transfert de nos fichier par SFTP, installation de paquets, et compilation des .C avec gcc), tout ceci au moyen du port série et mini-com, puis grâce à un tunnel SSH. Nous avons aussi mis à jour notre fichier cgi-bin afin d'avoir les valeurs des 3 axes d'accéléromètre d'une façon précise (exemple : 128 96 145 0). Suppression du formulaire permettant de tester les flèches "manuellement" en entrant les valeurs de X, Y et Z, car inutile pour la suite du développement du projet.

Partie électronique:

Cette troisième séance a permis de réaliser l'un des trois filtres nécessaire (un par axe de l’accéléromètre) afin de comparer les signaux de l'accéléromètre a la valeur moyenne des PWM. Nous avons donc utilisé un condensateur, une résistance et un AOP afin de réaliser ce filtre. Une fois le filtre réalisé nous avons voulu vérifier son bon fonctionnement, n'ayant pas d'accéléromètre a disposition nous en avons simulé un à l'aide d'un générateur de tension réglable. Les signaux observé en sortie ne semblaient pas correspondre à ce qui été attendus, et nous avons essayé d'apporter des modifications afin de le rendre fonctionnel, sans succès.

Compte rendu des séances complémentaires:



Nous avons rencontrés quelques problèmes Nous affichions dans la page web le contenu retourné par notre programme de récupération des données sur le port série (cgi_get_serial.cgi). Nous voulions savoir comment était mise en forme ces valeurs pour savoir comment les interpréter en aval. A l'affichage, nous avons eu une grosse quantité d'informations non exploitables (symboles et header). La raison de ce problème était que le programme cgi_get_serial n'était pas placé dans le bon répertoire. Nous l'avons finalement placé dans le /usr/lib/cgi-bin. Une fois ce problème corrigé, nous nous attendions à un rafraichissement des données reçues régulier, le programme cgi était lancé grâce à une procédure Ajax en GET. Celle-ci ne se lance pas de manière continuelle (ou synchrone), il fallait donc utiliser la fonction javascript SetInterval(), pour la lancer de manière régulière. Parfois, l'exécution du cgi ne se terminait pas, nous devions tuer le processus pour lancer une nouvelle exécution.


La mise en surbrillance des flèches sur l'interface Web -- Mise en place de l'interface graphique

En amont, nous affichions, séparées par des espaces, les différentes composantes lues sur le port série, en aval nous avons donc dissocié et stocké les différentes composantes dans un tableau retourné par la fonction javascript split(' '). A titre d'exemple: Nous avons une fonction de gestion de l'affichage des flèches pour chaque axe. Pour la mise en surbrillance des flèches verticales, c'est la première composante reçue qui nous intéresse, nous l'appelerons NS. Cette valeur est comprise entre 96 et 159. Si l'accéléromètre est en position horizontale, NS sera à 127, s'il pointe vers le haut, NS sera supérieur à 127, et inversement. Donc si NS - 127 > O alors on met en surbrillance la flèche haute, sinon la flèche basse.(on change les images de fond des div attribuées à chaque flèches) Ou si NS - 127 = 0, on ne met aucune flèches verticales en surbrillance. La question de la sensibilité s'est donc posée, puisque il devient alors trés difficile, d'avoir l'accéléromètre en position horizontale parfaite. L'interface web sera très sensibles au petites variations de mouvement. Nous avons modifié les conditions de surbrillance, celles ci s'exécutent dans les cas où valeur absolue de NS - 127 >10.


Pour résumer le programme javascript de notre interface web: Avec SetInterval, le programme Ajax lance régulièrement le cgi_get_serial.cgi. En cas de succès, on récupére les valeurs des composantes de l'accéléromètre, et on lance les fonctions de gestion de la mise en surbrillance des flèches.

Durant ces séances complémentaires Clément a travaillé sur la partie électronique pour essayer de la finir. PWM.png

Conclusion:


Informatique :

Bien que le sujet semblait plutôt facil à mettre en place nous avons été confronté à de multiples problèmes :

1) la confrontation a de nouveaux langages de programmation (javascript) exemple de problème : le javascript n'est pas typé, nous avons perdu facilement une heure pour développer une fonction de découpe de notre chaine de caractère (98 142 101 0) en plusieurs variables X=98 ... Nous avons découvert au final qu'il existait une fonction split permettant de faire ceci et qu'il n'y avait pas de type, les chiffres sont automatiquement reconnu contrairement au langage C.

2) L'emplacement des fichiers. Nous avons perdu un temps considérable pour savoir qu'au final, notre fichier index.html devait aller dans var/www et que le cgi-bin devait aller dans un emplacement bien spécifique.

3) Pas de connaissances en jquery et ajax. Nous avons regardé une vidéo de 2h de formation sur jquery et ajax (Elephorm) afin de nous familiariser avec ces technologies.

Ce projet nous a été très bénéfique, nous avons pu appliquer ce que nous apprenons depuis 3 ans en théorie sur un projet concret. Nous avons appris énormément surtout en matière de réseau (utilisation de FTP, SSH, SFTP, IP...) en langage de programmation (C, HTML, CSS, javascript) en l'existence de technologies que nous n'avons jamais utilisé (JQuery, Cgi-bin)... De plus nous avons dû être organisé afin d'être productif pendant ces 3x12h et éviter des heures supplémentaires. Le mystère de la Wii-mote est maintenant levé !

Électronique:

Ce projet nous a permis de travailler en autonomie quasi totale, de découvrir et de comprendre le fonctionnement et le rôle d'une PWM. Après un bon départ (PWM rapidement fonctionnel) la fin du projet s'est révélé beaucoup plus laborieuse, en particulier le filtre passe bas que l'on a pas réussi a faire fonctionner correctement. Il nous a aussi permis de maîtriser le logiciel Altium et de découvrir la nanoboard et son utilisation.


Vidéo

Vidéo filmée le 14/06/2013 à 17h.