raphnet.net banner
This page is also available in English
USBTenki: Capteurs de temperature et d'humidité USB
Contenu: Résumé du projet | Photos | Shéma | Liste des capteurs supportés, 'firmwares' et shémas de câblage | Logiciel côté PC | "Canaux virtuels (Virtual channels)" | Circuit imprimé | Références | Avertissement
Résumé du projet [cacher]
Qu'est-ce que c'est?
USBTenki est un projet permettant d'utiliser différents capteurs en passant par un port USB. Les capteurs supportés permettent d'observer des conditions météorologiques comme la temperature, l'humidité relative et la pression atmosphérique. Le 'firmware' supporte une variété de différents capteurs. C'est à vous de décider lequel utiliser pour bâtir votre USBTenki.

Des graphiques (mis à jour une fois l'heure) générés à partir de donées enregistrées à l'aide de ce projet sont disponibles à http://meteo.raphnet.net

Historique du projet et raison d'être:
Ce projet, nommé USBTenki d'après le mot japonais 'tenki' 天気 qui signifie 'le temps (météo)', a été créé car un ami m'a demandé si je pouvais lui construire un capteur de température USB. Peu de temps après, puisque quelqu'un souhaitait avoir un capteur température + humidité, j'ai ajouté le support d'un tel capteur. Ensuite, seulement pour m'amuser, j'ai aussi ajouté le support pour un capteur de pression atmosphérique. Je prévois supporter d'autre types de capteurs pour la lumière, la détection d'éclairs, la vitesse du vent et la direction du vent.

Vous pouvez consulter la liste de capteusr supportés dans la section 'Liste des capteurs supportés, "firmwares" et shémas de câblage' un peu plus bas.

goto top Retour en haut


Photos [cacher]
Capteur de température et d'humidité relative bâti en utilisant un SHT75 de Sensirion.


Capteur de température bâti en utilisant un MCP9803:


Photo du prototype utilisant un MCP9803:

Capteur de température (prototype) utilisant le MCP9803 installé dans le climatiseur d'une salle de serveurs:


Voici des exemples de comment installer un condensateur de filtrage d'alimentation près du capteur et comment protéger le tout à l'aide d'un morceau de gaine thermo-rétractable:


Exemples de graphiques (générés avec le plugin munin)
1: 2: 3: 4: 5: 6:
#Donné(s)Capteur(s)PériodeIntérieur/ExtérieurLocalisation géographique
1Température, Humidité relative et "Virtual channels". SHT75 de Sensirion JournéeIntérieur Saint-basile-le-grand, Qc, Canada
2Température, Humidité relative et "Virtual channels". SHT75 de Sensirion SemaineIntérieur Saint-basile-le-grand, Qc, Canada
3Pression atmosphérique MPX4115AP Journée Intérieur Saint-basile-le-grand, Qc, Canada
4Pression atmosphérique MPX4115AP Senmaine Intérieur Saint-basile-le-grand, Qc, Canada
5Température MCP9803 Journée À l'intérieur d'un climatiseur, côté air froid Une salle de serveurs (ordinateurs) à Montréal, Qc, Canada
6Température MCP9803 Journée Devant la sortie d'une conduite d'air (Système de climatisation de l'édifice) Une salle de serveurs (ordinateurs) à Montréal, Qc, Canada
Graphiques mis à jour une fois par heure disponibles sur http://meteo.raphnet.net

goto top Retour en haut


Shéma [cacher]
Voici le shéma:

Pour un shéma de câblage spécifique à un capteur, consulter la section 'Liste des capteurs supportés, 'firmwares' et shémas de câblage'

Notes de conception:
J'ai commencé à travailler sur ce projet car un ami avait besoin de capteur de température simple et peu coûteux relié à un ordinateur pour surveiller le comportement d'un climatiseur soupçonné de parfois s'arrêter sans raison.

Pour y arriver simplement, j'ai réutilisé le circuit imprimé que j'utilise pour mes projets de manettes de jeu USB. C'est pourquoi l'ensemble se branche à un port USB. Pour mesurer la température, j'ai décidé d'utiliser (pour le moment) des capteurs digitaux. L'utilisation de ce type de capteur est très facile et la majorité des capteurs permettent de prendre des mesures d'une précision acceptable. Aucune calibration n'est nécéssaire. Il n'est pas besoin non plus d'ajouter des composantes comme une référence de voltage et des résistances de précision.

goto top Retour en haut


Liste des capteurs supportés, 'firmwares' et shémas de câblage [cacher]
L'atmega8 doit être programmé avec un "firmware" supportant le type de capteur utilisé. Les "fuses" doivent être configurées avec les valeurs suivantes: fuse_h=0xC1 fuse_l=0x1F.

J'ai utilisé le pilote 100% logiciel USB d'Objective Development. Les sources de ce projet sont donc ouvertes et disponibles sous la License d'Objective Development.

Le code source du "firmware" et du logiciel côté PC sont distribués ensemble. Vous pouvez les télécharger dans la section Logiciel côté PC.

SHT75
Shéma de câblage:
Type: Température and Humidité relativeInterface: Sérielle (similaire à I2C, mais incompatible)
Firmware: sensirion.hex Version: 1.1
Précision: ±0.3°C @ 25°C et ±1.8% RH
Commentaires:
Ceci est un capteur très précis construit par sensirion. La température est mesurée sous 14 bits et l'humidité relative sous 12 bits. Ce capteur est tellement sensible que le simple fait de le lire plus que 10% du temps augmente la température de 0.1°C. Notez que comme tout les capteurs température + humidité de sensirion utilisent le même protocol, il est possible d'utiliser d'autres capteurs tel que le SHT11.

MCP9801/9803
Shéma de câblage:
Type: TempératureInterface: I2C
Firmware: mcp9800.hex Version: 1.1
Précision: ±0.5°C (typ.) à +25°C, ±1°C (max.) de -10°C à +85°C, ±2°C (max.) de -10°C à +125°C, ±3°C (max.) de -55°C à +125°C
Commentaires:
Un bon capteur de température, rapportant celle-ci sous 12 bits. Sa précision est bien meilleure que celle du LM75. Pour qu'il soit reconnu par le "firmware", les 3 broches d'addresse doivent être reliées avec VCC. Ceci facilite le câblage. Installer un condensateur d'une valeur approximative de 0.1uf près du capteur est recommandé.

LM75 (et compatibles)
Shéma de câblage:
Type: TempératureInterface: I2C
Firmware: lm75.hex Version: 1.1
Précision: ±2°C (max) de -25°C à +100°C, ±3°C (max) de -55°C à +125°C
Commentaires:
Ce capteur de température est très courant. On en retrouve un peu partout. En fait, plusieurs capteurs (le MCP9803 par exemple) sont compatible avec le lm75 mais offrent une meilleure précision. Le LM75 rapporte la température en utilisant 9 bits. Pour qu'il soit reconnu par le "firmware", les 3 broches d'addresse doivent être reliées avec VCC. Ceci facilite le câblage. Installer un condensateur d'une valeur approximative de 0.1uf près du capteur est recommandé.

MPX4115AP
Shéma de câblage:
Type: Pression absolue, de 15 à 115 kPaInterface: Analogique
Firmware: Any, Configurez un canal ADC Version: 1.2
Précision: Erreur de ±1.5% entre 0°C et 85°C, Compensé pour la température de -40°C à +125°C
Commentaires:
Ce capteur est utilsé pour mesurer la pression atmosphérique. Il suffit de le brancher à un des canaux ADC de l'Atmel et configurer le canal ADC en question au 'chip_id' 0x90. À cause de la large plage de pression supportée par le capteur ainsi qu'à cause que l'Atmel fait la conversion analogue-digitale sous 10 bits seulement, la précision n'est pas des meilleures. Quoi qu'il en soit, elle est suffisante pour qu'on puisse voir la tendance actuelle (Montante ou descendante).

Entrée analogue à digital
Pas de shéma. Type: 0 volts à VCC (approx 5 volts)Interface: Analogique
Firmware: adc.hex Version: 1.6
Précision: Mesure sous 10 bits
Commentaires:
Permet de mesurer le voltage présent sur les entrées analogiques du Atmega8 (ADC0 à ADC5). Pour le moment, la référence est VCC. Il faut donc prendre en compte le fait qu'il est possible que le voltage ne soit pas précisément de 5 volts. Il faut aussi faire attention de ne pas dépasser VCC.

Configuration d'un canal ADC:
Le "firmware" peut exposer des canaux ADC au PC en tant que 'chip_id' spécifiques. Par défaut, tout les canaux sont configurés à CHIP_NONE (0xff). Si vous branchez un capteur analogique à un des canaux ADC, vous devrez configurer le firmware (nécéssaire une seule fois car la configuration est enregistrée dans l'eeprom). Voici un exemple: (Configure ADC à 0x90 [MPX4115]):
# ./usbtenkisetup -s 'XXXXXX' setadcchip 0 0x90
Pour des détails concernant comment (re)programmer un AVR, veuillez consulter ma page de programmation d'AVR

goto top Retour en haut


Logiciel côté PC [cacher]
Pour le moment, le logiciel côté PC est un outil de ligne de commande qui a été testé sous Linux et MacOS X. Comme ce logiciel utilise la librairie libusb, il devrait être possible de le compiler sous tout les systèmes d'exploitation supportés par libusb.

FileDescription
usbtenki-1.6.tar.gz (303K) Nouvelles fonctionalités:
  • Firmware nommé 'ADC' qui permet d'utiliser uniquement des capteurs analogiques.
  • Type de canal voltage et voltage inverse. Nouvelle unité: 'Voltage'.
  • Option permettant de faire plusieurs essais en cas d'erreur de communication ou de conflit dû à des accès simultanés.
usbtenki-1.4.tar.gz (321K) La version 1.4 est la première à être publiée. Fonctionne sous Linux et MacOS X
usbtenki_munin.tar.gz Scripts de plugins munin.


Lister les capteurs accessibles:
Pour obtenir une liste des capteurs USBTenki disponibles sur votre système, utilisez l'option '-l':
# ./usbtenkiget -l
Found: 'USBTenki', Serial: 'B10004', Version 1.2, Channels: 11
    Channel 0: Sensirion SHT1x/7x Temperature [Temperature]
    Channel 1: Sensirion SHT1x/7x Relative Humidity [Relative Humidity]
    Channel 2: MPX4115 Absolute air pressure sensor [Pressure]
    Virtual Channel 256: Dew point [Dew point]
    Virtual Channel 257: Humidex [Humidex]
    Virtual Channel 258: Heat index [Heat index]
Dans l'exemple ci-haut, on peut voir qu'il existe un concept de canal (Channel) et canal virtuel (Virtual Channel). Les canaux rapportent de l'information provenant du capteur lui-même ou des donnés calculées par le firmware. Les canaux virtuels représentent des valeurs calculées à partir des vrais canaux. (Plus d'information sur les canaux virtuels)

Lire des valeurs:
Pour lire la valeur d'un capteur, il faut spécifier une liste des canaux voulus avec l'option -i. Si la valeur 'a' est passée, tout les canaux sont listés.
# ./usbtenkiget -i 0,1,256
22.46, 39.55, 8.02
Le résultat ci-haut est facile à interpréter pour un ordinateur et est idéal pour des scripts. Mais si vous voulez un plus bel affichage, ajoutez l'option -p:
# ./usbtenkiget -i a -p
Temperature: 22.26 °C
Relative Humidity: 40.03 %
Pressure: 102.89 kPa
Dew point: 8.02 °C
Humidex: 22.67 °C
Heat index: 24.98 °C
Si jamais le symbole degré ° ne s'affiche pas correctement sur votre terminal, changez l'encodage de celui-ci pour iso8859-1 ou sinon essayez d'ajouter l'option -7 pour désactiver l'utilisation de caractères spéciaux.

Conversion de valeurs:
Le degrés Celcius et les Kilopascals sont utilisés par défaut. Si vous préférez d'autre unités, les options -T et -P permettent de choisir l'unité d'affichage de la température et de la pression. Essayez -h pour une liste des unités supportés. Exemple:
# ./usbtenkiget -i 0,2 -p -T f -P hPa
Temperature: 70.61 °F
Pressure: 1022.45 hPa

goto top Retour en haut


"Canaux Virtuels (Virtual Channels)" [cacher]
Voici une liste des canaux virtuels qui sont actuellement disponibles, leurs dépendances et liens vers de la documentation les concernant.
Channel # Name Dépendances Commentaires
256 Point de rosée Température et Humidité relative Le point de rosée est la temperature à laquelle la vapeur d'eau contenu dans l'air se condense, créant ce qu'on appel la rosée. Dans ce cas ci, la valeur est obtenue en utilisant la formule présentée par sensirion dans une note d'application nommée named Dewpoint Calculation Humidity Sensor.
257 Humidex Point de rosée (Virtuel) et Température "L'indice humidex est un indice (un calcul et non quelque chose qui se mesure) mis au point pour décrire à quel point l'air semble chaud ou humide pour un être humain typique" - Source: FAQ du service météorologique du Canada. Consultez leur FAQ pour des information sur la manière de calculter le facteur Humidex.
258 Heat index Température et Humidité relative Le 'Heat index (HI)', qui pourrait être traduit par 'index de chaleur', est un index qui combine la température de l'air et l'humidité relative pour déterminer la température apparante pour un être humain. - Source: Traduction de Wikipedia (Anglais).

goto top Retour en haut


Circuit imprimé [cacher]
Top

Top

Je me suis servi du même circuit que pour mon projet de Manette GC/N64 à usb. Ce circuit imprimé comporte une empreinte (footprint) pour une régulateur de voltage (non utilisé cette fois-ci) et des contacts de reprogrammation sur le dessous. Voici une image composée des deux couches (dessus et dessous):



Pas de régulateur de voltage n'est nécéssaire cette fois. Les seules composantes devant être soudées sur le dessous sont donc les deux résistances de sélection d'alimentation. Installez-les comme sur la photo à droite. Si vous n'avez pas de résistances 0 ohms, utilisez des petits fils ou faites des ponts de soudure.

Voici un shéma de câblage pour le circuit. En combinant celui-ci avec le shéma du circuit donné plus haut, il devrait être facile de comprendre coment brancher votre capteur.



Et finalement, voici les fichiers 'gerbers' que vous pouvez utiliser pour produire ce circuit imprimé:
multiuse.zip

Comme il s'agit d'un circuit imprimé à deux côtés comportant plusieurs 'vias', le construire à la maison peut être plus difficile que d'habitude. Si vous voulez, vous pouvez vous procurer un circuit fabriqué professionellement dans mon online store.

goto top Retour en haut


Références [cacher]
Les articles Wikipedia suivant furent très utile: (En anglais)
Celcius
Fahrenheit
Heat index

Les notes d'application du site web de sensirion. Pour savoir comment utiliser le capteur SHT75 et pour calculter le point de rosée à partir de la température et de l'humidité relative:
SHT75 datasheet and application notes

De l'information sur le facteur Humidex sur le site du Service Météorologique du Canada:
http://www.weatheroffice.gc.ca/mainmenu/faq_f.html#weather4b

goto top Retour en haut


Avertissement [cacher]
Je ne saurais être tenu responsable pour les dommages que la mise en oeuvre des instructions présentées sur cette page pourraient causer à votre équipement ou à vous-même. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement. Notez toutefois que les procédures ci-haut ont fonctionnées sans aucun problème pour moi.

goto top Retour en haut


Copyright © 2002-2008, Raphaël Assénat
Les marques de commerce utilisées dans ce site appartiennent à leurs propriétaires respectifs.
Site codé avecSite codé avec vimDernière mise à jour: 26 Janvier 2008