Notre Arduino uno a encore des entrées analogiques que nous pouvons utiliser, par exemple pour mesurer la température ambiante (et éventuellement aussi la température extérieure). |
-
La résolution du convertisseur AD est de 10 bits, donc 1024 niveaux. Si nous voulons mesurer la température de 0 à 50°, cela nous donne une précision de 0.05°C. Il nous faut donc 3 positions pour afficher la température.
Si nous avons réalisé une horloge, nous avons des chiffres qui ne vont pas s'allumer. En théorie nous pouvons indiquer une température qui monte à 59.9°, mais nous limitons la température maximale à 49.9° pour des raisons pratiques. On peut tout simplement remplacer l'arduino par un voltmètre (numérique ou analogique) et on a une indication de la température.
Partie électroniqueLa partie électronique a été réalisée en moins d'une heure et est toute simple. Il nous faut un convertisseur qui fournisse une tension qui va de 0 à 5V pour une température qui va de 0 à 50°C. On utilise ici un Pt100 dans une configuration minimaliste. Une dixaine de composants standards suffisent.L'alimentation est double et chaque ligne est filtrée par une petite résistance et un condensateur pour éviter que les bruits de commutation n'arrivent au circuit. Si vous réalisez un tel circuit, controlez que les tensions n'exèdent pas les 12V. Il vaut mieux rester dans les normes avec une différence de potentiel de maximum 30V. J'utilise les tensions que fournit ma petite alimentation à découpage, mais si vous utilisez un système indépendant, un petit transfo de 2×8V 4VA suffit amplement: la consommation de cette partie est de 125mW. Nous utilisons un ampli opérationnel LM10 qui est spécialement conçu pour ce travail, avec une source de courant programmable qui peut être réalisée avec quelques composants. La tension sur le drain est de -5.5V indépendamment de la tension d'alimentation (la source de courant produit exactement -2mA). Nous utilisons un ampli opérationnel commandé sur son entrée négative. La tension sur la résistance Pt100 est amplifiée -150×. Quand la température augmente, la tension devient plus négative (elle passe de -0.200V pour une température de 0° à -0.239V pour une température de 50°). L'offset de -0.2V est éliminé par le réglage (potentiomètre multitours). Le gain est ajusté par le logiciel. Si vous voulez une réponse plus rapide, remplacez la résistance de 150kΩ par deux résistances de 75kΩ et mettez la branche médiane à la masse via un condensateur de 100µF et une résistance de 1kΩ. La composante alternative est ainsi en grande partie bloquée par le condensateur, le gain de l'ampli est donc plus élevé (fonction différentiatrice). Il y a un bruit de fond important en sortie, que vous devez éliminer par un lissage numérique plus poussé. L'avantage de ce système, en plus qu'il procure une réponse plus rapide aux changements de température, c'est que le bruit de fond va produire une "erreur" dans le convertisseur qui va être gommée au lissage. Avec ce petit truc, nous pouvons augmenter la précision du convertisseur. La réponse plus rapide et la précision accrue sont interessantes dans les systèmes où la température est utilisée pour d'autres fonctions. Elle permet d'éliminer l'overshoot.
ProgrammationL'entrée analogique est lue très simplement:ftemp = (analogRead(1) + ftemp * 9) /10.0; ftemp est une variable float. Elle reçoit la valeur (integer de 0 à 1023) et la transforme en valeur float. Pourquoi? Pour effectuer un léger lissage par le logiciel. Cela évite d'avoir des chiffres qui changent continuellement quand la valeur analogique se trouve entre deux valeurs numériques. Le lissage est effectué sur 10 valeurs consécutives. Ce lissage n'est pas obligatoire, c'est un petit plus. Il est recommandé si vous lisez continuellement la température (boucle sans pause). Le lissage est obligatoire avec un facteur 99/100 si vous utilisez la fonction différentiation électronique pour absorber le bruit de fond (et le transformer en précision accrue). Le fonctionnement d'un tel système est décrit ici: augmentation de la précision d'un convertisseur AD (deuxième partie de l'article).
L'affichage est super-simple, il se base sur la routine décrite dans le programme principal de l'horloge. Commençons par éteindre les positions que nous n'utilisons pas:
Nous allons maintenant écrire les différentes positions: Dans mon cas, la programmation a été rendue plus ardue, car il s'agit d'intégrer l'indication de la température avec celle de l'heure. Il est possible de choisir 3 modes d'affichage:
Controlez le fonctionnement correct du convertisseur (il doit fonctionner comme voltmètre): avec une tension de 3.21V l'affichage doit être dans le cas idéal de 32 1. La valeur correcte est réglée plus tard.
CalibrageLe calibrage se fait avec un calibrateur gradué en degrés celcius (exemple à droite) ou un banc de résistances de précision.
Vous devez stocker la constante (le diviseur) en mémoire EEPROM (dix secondes après la dernière modification) pour éviter qu'elle ne soit perdue en cas de coupure de courant ou de reset. Ces opérations nécessitent l'utilisation de la librairie <EEPROM.h> car il ne s'agit pas d'instructions C. Le diviseur doit être transformé en integer (×100) et stocké dans trois bytes EEPROM (le même système utilisé modulo-division pour envoyer un chiffre à la fois au tubes nixie) |
Publicités - Reklame