Aujourd’hui, nous nous pencherons sur l’utilisation d’une sode de température TMP36 sur un Arduino.
Pour le projet de station météo “home made”, il nous faut des capteurs. Nous allons commencer par un capteur très simple, économique, et facile à utiliser avec le TMP36.
Branchement
En fait, ce capteur est tellement simple, que ce billet risque d’être très court! L’image de gauche donne même toutes les informations nécessaires.
Pour lire ce capteur, il faut une entrée analogique. Sur un Arduino, ce seront les broches A0 à A5. Sur un Raspberry Pi, il faudra utiliser un MCP3008 ou un autre convertisseur analogique vers numérique.
Ce capteur donne la température de -50 à 125°C, et est alimenté via du courant continu entre 2.7V et 5.5V pour une consommation de 0.05mA. Ce n’est donc pas ce capteur qui videra les batteries de votre montage.
Dans la forme que j’ai utilisée, il y a un coté arrondi, et un coté plat. Si le coté plat est vers vous, alors la broche de gauche ira sur le +5V de votre Arduino, ou sur le +3.3V du Raspberry Pi. La broche centrale ira sur votre entrée analogique, par exemple le A0 du Arduino, ou une broche d’entrée du MCP3008 connecté à votre Raspberry Pi. Enfin, la broche de droite sera connectée à la masse (0V) de votre circuit.
Et voila! Le branchement est fini!
Programme
Quand au code, c’est très simple : il suffit de lire la tension retournée par la broche centrale, et de calculer la correspondance en °C. Voici un exemple de code Arduino permettant de lire la température, et de l’afficher dans le moniteur série: voici un premier programme lisant une valeur toutes les 100ms, puis affichant cette valeur.
Ici, nous afficherons la température toutes les 100ms. Si vous essayez cet exemple, vous vous rendrez compte qu’il y a des variations sur la valeur retournée. Et celles ci peuvent être assez importantes. Pour résoudre ce problème, nous allons lisser les valeurs en faisant la moyenne de plusieurs mesures (cliquez ici pour voir la source). Pour cela, il suffira d’utiliser la fonction readAvgTemp(int pin, int waitDelay, int count) que je vous fournis dans le code. Le premier paramètre est la broche analogique sur laquelle vous avez branché le TMP36, le second est le délai entre deux mesures successives, et le troisième le nombre de mesures. Par exemple, readAvgTemp(A0, 1,100) retournera la moyenne de 100 mesures faites à 1ms d’écart. L’exécution prendra donc logiquement 100ms au total. Plus le nombre de mesures sera élevé, plus la valeur sera stable. Bien sur, si vous prenez des mesures sur 5 minutes, vous ne saisirez pas les variations rapides de température. En général les variations de températures prennent au moins quelques secondes pour faire effet.
Tous les codes sources sont sur le GitHub du projet Milapli.
Si le Github est inaccessible, voici le premier code :
int tempPin=A0;
float readTemp(int pin)
{
float bv=analogRead(pin);
float mv=bv*5/1024.0;
float temperatureC = (mv – 0.5) * 100 ;
return temperatureC;
}
float readAvgTemp(int pin, int waitDelay, int count)
{
int k=0;
float sum=0.0;
for(k=0;k<count;k++)
{
sum=sum + readTemp(pin);
delay(waitDelay);
}
float avg=sum/(float)count;
return avg;
}
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print(“Temperature : “);
Serial.println(readTemp(tempPin));
delay(100);
}
Bonjour,
en prenant analogReference(INTERNAL), on affine la mesure car la référence de l’Arduino est alors de 1.1v, ce qui donne une plage de mesure de -50 à +60°C avec environ 0.1°C de précision.
Bonne chance pour la station météo 😉
Merci pour cette indication, je ne manquerai pas d’exploiter cette fonctionnalité! D’ailleurs le 1.1v interne m’intéresse, car j’aimerais me passer de régulateur de tension, or il me faut une tension de référence fixe. Du coup si cette référence est toujours à 1.1v, j’aurai cette référence fixe 🙂
Hello,
Voici le même type de montage ainsi qu’une comparaison avec une sonde analogique et un convertisseur analogique/numérique sur Raspberry Pi : http://www.magdiblog.fr/gpio/gpio-capteurs-de-temperature/
Bonjour,
Je suis tout nouveau sur l’arduino et je serais très interessé pour utiliser ton code mais j’aimerais pouvoir brancher plusieurs capteurs de température. Seulement je ne sais pas comment adapter ton code pour pouvoir avoir le lissage du signal sur différentes voie.
Dans l’attente de ta réponse je te remercie déjà pour ce code que tu as partagé.
Merci
Matthieu
c de la merde ton capteur
Bonjour et merci à tous pour les divers commentaires. Je réalise un projet sur Arduino et j’utilise le TMP36 pour capter la température. J’affichais seulement les mesures à chaque seconde pour tester mais j’ai remarqué que les valeurs n’étaient pas souvent voisines, je cherchais un moyen pour disons ‘normaliser’ un peu les valeurs. Je vais donc essayer ce qui est là: https://github.com/sarinkhan/Milapli/blob/master/TMP36_test2.ino.
Aussi je comprends pas bien comment appliquer le commentaire de ‘oldlink’ (1er commentaire,
du 15 août 2013 – 12:00)
Merci…
et vas’y bonne chance pour le projet