![[Photo of the Author]](../../common/images/RalfWieland.jpg) 
 
    original in deRalf Wieland
de to en Guido Socher
en to fr Iznogood
J'utilise Linux (depuis la 0.99pl12) pour programmer des simulations environnementales, des réseaux neuronaux et des systèmes aléatoires. Je m'intéresse aussi à l'électronique et j'utilise aussi Linux dans ces domaines.
![[Illustration]](../../common/images/article284/barographa.jpg) 
 
    Pour le développement d'un système de mesure, vous devez d'abord clarifier ces trois questions suivante :
Ces questions peuvent sembler triviales mais il est important d'y penser à chaque étape du développement.
La pression atmosphérique est intéressante pour plusieurs raisons. Pour les 
marins et les alpinistes, elle fournit une indication sur les changements
météorologiques à venir. Mais cela m'amuse aussi de surveiller la pression
atmosphérique chez moi. De nombreuses personnes semblent faire la même chose
comme le montrent les stations météo que l'on peut voir dans les salons. 
Ces stations sont plus des jouets que de véritables instruments de mesure. 
Si vous voulez faire des mesures sérieuses de la pression atmosphérique, vous 
devez alors considérer quelques petites choses. La pression atmosphérique 
peut être mesurée avec précision avec un baromètre tel que celui montré dans
l'image-titre. Ceux-ci sont purement mécaniques et très cher. Pour limiter le coût,
il est possible d'utiliser un capteur électronique. Motorola 
produit, par exemple, des capteurs pour des applications diverses. Ces capteurs 
sont toujours dépendants de la température et de la tension. Vous devez en
tenir compte. La pression atmosphérique reste assez facile à mesurer car elle 
est la même à l'intérieur et à l'extérieur de la maison. Vous n'avez pas besoin
de construire un capteur protégé de la pluie pour une utilisation extérieure. 
Vous pouvez avoir le capteur directement à coté de votre ordinateur. C'est 
aussi intéressant pour la compensation de température car celle-ci ne change pas autant à 
l'intérieur qu'à l'extérieur. Toutefois, pour obtenir des résultats précis 
il vous faut une compensation électronique de température. Le circuit proposé 
est disponible sous forme de kit chez 
ELV, un distributeur d'électronique européen. ELV m'a donné 
la permission de publier le circuit. La compensation de température est alors 
effectuée logiciellement. Le capteur ne mesure pas seulement la pression mais 
aussi la température. L'algorithme pour la compensation de température est 
documenté dans la fiche technique du capteur de pression d'Intersema. La 
stabilisation en tension est effectuée par un régulateur 3.3V.
    
    La pression atmosphérique n'est pas seulement dépendante du climat, mais 
    aussi de l'altitude par rapport au niveau de la mer. Pour comparer la 
    pression de l'air en différents endroits, vous aurez besoin de normaliser 
    les valeurs en fonction du niveau de la mer. Cela est réalisé 
    internationalement avec la formule suivante :
p0=p/(1-6.5*h/288000)^5.255
Cette formule ne considère pas seulement la dépendance à l'altitude mais aussi le fait que la température diminue avec l'altitude. La pression atmosphérique mesurée sera alors compensée en altitude par rapport au niveau de la mer. Vous pouvez calculer que les changements de pression se font à raison de 1.2mbar/10m. L'altitude au-dessus du niveau de la mer se trouve dans le programme myclient dans #define HIGH_NN. La question restante concerne la précision. La précision dépend directement du capteur. Vous devez faire la distinction entre la résolution et la précision des résultats. Le capteur possède une précision de +-1.5mbar entre 750..1100mbar à une température de 25°. La résolution est néanmoins beaucoup plus haute : 15Bit+-7Bit qui font 1/2^15 = 3*10^-5 ou 0.03mbar. En d'autres termes, les derniers chiffres n'ont pas de signification. Le programme arrondira donc les résultats à un chiffre après la virgule. Nous devons encore définir la fréquence des mesures. Un intervalle de 5..10min doit être suffisant pour la plupart des applications. Pour filtrer les changements aléatoires, nous ferons des mesures toutes les 10..60s et nous appliquerons alors un filtre passe-bas. La charge CPU générée par les mesures reste négligeable. J'ai utilisé un intervalle de mesure de 10s et les valeurs sont stockées toutes les 2mns. Cela produit 60*24/2=720 valeurs de mesures chaque jour.
    ![[schematic]](../../common/images/article284/druckschemaric_th.gif)
    Cliquez sur le shéma pour avoir une image agrandie.
J'ai utilisé le port parallèle comme interface. Cela prend tout son sens 
puisque la plupart des imprimantes modernes utilisent le port USB. L'avantage 
est que le port parallèle est très facile à programmer et vous n'aurez pas 
besoin de beaucoup de matériel supplémentaire. Seulement quelques inverseurs pour 
ajuster les niveaux de tension et générer un signal d'horloge.
    
    
    Si vous ne voulez pas acheter le kit de ELV, vous pouvez alors aussi souder 
les composants sur une platine d'expérimentation.
    
    Quelques commentaires sur le circuit :
    Les nombres sur la gauche sont les broches du port parallèle. Les broches  
18..25 concernent la masse et les 12, 3, 4 sont les lignes de données. La broche 2 
est utilisée comme alimentation pour le circuit. Les résistances R1/R2 et R3/R4 
sont utilisées pour adapter le 5V du port parallèle au 3.3V. Le 74HC04 et le capteur 
fonctionnent sous 3.3V.
Le programme a été écrit en C. Il lit les données du capteur et gère le filtre passe-bas de même que la compensation de température. Le code doit être facile à suivre. Vous pouvez le télécharger à la fin de l'article. Pour récupérer les données du capteur, quelques impulsions lui sont envoyées. Le capteur les interprète comme des commandes et y répond. Le protocole est documenté dans la fiche technique du capteur.
Mesurer la pression atmosphérique avec un ordinateur "normal" pendant plusieurs 
jours peut vous attirer des ennuis avec votre famille car ces machines sont très
bruyantes et doivent fonctionner à plein temps. Utiliser un 
DIL/NetPC est une alternative intéressante. Ces machines 
n'utilisent que très peu de puissance et ne font pas de bruit. Elles ne sont 
malheureusement pas bon marché et on ne peut y accéder que par un réseau. 
Ceci m'a mené à l'idée d'utiliser le serveur Linux au travail dans ce but. Ce 
serveur fonctionne de toute manière en permanence. Ceux qui n'ont pas accès à 
un tel serveur peuvent peut-être utiliser un vieux PC et le déposer dans une 
cave où il ne dérangera pas. Pour récupérer les données, j'ai développé une 
application client-serveur. L'inconvénient est que le processus serveur doit 
être lancé avec les droits de root pour accéder directement au port parallèle. 
Une alternative serait d'utiliser un  pilote tel Parapin 
pour utiliser un port parallèle sans les droits de root. Cela implique toutefois de 
recompiler le noyau afin d'y ajouter le pilote Parapin. Si vous avez prévu 
de rendre les données disponibles sur Internet, vous devez alors considérer 
l'utilisation d'un utilisateur non privilégié. Dans mon cas, cette solution 
simple était suffisante.
    L'application client et le processus du serveur utilisent des "sockets" 
TCP/IP pour la communication. Le serveur fonctionne dans 2 "threads". Un qui 
récupère les données du capteur et l'autre qui gère le réseau. Ces processus 
sont mis en oeuvre grâce à la PThreads-Library. Le client est très 
simple. Il récupère les données et les corrige en fonction de l'altitude selon 
la formule vue plus haut. La donnée est simplement affichée sur stdout 
sur 2 colonnes. La première est l'heure en virgule flottante. Elle 
représente le compte des heures depuis le début de la mesure. La seconde colonne
représente la pression atmosphérique sous forme de nombre en virgule flottante. Elle 
ressemble à ce qui suit :
     
     0.000000 1008.2
     0.033333 1008.1
     0.066667 1008.2
     0.100000 1008.0
     0.133333 1008.1
     ...
    
    Ceci peut être exploité directement par un programme de traçage comme gnuplot ou Plotutils. J'ai utilisé Plotutils à cause de sa meilleure qualité visuelle. Pour comparer deux impressions, il est important d'utiliser la même échelle les deux fois. Je préfère donc l'ajustement absolu sur l'axe :
 
./myclient modell1 | graph -T X -C -g 3 -L "air pressure" \
     -X "t from start of measurement in h" -Y "mbar" --x-limits 0 24\
     --y-limits 950 1040
 
    Le programme client « myclient » se connecte au serveur « modell1 » pour récupérer les données et les fournir à Plotutils (le programme de traçage) par le biais du "pipe". L'étalonnage de la pression atmosphérique se fait entre 950mbar..1040mbar. L'unité de temps est de 24 heures. Si vous changez l'option -T X à -T ps, un fichier postscript sera généré. Il est alors facile de l'imprimer sur papier.
![[graph]](../../common/images/article284/graph.gif)
Le diagramme montre la fin d'une période de beau temps et l'arrivée de la pluie.
L'installation est très facile. Contrôlez une dernière fois le circuit et connectez-le au port parallèle. Le logiciel peut être décompressé par tar -zxvf druck-0.1.tar.gz. Positionnez-vous ensuite dans le répertoire du source et modifiez myclient.c en fonction de votre altitude (HIGH_NN). Compilez-le avec « make ». Avant d'utiliser le module, vous devez ajouter le numéro de port dans /etc/services pour le "socket" de communication. Ajoutez la ligne suivante :
socktest 7123/tcp # Capteur de pression atmosphériqueAprès ceci, vous pouvez lancer le processus serveur en tant que root par ./druck LPT1 (ou LPT2). Si tout fonctionne correctement, le serveur affichera les données brutes de pression et de température toutes les 10 secondes ainsi que l'heure. L'application cliente peut maintenant être démarrée à partir de n'importe où sur le réseau (ou sur la même machine). Le script druck.sh visualise les données par l'intermédiaire du programme Plotutils. Vous devez éditer le script pour définir le nom du serveur. L'entrée dans /etc/services doit être ajoutée sur la machine exécutant le processus serveur et sur la machine où le client est actif.
Il est dommage que les fabricants ne fournissent que peu de pilotes pour Linux. Cela m'a néanmoins donné l'opportunité intéressante de développer la solution que je viens de présenter ici. Seule l'application client/serveur réseau a donné une solution satisfaisante dans la mesure où il est possible de récupérer les données de différentes machines. Il reste encore des choses à faire. Comment ces valeurs peuvent-elles être proposées sur Internet ? Si plusieurs personnes construisent une station météo avec peut-être la température, la pression atmosphérique, l'humidité et la vitesse du vent (la vitesse du vent n'est pas facile à mesurer), comment les données peuvent-elles être échangées ? Quel format de données doit être utilisé ? Quelqu'un a peut-être une idée qui pourra être présentée dans un autre article.