Contrôle de sonar, 2013/2014, TD2

De Wiki d'activités IMA

Rapport du projet Système Communicant : Système de contrôle d'un sonar

L'objectif de ce projet est de réaliser un sous-système de contrôle de sonar ultra-sons. Ce projet se partage en deux partie : une informatique et une électronique.

La partie informatique a pour but de créer une interface Web permettant la communication entre l'utilisateur et le sonar. Par l'intermédiaire de cette page Web, l'utilisateur donne un angle souhaité et le sonar indique la mesure de distance correspondant à la direction demandée.

La partie électronique a pour but de gérer l'émission et la réception du signal émis par le sonar, avec le calcul du temps mis pour atteindre l'objet à détecter, et de transmettre la mesure du temps à la partie informatique. Pour cela , il y a deux sous-parties : une partie numérique, avec la nanoboard, et une partie analogique, en sortie de la nanoboard.




Les participants de ce projet sont YVERNAULT Bertrand et THEBAULT Louis pour la réalisation électronique et SIMON Manouk pour la réalisation informatique.

Partie informatique

Séance 1

Dans un premier temps, cette première séance a surtout été dirigé sur la compréhension du sujet :

  • Mise à jour des connaissances sur les différents langages à employer (HTML, PHP, AJAX, JAVASCRIPT, C, CGI-BIN)
  • Etude des exemples fournis pour contrôler le servo-moteur.
  • Réflexion sur l'architecture du projet :


Dans un second temps, nous avons installé les bibliothèques Phidget pour commander le servo-moteur et jQuery pour l'interface Web.


Dans un troisième et dernier temps, nous avons commencer la rédaction de la page html de contrôle du Sonar dans le fichier Acceuil.html situé dans le répertoire /var/www de l'ordinateur.

Séance 2

L'objectif de cette deuxième séance est de contrôler le servo-moteur à partir de la page Web Acceuil.html. Il nous faut donc créer le fichier de commande du servo-moteur (CommandeServoMoteur.c) et l'adapter à l'interface Web.


Création du fichier de commande du servo-moteur

Nous avons créé un fichier CommandeServoMoteur.c à partir de l'exemple qui contrôle la position du moteur (AdvancedServo-simple.c de la librairie libphidget21).


Configuration du port série

Pour pouvoir communiquer avec le banc de simulation, nous avons dû inscrire les commandes données en (C.2) dans le fichier /etc/rc.local pour configurer le port série à chaque démarrage.


Test du fichier de commande du servo-moteur

Une fois le port configuré, on paramètre le banc de simulation en sélectionnant le mode 5.

Puis, on compile sur le terminal par la commande suivante : gcc CommandeServoMoteur.c -o CommandeServoMoteur -lphidget21


Adaptation du fichier à l'interface Web

Nous avons ensuite adapté le fichier CommandeServoMoteur.c à notre utilisation :

  • Suppression des printf pour éviter des perturbations sur la page Web
  • Ajout de la bibliothèque cgi.h et adaptation du fichier pour récupérer en paramètre, par un script CGI-BIN CommandeServoMoteur.cgi via l'interface WEB, la valeur de l'angle donnée par l'utilisateur
  • Déplacement du fichier dans le répertoire /usr/lib/cgi-bin
  • Commande sur le terminal pour obtenir les droits d'exécutions : chmod u+s /usr/lib/cgi-bin/CommandeServoMoteur.cgi


Ajout des fonctions Javascript à la page Web

Enfin, nous avons dû introduire un champ de saisie pour indiquer l'angle et des fonctions d'envoi.

Par la fonction onBlur qui fait appel à la function commandeServoMoteur(), l'angle donné par l'utilisateur est automatiquement envoyé au servo-moteur.

Séance 3

Le but de cette séance est de récupérer la valeur de la distance mesurée par le sonar ainsi que d’implémenter le projet embarqué sur la Foxboard.


Création du fichier de lecture de la distance mesurée par le Sonar

A l'aide de l'exemple qui utilise le port série (C.5), nous avons créer un fichier LecturePortSerie.php.

Le sonar envoi plusieurs valeurs à la liaison série qui est continuellement ouverte à chaque exécution du script LecturePortSerie.php.

Nous avons du adapter ce script afin qu'il ne récupère que la dernière valeur mesurée par le sonar par l'ajout d'une condition while ($byte!=" ").


Ajout des fonctions Javascript à la page Web

Pour finir, nous avons dû coder une fonction Javascript de récupération de la valeur envoyé par le Sonar et une autre fonction Javascript qui affiche cette valeur :

  • function lectureDistance()
  • function afficherDistance (distance)


Implémentation des fichiers sur la Foxboard

Il nous aura fallu une séance supplémentaire pour finir le transfère du projet sur la Foxboard mais malheureusement les tests n'ont pas été concluant par manque de temps.

Séance supplémentaire

A la fin de la séance 3, nous pouvons commander la position du sonar et de lire la valeur mesurée par le sonar le tout via l'interface Web mais sur un seul ordinateur fixe.


L'enjeu maintenant est d'embarquer le système sur une Foxboard afin de contrôler le Sonar sur n'importe quel support.

Nous avons donc paramétré la Foxboard 12 avant d'implémenter les fichiers du projet.


Paramétrage de la Foxboard

En suivant la procédure (donnée dans la partie B), nous avons paramétrer la Foxboard par le bais du logiciel minicom et de l'utilitaire vim :

  • Configuration de la carte Ethernet de la Foxboard dans le fichier /etc/network/interfaces pour paramétrer l'adresse IP afin d'accéder à la Foxboard 12 sur n'importe quel ordinateur utilisant le réseau de l'école
  • Modification de l'adresse du serveur dans le fichier /etc/apt/sources.list
  • Installation des librairies nécessaire à la compilation de nos programmes (PHP5-GD, CGI-BIN, PHIDGET)


Installation des fichiers requis sur la Foxboard

Enfin, nous avons copier les fichiers suivants programmés sur l'ordinateur dans les mêmes répertoires sur Foxboard :

  • Acceuil.html
  • CommandeServoMoteur.c
  • CommandeServoMoteur.cgi
  • LecturePortSerie.php
  • jquery.js
  • rc.local


Test

Une fois le paramétrage réalisé et l'installation complète, nous nous sommes connectés à la Foxboard par n'importe quel ordinateur de la salle du Travaux Pratiques à partir de l'adresse IP de la Foxboard 172.26.79.12.

Partie électronique

Séance 1

Lors de cette première séance, nous nous sommes d'abord orientés vers la compréhension du sujet. Pour cela, on a cherché comment fonctionne un sonar et quelles sont les différentes parties nécessaires à la réalisation de notre projet. On en a déduit qu'il nous fallait deux partie différentes : une partie numérique, qui va nous permettre de gérer le signal que nous voulons en sortie et en entrée de la Nanoboard, et une partie analogique, qui va permettre d'adapter les signaux. Pour mieux comprendre, nous avons fait un schéma permettant de voir les différentes parties.

Schema partie elec.png


Création du signal d'émission


Après cela, on a commencé à élaborer une esquisse du schéma de la partie numérique sous Altium. Nous nous sommes en premier porter sur la partie émission. Nous avons tout d'abord essayé de faire en sorte de générer un signal carré de 10 périodes à la fréquence 40 kHz, qui est la fréquence de résonance des ultrasons, puis de ne rien émettre pendant un certain temps et de recommencer la génération du signal. Notre but était de créer un signal comme celui qui suit :

SchemaSignal.png


On a donc dû adapter l'horloge de la Nanoboard pour obtenir un signal carré avec la fréquence voulue.

GénérationSignal.png


Puis nous avons réfléchis à comment générer que 10 impulsions puis ne rien émettre. On a donc décidé de compter le nombre d'impulsions émis et une fois que nous avons atteint les 10 impulsions, le compteur s’arrête de compter. On a donc comparer les bit d'indice 1 et 3 pour que quand il y ait un "1" sur chacun d'eux, c'est à dire avoir compté 10 ou plus, le compteur s’arrête.


Ce qui fait que nous émettons ce qui se trouve sur le bit d'indice 0.


Pour la remise à zéro, on remet à zéro le compteur toute les secondes. Ce qui permet une émission quasi continue avec un espacement d'environ une seconde entre chaque période d'émission.

GénérationSignalVoulu.png

Ici la sorti HA2 correspond à la broche qui va aller vers l'émetteur du sonar


Après cela, on a commencé à réfléchir à comment gérer le comptage du temps mis pour que le signal revienne au sonar. On a alors décidé de lancer un compteur juste après que 10 impulsions ait été comptées et d'arrêter ce compteur dès que le sonar reçoit un signal. Il faudra donc dans la partie affichage de la distance, rajouter la distance correspondant au temps mis pour faire les 10 impulsions, c'est à dire 0.085m. Cela sera l'objectif de la prochaine séance.

Séance 2

Schéma de la partie analogique

N'ayant pas travaillé la partie analogique lors de la première séance, on a réfléchit entre ces deux séances à cette partie. On en a déduit qu'on avait besoin d'un montage suiveur, qui permettrait de protéger la Nanoboard puis d'un amplificateur non inverseur après le suiveur pour amplifier le signal émis par la Nanoboard car en sortie de celle-ci on a un signal compris entre 0V et 5V. On a aussi réfléchit à la partie analogique pour la partie réception et on a donc décidé de mettre aussi un amplificateur non inverseur car le signal reçu par le sonar peut être de faible amplitude. Cependant avec ce montage, il faut faire attention car la Nanoboard ne peut recevoir que des signaux entre 0V et 5V donc il faut bien choisir les résistances.


Suite à un problème de métro, on a pu commencer la séance avec 2h de retard. Le but de cette séance était de finir la partie numérique sous Altium et de commencé la partie analogique. Mais à cause de cet imprévue, la séance de se déroula pas comme prévue.

Comptage du temps de parcours

Nous nous sommes d'abord penchés sur ce qu'on avait réfléchit à la séance précédente. On alors réalisé le comptage du temps mis pour faire le parcours jusqu'à l'objet puis de revenir. Pour cela, on s'est dit que le compteur doit démarrer à la fin de l'envoie des 10 impulsions et qu'il doit obligatoirement s'arrêter dès que le récepteur reçoit le signal. De plus, on a étudié la remise à zéro du compteur : le compteur se remet à zéro si on envoi un signal ou sinon au bout d'une seconde, car il faut éviter qu'il compte indéfiniment.


SchemaInter.png

Ici, l'entrée HB2 correspond à la broche du récepteur du sonar.


Bit de permission d'écriture

Une esquisse d'une gestion du bit de permission d'écriture a été faite en fin de séance en réfléchissant quand on pouvant permettre l'écriture des bits correspondant à la distance entre l'objet et le sonar. Cependant, un approfondissement doit être fait lors de la séance suivante

Séance 3

Bit de permission d'écriture

Le travail effectué lors de la séance précédente, sur cette partie, a amené à donner la permission d'écrire dans le registre que lorsque le sonar reçoit un signal et donc on rentre directement la valeur du compteur du temps correspondant à la distance avec l'objet.


On obtient donc le schéma suivant pour la partie numérique

Schéma final


Partie Analogique

N'ayant pas eu le temps de faire le montage de cette partie lors de la précédente séance, on s'est penché dessus lors de cette séance. Pour cela, on commencé par créer un signal carré correspondant à ce que la Nanoboard allait nous transmettre. Puis on a testé le montage de l'amplificateur branché pour faire un montage suiveur. Pour cela on a alimenté l'AOP en 5V. On peut voir que nous obtenons bien ce que nous voulions en sorti de ce montage

Photos de l’oscilloscope avec en jaune l'entrée et en bleu la sortie


Ensuite on s'est attaqué à l'amplificateur non-inverseur. Le but de ce montage est d'avoir un gain d'amplification de 2. Pour ce la on a pris une résistance de 10kΩ et une autre de 20kΩ. Un problème est survenue durant ce test : on obtenait pas ce que nous voulions car on avait mal alimenté l'AOP. On l'alimentait en 5V ce qui ne pouvait pas fonctionner car en sortie on pouvait avoir théoriquement des signaux de plus de 5V. Pour remédier à cela, on l'a alimenté en 15V.

Photos de l’oscilloscope avec en jaune l'entrée et en bleu la sortie

Bilan du projet

Partie informatique

Le système est bien fonctionnel sur l'ordinateur où l'on a développé le programme. Cependant par manque de temps, nous n'avons pas pu vérifier sa fonctionnalité sur la Foxboard.

La réalisation de ce projet fut très enrichissante du fait des nombreux langages à apprendre(PHP, AJAX, JAVASCRIPT, CGI-BIN).

On aurait malheureusement aimé avoir eu plus de temps (malgré les heures prises en dehors des séances) et des cours pour aboutir à un système plus autonome et faire des prolongements.


Difficultés rencontrées

Nous avons rencontré des difficultés au cours de notre projet. Merci à M. Redon pour son aide.

  • Obtenir les droits d'exécutions pour commander le servo-moteur par la commande chmod u+s
  • Comprendre le fonctionnement du fichier AdvancedServo-simple.c
  • Embarquer le système sur la Foxboard


Connaissances acquises

Nous avons été très content d'avoir pu découvrir et nous familiariser avec les différents langages de développement Web (HTML, PHP, JAVASCRIPT, AJAX).


Il a été très formateur de comprendre le fonctionnement d'une Foxboard.

Partie électronique

Par manque une mauvaise organisation lors de la première séance couplée à un problème lors de la deuxième séance, nous n'avons pas pu regrouper la partie numérique avec la partie analogique.

Connaissances acquises

On a pu se familiariser avec le logiciel Altium avec la découverte de nouvelles bibliothèque. Ce fut très formateur de combiner une partie analogique et une partie numérique de réfléchir sur l'ensemble du système. De plus, on a pu mettre en relation différentes notions acquises durant cette année et de pouvoir voir que toutes ces notions peuvent être utiles.

Améliorations pouvant être apportées

On peut améliorer la précision du temps correspondant à la distance avec l'objet. Cependant, cela va influer la distance maximale qu'on pourra mesurer par la suite. Cette distance va diminuer.