capteur de température TMP36,
Si les interrupteurs et les boutons sont géniaux, le monde physique ne se résume pas à la simple marche/arrêt. Bien que l'Arduino soit un outil numérique, il peut obtenir des informations de capteurs analogiques pour mesurer des paramètres tels que la température ou la lumière. Pour ce faire, vous utiliserez le convertisseur analogique numérique (CAN) intégré à l'Arduino.
Les broches d'entrée analogique A0 à A5 peuvent renvoyer une valeur comprise entre 0 et 1023, ce qui correspond à une plage de 0 à 5 volts.
Vous utiliserez un capteur de température pour mesurer la température de votre peau. Ce composant produit une tension variable en fonction de la température détectée. Il possède trois broches : une à la terre, une à l'alimentation et une troisième qui fournit une tension variable à votre Arduino. Dans le schéma de ce projet, vous lirez la sortie du capteur et l'utiliserez pour allumer et éteindre des LED indiquant votre température. Il existe plusieurs modèles de capteurs de température.
Ce modèle, le TMP36, est pratique car il produit une tension qui varie directement proportionnellement à la température en degrés Celsius.
CONSTRUIRE LE CIRCUIT
LE CODE
Une paire de constantes utiles
const int sensorPin = A0;const float baselineTemp = 20.0;
Les constantes sont similaires aux variables : elles permettent de nommer de manière unique les éléments du programme, mais contrairement aux variables, elles ne peuvent pas être modifiées. Nommez l'entrée analogique pour une référence facile et créez une autre constante nommée pour conserver la température de référence.
Pour chaque 2 degrés au-dessus de cette valeur de référence, une LED s'allume.
Vous avez déjà vu le type de données Integer, utilisé ici pour identifier la broche du capteur. La température est stockée sous forme de nombre à virgule flottante. Ce type de nombre possède une virgule décimale et est utilisé pour les nombres pouvant être exprimés sous forme de fractions.
Initialiser le port série à la vitesse souhaitée
void setup(){Serial.begin(9600);
Dans la configuration, vous allez utiliser une nouvelle commande : Serial. begin(). Cela ouvre une connexion entre l'Arduino et l'ordinateur, ce qui vous permet de visualiser les valeurs de l'entrée analogique sur l'écran de votre ordinateur.
L'argument 9600 correspond à la vitesse de communication de l'Arduino, soit 9600 bits par seconde. Vous utiliserez le moniteur série de l'IDE Arduino pour visualiser les informations que vous choisissez d'envoyer depuis votre microcontrôleur.
Lorsque vous ouvrez le moniteur série de l'IDE, vérifiez que le débit en bauds est de 9600.
Initialiser les directions de la broche numérique et éteindre.
for(int pinNumber = 2; pinNumber<5; pinNumber++){
pinMode(pinNumber,OUTPUT); digitalWrite(pinNumber, LOW);} }
Ensuite, une boucle for() permet de définir certaines broches comme sorties. Il s'agit des broches auxquelles vous avez connecté des LED précédemment.
Au lieu de leur donner des noms uniques et d'utiliser la fonction pinMode() pour chacune d'elles, vous pouvez utiliser une boucle for() pour les parcourir rapidement.
C'est une astuce pratique si vous souhaitez parcourir un grand nombre d'éléments similaires dans un programme. Indiquez à la boucle for() de parcourir les broches 2 à 4 séquentiellement.
Lire le capteur de température
void loop(){int sensorVal = analogRead(sensorPin);
Dans la fonction loop(), vous utiliserez une variable locale nommée sensorVal
pour stocker la valeur du capteur. Pour obtenir la valeur du capteur, appelez analogRead() qui prend un argument :
la broche sur laquelle la tension doit être mesurée. La valeur, comprise entre 0 et 1023, représente la tension sur la broche.
Envoyer les valeurs du capteur de température à l'Arduino.
Serial.print(“Sensor Value: “); Serial.print(sensorVal);
La fonction Serial.print() envoie des informations de l'Arduino à un ordinateur connecté. Ces informations sont visibles sur votre écran série.
Si vous lui donnez un argument entre guillemets, Serial.print() affichera le texte saisi. Si vous lui donnez une variable en argument, elle affichera la valeur de cette variable.
Convertir la mesure du capteur en tension
float voltage = (sensorVal/1024.0) * 5.0;
Avec un peu de mathématiques, il est possible de déterminer la tension réelle sur la broche.
Cette tension est comprise entre 0 et 5 volts et comporte une partie fractionnaire (par exemple, 2,5 volts). Il faut donc la stocker dans un nombre à virgule flottante. Créez une variable nommée voltage pour contenir cette valeur.
Divisez sensorVal par 1024,0 et multipliez par 5,0. Le nouveau nombre représente la tension sur la broche. Comme pour la valeur du capteur, vous l'afficherez sur le moniteur série.
Convertir la tension en température et envoyer la valeur à l'ordinateur
Serial.print(“, Volts: “); Serial.print(voltage)
Si vous consultez la fiche technique du capteur, vous trouverez des informations sur la plage de tension de sortie. Les fiches techniques sont comme des manuels de composants électroniques.
Elles sont rédigées par des ingénieurs, pour d'autres ingénieurs. La fiche technique de ce capteur explique que chaque variation de 10 millivolts du capteur équivaut à une variation de température de 1 degré Celsius. Elle indique également que le capteur peut mesurer des températures inférieures à 0 degré.
De ce fait, vous devrez créer un décalage pour les valeurs inférieures à zéro (0 degré). En prenant la tension, en soustrayant 0,5 et en multipliant par 100, vous obtenez la température exacte en degrés Celsius.
Enregistrez cette nouvelle valeur dans une variable à virgule flottante appelée température. Maintenant que vous avez la température réelle, imprimez là également sur le moniteur série. Puisque la variable de température est la dernière valeur que vous allez imprimer dans cette boucle, vous allez utiliser une commande légèrement différente : Serial.println(). Cette commande crée une nouvelle ligne dans le moniteur série après l'envoi de la valeur. Cela facilite la lecture lors de l'impression.
Éteindre les LED pour une température basse
Serial.print(“, degrees C: “);
float temperature = (voltage - .5) * 100;
Serial.println(temperature);
if(temperature < baselineTemp){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
Avec la température réelle, vous pouvez configurer une instruction if()...else
pour allumer les LED. En utilisant la température de référence comme point de départ, vous allumerez une LED pour chaque augmentation de température de 2 degrés au-dessus de cette température de référence. Vous rechercherez une plage de valeurs à mesure que vous parcourez l'échelle de température.
}else if(temperature >= baselineTemp+2 &&
temperature < baselineTemp+4){
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}else if(temperature >= baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
} delay(1)
}
En élargissant les types d'entrées lisibles, vous avez utilisé
analogRead() et le moniteur série pour suivre les changements dans
votre Arduino. Il est désormais possible de lire un grand nombre
de capteurs et d'entrées analogiques.