Artistiquement, que la courbe représentative soit logarithmique, n’est pas du tout moche. Elle est assez jolie la belle pente rouge sur la Fig.47, il serait presque judicieux de l’encadrer. Le problème, c’est le langage C++ du compilateur d’Arduino à sa naissance ne sait pas ce qu’est une « fonction log« . Heureusement pour nous, des acharnés passionnés ont créé une bibliothèque mathématique qui inclus cette étrange chose. Il suffit dans le programme qui aura besoin de cette routine mathématique de déclarer la bibliothèque : #include <math.h>
De plus, nous avons de la chance, car maintenant ce petit trésor fait partie intégrante de l’IDE et nous n’avons pas besoin d’aller le chercher sur Internet et de le déclarer. Génial non ?
Établir la liaison entre U sur A3 et la valeur de la température exprimée en degrés Celsius devient un jeu d’enfant. Analysons les séquences de programme qui se chargent de cette phase du logiciel. Deux lignes de programme traduisent globalement les actions qui se succèdent :
La ligne (1) procède sur A3 nommée Capteur_KY_013 à la numérisation dans la variable Mesure_NUM_CTN de la tension U. La valeur est un int car peut aller jusqu’à 1023. Vous avez déjà compris qu’en (2) la fonction Conversion_en_degres effectue tout le travail de transposition. Examinons cette séquence de programme :
La ligne (3) précise avec double qu’il s’agit d’une fonction qui retournera un réel codé sur 64 Bits. Notez que la séquence va utiliser la variable Mesure_CTN qui en réalité prend la valeur de Mesure_NUM_CTN qui est passée en paramètre lors de l’appel du calcul en (2). Dans la séquence étudiée on déclare en (4) la variable Tmp_Kelvin qui va subir diverses transformations. Bien que pas très longue, la ligne de programme (5) effectue un gros travail. La valeur 10000.0 représente la résistance R exprimée en Ω. Pas compliqué de comprendre que 1023.0 représente la plus grande valeur numérisée quand U arrive à exactement +5Vcc. Pour le reste de la formule il faut titiller un peu les équations. Si l’on désire établir la relation entre la valeur numérisée et la tension U il faut employer la proportionnalité : U = Mesure_CTN * 5 / 1023. On reporte dans la formule encadrée qui devient :
Pour simplifier cette forme, on met le 10000 en facteur commun, la formule devient celle située dans l’encadré colorié en rose. C’est exactement ce qui est codé dans la ligne (5) qui en outre transforme la valeur par la fonction log() pour tenir compte de l’évolution logarithmique de CTN sous l’influence de sa température. La ligne (6) tronquée dans la mise en page et complétée par (7) et correspond à la caractéristique intrinsèque du composant, comportement garanti par le fournisseur avec une bonne précision. Comme ce calcul de conversion de CTN vers température est effectué en degrés Kelvin, la ligne de calcul suivante (8) transforme en degrés Celsius. OUF !
Enfin, la dernière ligne de code (9) retourne le résultat sous forme d’un réel exprimé en °C.
Misère vont gémir certains à juste titre, qui ne désiraient pas des trifouilleries si compliquées, qui n’ont pas de thermomètre qui « monte aussi haut », ni d’alimentation de laboratoire pour torturer le bloc thermique, que vais-je devenir ?
Pas de panique, contentez-vous d’ignorer ce paragraphe scandaleux. Le module que vous approvisionnerez présentera par « construction » des caractéristiques pratiquement identiques à celles du prototype. L’imprécision qui résultera de la dispersion de caractéristiques sera absolument négligeable. Vous téléchargez le programme et vogue la galère …
Pour ceux qui désireraient modifier le logiciel et en faire une version locale, par exemple changer la température d’alarme, le tableau donné ci-dessous donne la correspondance entre la température et les valeurs retournées par la numérisation dans la variable Mesure_NUM_CTN.
Les lignes de code source présentées ci-avant pour détailler la façon dont sont soumis les traitements à l’ATmega328 pour gérer la température sont extraites du petit programme démonstrateur P03_mesure_la_temperature.ino. On ne peut faire plus compact. Au début les déclarations diverses, l’initialisation du matériel. Puis, la boucle de base effectue immuablement une conversion analogique numérique, soumet le résultat à la procédure de calculs, et enfin affiche le résultat sur l’écran LCD. Enfin, après une temporisation de 0,5S elle recommence indéfiniment.
Envisageons le pire des cas : Vous n’arrivez pas à vous procurer le petit module KY-013 spécifique à Arduino pour mesurer des températures. Approvisionnez une thermistance CTN quelconque, peu importe le modèle, soudez-la sur un petit circuit imprimé avec une résistance de 10kΩ, les deux étant branchées conformément au schéma de la Fig.46 pour respecter le sens de variation des CAN. Puis procédez aux essais qui vous permettront de déterminer les valeurs critiques pour le programme, en l’occurrence celle de la température à l’équilibre thermique. Combien même la température calculée ne serait pas rigoureuse car votre composant n’aurait pas des caractéristiques identiques à celles du module KY-013, l’important consiste à détecter une surchauffe. Peu importe la température annoncée. Pour le seuil qui déclenchera une alerte, adoptez la valeur de l’équilibre thermique ventilé et ajoutez environ sept à dix degrés Celsius. Problème résolu !
La suite est ici.