Guides · 20 min de lecture

Capteurs de température Arduino : comparatif de 8 modèles

Capteurs de température Arduino comparés : DHT11, DHT22, DS18B20, LM35, NTC, BME280, MAX6675 et MLX90614 selon précision, plage, câble et prix.

Bien choisir parmi les différents capteurs de température pour Arduino compte plus qu'il n'y paraît : un DHT11 et un DS18B20 posés dans la même pièce peuvent afficher 2 °C d'écart, et il est tout à fait possible de faire fondre un capteur en voulant mesurer un four à 300 °C avec le mauvais modèle. Huit capteurs de température dominent l'électronique de loisir : DHT11, DHT22, DS18B20, LM35, la thermistance CTN (NTC), BME280, MAX6675 (thermocouple type K) et MLX90614 (infrarouge sans contact). Chacun a une plage de mesure, une précision, un mode de connexion et un prix différents. Le bon choix dépend de ce que tu veux mesurer : l'air d'une pièce, de l'eau, un four ou un moteur qui tourne et que tu ne peux pas toucher ?

Dans ce guide, nous plaçons les huit capteurs côte à côte dans deux grands tableaux : plage de mesure, précision, résolution, vitesse de lecture, interface, tension d'alimentation, longueur de câble et prix relatif. Tu verras ensuite comment chacun fonctionne, ses points forts et ses points faibles, son câblage sur Arduino Uno, ESP32 et Raspberry Pi Pico, des exemples de code pour la NTC, le MAX6675 et le MLX90614, un banc d'essai qui met trois capteurs en compétition et lequel choisir pour quel projet. La plupart de ces capteurs ont aussi leur tutoriel détaillé ; tu trouveras les liens dans les sections correspondantes.

Module capteur de température et d’humidité DHT11
Module capteur de température et d’humidité DHT11
Module capteur de température et d’humidité DHT22 (AM2302)
Module capteur de température et d’humidité DHT22 (AM2302)
Sonde de température DS18B20 étanche
Sonde de température DS18B20 étanche
Module capteur de température, d’humidité et de pression BME280
Module capteur de température, d’humidité et de pression BME280
Thermistance CTN
Thermistance CTN

Quels critères pour choisir un capteur de température ?

Avant de comparer des capteurs, il faut bien lire les termes des fiches techniques. Le duo le plus souvent confondu, c'est précision et résolution. La précision indique à quel point ta mesure est proche de la température réelle ; la résolution est le plus petit pas que le capteur sait distinguer. Le BME280 donne la température par pas de 0,01 °C, mais sa précision est d'environ ±1 °C : les deux derniers chiffres des 23,47 °C affichés servent donc à suivre de petites variations, pas à connaître la température réelle avec cette finesse. Pour choisir, regarde ces sept critères :

  • Plage de mesure : le capteur doit couvrir confortablement la température la plus basse et la plus haute que tu veux mesurer. Le DHT11 ne voit rien sous zéro ; un réfrigérateur demande un DS18B20, un four un thermocouple.
  • Précision : ±2 °C suffit pour un thermomètre d'intérieur, mais un aquarium ou une couveuse exige ±0,5 °C.
  • Interface : les capteurs analogiques demandent une broche du CAN (ADC), les capteurs numériques une ou plusieurs broches numériques et, le plus souvent, une bibliothèque. Le nombre de broches libres de ta carte détermine combien de capteurs tu peux brancher.
  • Longueur de câble : si le capteur est à 5 mètres de la carte, au jardin ou au fond d'une cuve d'eau, les capteurs analogiques et I2C peinent ; le 1-Wire et le protocole à un fil des DHT supportent bien mieux les grandes distances.
  • Temps de réponse : une sonde dans un fourreau en acier ou un DHT dans son boîtier en plastique ne suit un changement brusque qu'au bout de plusieurs secondes, voire minutes ; une petite NTC nue est bien plus rapide.
  • Mesures supplémentaires : s'il te faut aussi l'humidité, un DHT22 ou un BME280 fait l'affaire ; s'il te faut en plus la pression et l'altitude, le BME280 fait tout dans un seul module.
  • Tension d'alimentation : sur l'ESP32 et la Pico en 3,3 V, attention aux capteurs comme le LM35 qui demandent au moins 4 V, et veille à ce que l'entrée du CAN ne reçoive jamais plus de 3,3 V.

Tableau comparatif de 8 capteurs de température

Le premier tableau résume les performances de mesure, le second le câblage et le coût. Les valeurs viennent des fiches techniques ; sauf mention contraire, la précision s'entend autour de la température ambiante et se dégrade vers les extrémités de la plage.

CapteurPlage de mesurePrécisionRésolutionVitesse de lecture
DHT110 … +50 °C±2 °C1 °C1 par seconde
DHT22 (AM2302)−40 … +80 °C±0,5 °C0,1 °C1 toutes les 2 secondes
DS18B20−55 … +125 °C±0,5 °C (de −10 à +85 °C)0,0625 °C (12 bits)750 ms (12 bits), 94 ms (9 bits)
LM35DZ0 … +100 °C (LM35 : −55 … +150 °C)Typique ±0,6 °C, garantie ±1,5 °C0,49 °C sur l'Uno (réf. 5 V), 0,11 °C (réf. 1,1 V)Instantanée (vitesse du CAN)
NTC 10 kΩ, B 3950−40 … +125 °C (sous verre ≈ 300 °C)À 25 °C : ±0,25 °C (1 %) … ±1 °C (5 %)≈ 0,1 °C à température ambiante sur l'UnoInstantanée (vitesse du CAN)
BME280−40 … +85 °C±0,5 °C (25 °C), ±1 °C (0 … 65 °C)0,01 °CDes dizaines par seconde
MAX6675 + thermocouple type K0 … +1023,75 °CQuelques °C (convertisseur ≈ ±2 °C, soudure froide jusqu'à ±3 °C)0,25 °C≈ 4 par seconde (conversion de 0,22 s)
MLX90614Objet −70 … +380 °C, ambiante −40 … +125 °C±0,5 °C (autour de l'ambiante)0,02 °CPlusieurs fois par seconde
CapteurInterfaceAlimentationLongueur de câbleMesure en plusPrix relatif
DHT11Numérique à un fil, 1 broche3–5,5 VJusqu'à 20 mHumiditéTrès bas
DHT22Numérique à un fil, 1 broche3,3–6 VJusqu'à 20 mHumiditéMoyen
DS18B201-Wire, plusieurs capteurs sur 1 broche3,0–5,5 VDes dizaines de mètresAucuneBas
LM35Analogique, 1 broche du CAN4–30 VCourte, ≈ 1 m (au-delà, précautions nécessaires)AucuneBas
NTCAnalogique, 1 broche du CAN via un pont diviseur3,3 ou 5 V via le pontQuelques mètresAucuneLe plus bas
BME280I2C (2 broches) ou SPIPuce 1,71–3,6 V ; module avec régulateur 5 VCourte, moins de 50 cmHumidité et pressionMoyen
MAX6675SPI, 3 broches (lecture seule)3,0–5,5 VLe fil du thermocouple peut faire plusieurs mètresAucuneMoyen
MLX90614I2C (SMBus), 2 brochesVersion 3 V ou 5 V (le module peut avoir un régulateur)Courte (I2C) ; mesure sans contactTempérature ambianteÉlevé
En gros, le classement des prix est le suivant : la NTC est la moins chère, suivie du DHT11, du LM35 et du DS18B20 ; le DHT22 et le BME280 sont en milieu de gamme, le module MAX6675 avec sa sonde thermocouple coûte un peu plus et le MLX90614 est le plus cher de la liste. Les copies de capteurs bon marché sont très répandues ; surtout pour le DS18B20, le LM35 et le BME280, les clones peuvent ne pas atteindre la précision de la fiche technique. Laisser deux capteurs au même endroit et comparer leurs mesures est le moyen le plus simple de savoir si tu peux te fier au tien.

DHT11 et DHT22 : température et humidité ensemble

Dans la grille en plastique d'un capteur DHT se trouvent un élément d'humidité (résistif dans le DHT11, capacitif dans le DHT22), une thermistance et un petit contrôleur qui numérise les mesures. Le capteur envoie son résultat sur une seule ligne de données sous la forme d'un paquet de 40 bits : 16 bits d'humidité, 16 bits de température et 8 bits de somme de contrôle. Ce protocole n'est pas du 1-Wire mais un protocole à un fil propre au fabricant ; chaque DHT a donc besoin de sa propre broche. Le DHT11 est bon marché et suffit pour la température d'une pièce, mais sa plage de 0–50 °C et son erreur de ±2 °C le rendent faible pour l'extérieur et les travaux précis. Avec le même câblage, le DHT22 (AM2302) mesure de −40 à +80 °C avec ±0,5 °C de précision et donne l'humidité de 0 à 100 % ; en contrepartie, il ne fait qu'une mesure toutes les deux secondes. Tous deux partagent un défaut, la lenteur : ils affichent les changements en retard, car l'air de la grille doit d'abord s'équilibrer avec l'environnement. Pour le câblage, l'installation de la bibliothèque et le code, consulte Capteur de température et d'humidité DHT11 ; le même code fonctionne avec le DHT22 en changeant un seul mot.

Si tu utilises un DHT nu à 4 pattes, tu dois placer une résistance de pull-up de 10 kΩ entre la ligne de données et VCC ; sur les modules à 3 broches, cette résistance est déjà sur la carte. Lire un DHT plus souvent que toutes les deux secondes ne donne pas de nouvelle mesure : la bibliothèque renvoie l'ancienne valeur ou nan.

DS18B20 : étanche, robuste et plusieurs capteurs sur une broche

Sonde de température DS18B20 étanche
Sonde DS18B20 étanche : un capteur numérique dans un fourreau en inox avec un câble à trois fils (rouge VDD, noir GND, jaune données).

Le DS18B20 mesure la température dans la puce et l'envoie sous forme de nombre numérique, avec une résolution réglable de 9 à 12 bits. Il mesure de −55 à +125 °C, offre ±0,5 °C de précision entre −10 et +85 °C et, grâce au protocole 1-Wire, tu peux brancher des dizaines de capteurs sur une seule broche de données ; chacun possède une adresse unique de 64 bits gravée en usine. Sa version sonde étanche en fourreau inox est imbattable pour un aquarium, une cuve d'eau, des tuyaux de chauffage, la terre ou un congélateur. Sa seule exigence est une résistance de pull-up de 4,7 kΩ entre la ligne de données et l'alimentation ; sans elle, la bibliothèque renvoie −127 °C. En mode 12 bits, une conversion dure 750 ms : pour suivre une température qui change vite, il faudra peut-être baisser la résolution. Le code multi-capteurs et la lecture non bloquante sur ESP32 sont dans Capteur de température DS18B20.

LM35 : le capteur analogique le plus simple, sans bibliothèque

Le LM35 convertit directement la température en tension : sa sortie augmente de 10 mV par degré et donne 250 mV à 25 °C. Pas besoin de bibliothèque ; tu obtiens le résultat avec la formule température = analogRead × 5,0 / 1024 × 100. Cette simplicité en fait un premier pas idéal pour apprendre le CAN. Ses faiblesses viennent du même endroit : avec une référence de 5 V, le CAN 10 bits de l'Arduino Uno ne donne que des pas d'environ 0,49 °C, chaque écart des 5 V de l'USB se répercute directement sur la température et, plus le câble est long, plus la sortie capte de parasites. La plupart des LM35 du commerce sont des LM35DZ, garantis seulement pour 0–100 °C. Il demande aussi au moins 4 V : sur l'ESP32 et la Pico, il faut donc l'alimenter par la broche 5 V. Sur les cartes en 3,3 V, une option analogique plus pratique est le TMP36 : il fonctionne de 2,7 à 5,5 V, mesure de −40 à +125 °C et sort lui aussi 10 mV/°C, mais comme il donne 500 mV à 0 °C, la formule devient température = (V − 0,5) × 100. Sa précision typique est de ±1 °C à 25 °C et de ±2 °C sur toute la plage. Nous expliquons pas à pas comment réduire le pas à 0,11 °C avec la référence interne de 1,1 V dans Capteur de température LM35, et le fonctionnement du CAN dans conversion analogique-numérique.

Le LM35 et le DS18B20 sont livrés dans le même boîtier TO-92 noir et se ressemblent presque trait pour trait, mais leurs pattes d'alimentation sont inversées. Un capteur branché à l'envers devient brûlant en quelques secondes. À la première mise sous tension, touche le capteur du doigt ; s'il chauffe, coupe immédiatement l'alimentation et lis le marquage.

Thermistance CTN (NTC) : le capteur le moins cher et le plus rapide

Une thermistance CTN, ou NTC (Negative Temperature Coefficient), est une résistance dont la valeur diminue quand la température augmente. La plus courante dans les projets de loisir fait 10 kΩ à 25 °C avec un coefficient B de 3950 K. Comme l'Arduino ne sait pas mesurer directement une résistance, on monte la NTC en pont diviseur de tension avec une résistance fixe et on lit la tension du point milieu sur une broche analogique. Ce circuit a un bel avantage : quand le pont est alimenté par les mêmes 5 V que la référence du CAN, la mesure est ratiométrique ; le résultat ne change pas, même si l'alimentation vaut 4,8 ou 5,1 V. Tu peux calculer facilement les tensions du pont avec l'outil pont diviseur.

La résistance d'une NTC varie avec la température de façon exponentielle et non linéaire ; un simple coefficient comme pour le LM35 ne suffit donc pas. En pratique, on utilise l'équation Bêta : 1/T = 1/T0 + (1/B) × ln(R/R0). Ici, T est la température en kelvins, T0 = 298,15 K (25 °C), R0 = 10 kΩ et B = 3950. À température ambiante, la sensibilité est très élevée : d'après la formule B/T², la résistance varie d'environ 4,4 % par degré. C'est pourquoi une NTC à 1 % de tolérance ne se trompe que d'environ ±0,25 °C à 25 °C ; vers les extrémités de la plage, en revanche, la tolérance du coefficient B entre en jeu et l'erreur augmente. Pour plus de précision sur une large plage, on utilise l'équation de Steinhart-Hart à trois points ; les détails sont dans thermistance NTC.

C++ (Arduino IDE)
1const int NTC_PIN = A1;          // bölücünün orta noktası / divider midpoint
2const float R_FIXED = 10000.0;   // 5V ile A1 arasındaki direnç / resistor between 5V and A1
3const float R0 = 10000.0;        // NTC'nin 25 °C'deki direnci / NTC resistance at 25 °C
4const float BETA = 3950.0;       // B katsayısı (veri sayfası) / B coefficient (datasheet)
5const float T0 = 298.15;         // 25 °C Kelvin cinsinden / 25 °C in kelvin
6const int SAMPLES = 16;          // ortalama için ölçüm sayısı / samples to average
7
8void setup() {
9  Serial.begin(9600);
10}
11
12void loop() {
13  long sum = 0;
14  for (int i = 0; i < SAMPLES; i++) {
15    sum += analogRead(NTC_PIN);
16    delay(2);
17  }
18  float adc = sum / (float)SAMPLES;
19
20  if (adc < 1.0 || adc > 1022.0) {                    // kopuk ya da kısa devre / open or shorted
21    Serial.println(F("NTC baglantisini kontrol et / Check the NTC wiring"));
22    delay(1000);
23    return;
24  }
25
26  float r = R_FIXED * adc / (1023.0 - adc);           // NTC direnci (ohm) / NTC resistance (ohm)
27  float invT = 1.0 / T0 + log(r / R0) / BETA;         // Beta denklemi / Beta equation
28  float tempC = 1.0 / invT - 273.15;                  // Kelvin -> °C
29
30  Serial.print(F("R: "));
31  Serial.print(r, 0);
32  Serial.print(F(" ohm  Sicaklik / Temp: "));
33  Serial.print(tempC, 1);
34  Serial.println(F(" C"));
35  delay(1000);
36}

Dans ce montage, la résistance fixe de 10 kΩ est placée entre 5V et A1, la NTC entre A1 et GND. Quand la température monte, la résistance de la NTC baisse, et avec elle la tension sur A1. Le code calcule d'abord la résistance de la NTC à partir de la valeur brute, puis la température en kelvins avec l'équation Bêta, et la convertit en degrés Celsius ; la moyenne de 16 mesures divise le bruit du CAN par quatre. À température ambiante, un pas du CAN de l'Uno correspond à environ 0,09 °C, soit une résolution cinq fois meilleure que celle du LM35 avec la référence de 5 V. Sur les modules NTC tout faits (le KY-013 par exemple), le côté où se trouve la résistance fixe varie d'une carte à l'autre ; si la mesure baisse quand tu touches la NTC avec quelque chose de chaud, inverse la formule de la résistance : r = R_FIXED × (1023 − adc) / adc.

BME280 : température, humidité et pression dans un seul module

Le BME280 de Bosch mesure la température, l'humidité relative et la pression atmosphérique sur une puce de seulement 2,5 × 2,5 mm et communique en I2C (adresse 0x76 ou 0x77) ou en SPI. En température, il offre une résolution de 0,01 °C et une précision de ±0,5 °C à 25 °C et de ±1 °C entre 0 et 65 °C ; il peut faire des dizaines de mesures par seconde et consomme bien moins de 1 µA en veille. Il est donc idéal pour les stations météo sur piles. La puce elle-même ne supporte pas plus de 3,6 V : les modules violets à 6 broches sont généralement prévus pour 3,3 V seulement, tandis que les modules à 4 broches avec régulateur peuvent être branchés en 5 V. En mesure continue, la puce chauffe légèrement et peut afficher quelques dixièmes de degré de trop ; pour la météo, le mode forcé avec quelques mesures par minute suffit. Nous expliquons le fonctionnement du bus I2C dans Qu'est-ce que l'I2C ?.

Une partie des modules vendus comme BME280 sont en réalité des BMP280, qui ne mesurent pas l'humidité. Les deux se ressemblent presque parfaitement ; le moyen sûr de les distinguer est de lire le registre d'identification (chip ID) : le BME280 renvoie 0x60, le BMP280 0x58. Dans ce cas, l'exemple de la bibliothèque Adafruit BME280 affiche le message "Could not find a valid BME280 sensor". Le code de lecture de l'ID et la solution sont dans BME280 et BMP280.

MAX6675 et thermocouple type K : jusqu'à 1000 °C

Un thermocouple se compose de deux fils de métaux différents soudés à une extrémité. La différence de température entre la soudure (soudure chaude) et le point où les fils se raccordent à l'appareil (soudure froide) crée une toute petite tension dans les fils ; pour un thermocouple type K, elle est d'environ 41 µV par degré. Le CAN de l'Arduino ne peut pas lire une tension aussi faible, et il faut en plus connaître la température de la soudure froide. Le MAX6675 fait les deux : il amplifie la tension du thermocouple, applique la compensation de soudure froide en mesurant sa propre température et fournit le résultat en SPI sur 12 bits, avec une résolution de 0,25 °C. Sa plage va de 0 à +1023,75 °C : c'est la seule option de cette liste pour les endroits où les autres capteurs ne survivent pas, comme un fer à souder, un four à pizza, un barbecue, un four à céramique ou un pot d'échappement.

Connais aussi les limites du MAX6675 : il ne mesure pas sous 0 °C ; l'erreur propre du convertisseur est d'environ ±2 °C entre 0 et 700 °C, à laquelle s'ajoutent jusqu'à ±3 °C d'erreur de compensation de soudure froide et la tolérance du fil du thermocouple. Attends-toi donc à une précision globale de quelques degrés ; dans un four à 800 °C, cet écart ne compte pas. Une conversion dure 0,17–0,22 seconde : il faut donc attendre au moins 250 ms entre deux lectures. S'il te faut aussi des températures négatives, le MAX31855, plus récent (−200 à +1350 °C, 14 bits), est le meilleur choix. Le fonctionnement du bus SPI est expliqué dans Qu'est-ce que le SPI ?. Installe la bibliothèque MAX6675 library d'Adafruit depuis le gestionnaire de bibliothèques de l'Arduino IDE, puis téléverse ce code :

C++ (Arduino IDE)
1#include "max6675.h"
2
3const int thermoDO  = 4;    // SO: veri çıkışı / data out
4const int thermoCS  = 5;    // CS: çip seçimi / chip select
5const int thermoCLK = 6;    // SCK: saat / clock
6
7MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
8
9void setup() {
10  Serial.begin(9600);
11  delay(500);                                   // ilk ölçümü bekle / wait for the first conversion
12}
13
14void loop() {
15  float c = thermocouple.readCelsius();
16  if (isnan(c)) {                               // D2 biti: termokupl açık / bit D2: thermocouple open
17    Serial.println(F("Termokupl takili degil / Thermocouple not connected"));
18  } else {
19    Serial.print(F("Sicaklik / Temp: "));
20    Serial.print(c, 2);
21    Serial.println(F(" C"));
22  }
23  delay(500);                                   // en az 250 ms bekle / wait at least 250 ms
24}
Les fils du thermocouple sont polarisés : branche les fils marqués + et − sur les bornes à vis portant les mêmes marques sur le module ; si tu les inverses, la mesure baisse quand la sonde chauffe. Ne place pas le module à côté de l'appareil qui chauffe : comme le MAX6675 corrige la soudure froide avec sa propre température, tout échauffement de la carte se retrouve directement dans la mesure. Si la sonde n'est pas branchée ou si le fil est coupé, la bibliothèque renvoie nan.

MLX90614 : mesurer la température sans contact

Le MLX90614 est un capteur de température sans contact qui détecte avec une thermopile le rayonnement infrarouge émis par les objets. Il donne deux valeurs à la fois : la température ambiante, celle de son propre boîtier (−40 à +125 °C), et la température de l'objet, celle de la surface qu'il vise (−70 à +380 °C). Autour de la température ambiante, il offre ±0,5 °C de précision et 0,02 °C de résolution ; il est étalonné en usine, communique en I2C (SMBus) à l'adresse 0x5A, et la fréquence du bus ne doit pas dépasser 100 kHz. Il est idéal pour mesurer sans contact un moteur en rotation, un roulement, une puce qui chauffe sur une carte ou une poêle sur le feu.

La mesure sans contact a deux subtilités. La première est le champ de vision : le capteur mesure la moyenne de tout ce qui entre dans son cône de vision. La version la plus courante, le MLX90614ESF-BAA, a un champ de vision de 90° ; à 5 cm, il fait donc la moyenne d'une zone d'environ 10 cm de diamètre. Pour mesurer un petit objet, rapproche le capteur ou choisis une version à angle étroit comme 35° (BCC) ou 5° (BCI). La seconde est l'émissivité : le capteur est réglé sur 1,0 en usine. Pour la peinture mate, le plastique, le bois, la peau et l'eau, ce coefficient se situe entre 0,9 et 0,98, donc le résultat est presque juste ; les surfaces métalliques brillantes, elles, émettent très peu de rayonnement et paraissent bien plus froides qu'elles ne le sont. Y coller un morceau de ruban adhésif noir mat est une solution simple et efficace. Installe la bibliothèque Adafruit MLX90614 depuis le gestionnaire de bibliothèques et essaie ce code :

C++ (Arduino IDE)
1#include <Wire.h>
2#include <Adafruit_MLX90614.h>
3
4Adafruit_MLX90614 mlx = Adafruit_MLX90614();
5
6void setup() {
7  Serial.begin(9600);
8  if (!mlx.begin()) {                           // varsayılan adres 0x5A / default address 0x5A
9    Serial.println(F("MLX90614 bulunamadi / not found"));
10    while (true) delay(10);
11  }
12  Serial.print(F("Emisivite / Emissivity: "));
13  Serial.println(mlx.readEmissivity(), 2);      // fabrika ayarı 1.00 / factory default 1.00
14}
15
16void loop() {
17  Serial.print(F("Ortam / Ambient: "));
18  Serial.print(mlx.readAmbientTempC(), 2);      // sensör gövdesi / sensor body
19  Serial.print(F(" C   Nesne / Object: "));
20  Serial.print(mlx.readObjectTempC(), 2);       // baktığı yüzey / surface in view
21  Serial.println(F(" C"));
22  delay(500);
23}
Le MLX90614 ne voit pas à travers le verre : son filtre optique laisse passer les longueurs d'onde de 5,5–14 µm, et le verre est presque opaque dans cette plage. Si tu vises l'extérieur à travers une fenêtre, tu mesures la vitre, pas le dehors. De plus, quand on le fait passer d'une pièce froide à une pièce chaude, il peut mesurer de travers pendant quelques minutes, le temps que son boîtier se mette à l'équilibre.

Récapitulatif du câblage : Arduino Uno, ESP32 et Raspberry Pi Pico

Capteur et brocheArduino UnoESP32Raspberry Pi Pico
DHT11 / DHT22 : DATAD2GPIO 27GP15
DS18B20 : DQ (+ pull-up 4,7 kΩ)D3GPIO 4GP22
LM35 : Vout (alimentation 5 V)A0GPIO 34 (ADC1)GP26 (ADC0)
NTC : point milieu du pontA1 (pont sur 5V)GPIO 35 (ADC1, pont sur 3V3)GP27 (ADC1, pont sur 3V3)
BME280 : SDA / SCLA4 / A5GPIO 21 / 22GP4 / GP5
MLX90614 : SDA / SCLA4 / A5 (même bus I2C)GPIO 21 / 22GP4 / GP5
MAX6675 : SO / CS / SCKD4 / D5 / D6GPIO 19 / 23 / 18GP16 / GP17 / GP18
Alimentation (VCC)5V (3.3V pour le BME280 à 6 broches)3V3 (5V/VIN pour le LM35)3V3(OUT) (VBUS pour le LM35)

L'ESP32 et la Pico fonctionnent en 3,3 V ; si tu alimentes le pont de la NTC en 3V3, aucune tension dangereuse ne peut atteindre l'entrée du CAN. Sur l'ESP32, branche les capteurs analogiques uniquement sur des broches de l'ADC1 (GPIO 32–39), car celles de l'ADC2 ne fonctionnent pas quand le Wi-Fi est actif ; pour les lignes de données bidirectionnelles comme celles du DHT et du DS18B20, évite en revanche les GPIO 34–39, qui sont uniquement des entrées. Le BME280 (0x76) et le MLX90614 (0x5A) ont des adresses différentes et peuvent donc partager sans souci les deux mêmes fils I2C. Tu trouveras toutes les broches de ta carte dans l'outil Pinout et le code couleur des résistances de pull-up dans l'outil code couleur des résistances.

Test comparatif avec l'ESP32 : trois capteurs au même endroit

Le meilleur moyen de voir les différences entre capteurs, c'est de les observer toi-même. Le code ESP32 ci-dessous lit en même temps un DS18B20, un DHT22 et un BME280 et affiche les résultats sous forme de trois courbes distinctes dans le traceur série (Serial Plotter) de l'Arduino IDE. Place les capteurs côte à côte sur la breadboard, à au moins 10 cm de l'ESP32 ; l'ESP32 chauffe en fonctionnant et influence tout capteur placé à côté. Le code a besoin des bibliothèques OneWire, DallasTemperature, DHT sensor library et Adafruit BME280.

C++ (Arduino IDE)
1#include <OneWire.h>
2#include <DallasTemperature.h>
3#include <DHT.h>
4#include <Wire.h>
5#include <Adafruit_Sensor.h>
6#include <Adafruit_BME280.h>
7
8const int ONE_WIRE_PIN = 4;     // DS18B20 DQ (4,7 kΩ pull-up -> 3V3)
9const int DHT_PIN = 27;         // DHT22 DATA
10
11OneWire oneWire(ONE_WIRE_PIN);
12DallasTemperature ds(&oneWire);
13DHT dht(DHT_PIN, DHT22);
14Adafruit_BME280 bme;            // I2C: SDA GPIO 21, SCL GPIO 22
15bool bmeOk = false;
16
17void setup() {
18  Serial.begin(115200);
19  ds.begin();
20  dht.begin();
21  bmeOk = bme.begin(0x76) || bme.begin(0x77);   // iki adresi de dene / try both addresses
22  if (!bmeOk) Serial.println("BME280 bulunamadi / not found");
23}
24
25void loop() {
26  ds.requestTemperatures();                     // 12 bitte ~750 ms sürer / takes ~750 ms at 12-bit
27  float tDs  = ds.getTempCByIndex(0);           // sensör yoksa -127 / -127 if missing
28  float tDht = dht.readTemperature();           // hata olursa NAN / NAN on error
29  float tBme = bmeOk ? bme.readTemperature() : NAN;
30
31  // Seri Çizici için etiket:değer biçimi / label:value format for the Serial Plotter
32  Serial.printf("DS18B20:%.2f,DHT22:%.1f,BME280:%.2f\n", tDs, tDht, tBme);
33  delay(2000);                                  // DHT22 en fazla 2 sn'de bir / DHT22 at most every 2 s
34}

Attends d'abord quelques minutes et regarde l'écart entre les courbes : des différences de 0,5–1 °C restent dans les limites de précision de ces capteurs. Pose ensuite un verre d'eau tiède à côté ou souffle doucement sur les trois. Le DS18B20 et le BME280 réagissent en quelques secondes, tandis que la courbe du DHT22 traîne nettement derrière à cause de sa grille en plastique. Si le BME280 reste constamment quelques dixièmes au-dessus des autres, c'est l'auto-échauffement de la puce. Cette petite expérience te montre des différences qu'aucune fiche technique ne mentionne. Pour enregistrer les mesures sur une longue durée, tu peux utiliser un module carte SD ou envoyer les données vers Google Sheets.

Mesurer la température avec la Raspberry Pi Pico et MicroPython

Le firmware MicroPython de la Pico intègre déjà les modules dht, onewire et ds18x20 : pas besoin de copier de fichiers supplémentaires sur la Pico pour le DHT et le DS18B20. La puce RP2040 possède en plus un capteur de température interne relié au canal 4 du CAN. Le code ci-dessous lit les trois ensemble :

MicroPython
1from machine import Pin, ADC
2import dht, onewire, ds18x20, time
3
4dht22 = dht.DHT22(Pin(15))                          # DHT22 DATA -> GP15
5ds = ds18x20.DS18X20(onewire.OneWire(Pin(22)))      # DS18B20 DQ -> GP22 (4,7 kΩ pull-up)
6roms = ds.scan()                                    # hattaki sensörler / sensors on the bus
7cpu = ADC(4)                                        # RP2040 dahili sensörü / internal sensor
8
9def cpu_temp():
10    v = cpu.read_u16() * 3.3 / 65535                # ham değer -> volt / raw value -> volts
11    return 27 - (v - 0.706) / 0.001721              # RP2040 veri sayfası formülü / datasheet formula
12
13while True:
14    t_ds = None
15    if roms:
16        ds.convert_temp()                           # ölçümü başlat / start conversion
17        time.sleep_ms(750)                          # 12 bit dönüşüm süresi / 12-bit conversion time
18        t_ds = round(ds.read_temp(roms[0]), 2)
19    try:
20        dht22.measure()
21        t_dht, nem = dht22.temperature(), dht22.humidity()
22    except OSError:                                 # okuma hatası / read error
23        t_dht = nem = None
24    print("DS18B20:", t_ds, "DHT22:", t_dht, "Nem / RH:", nem,
25          "Pico:", round(cpu_temp(), 1))
26    time.sleep(2)

Le capteur interne mesure la température de la puce, pas celle de la pièce, et de petits écarts de la référence du CAN peuvent décaler le résultat de quelques degrés. Il ne sert donc pas à mesurer l'ambiance, mais il est pratique pour vérifier si la carte surchauffe. N'oublie pas la pull-up de 4,7 kΩ sur la ligne de données du DS18B20 ; les pull-up internes de la Pico sont trop faibles pour le 1-Wire. Si tu découvres la Pico, commence par Qu'est-ce que la Raspberry Pi Pico ?.

Quel capteur de température pour quel projet ?

Projet ou besoinCapteur conseilléPourquoi ?
Premier projet, thermomètre d'intérieurDHT11Le moins cher, donne aussi l'humidité ; ±2 °C suffit pour une pièce
Station météo intérieure et extérieureBME280 ou DHT22Descend à −40 °C et donne l'humidité ; le BME280 mesure aussi la pression et l'altitude
Aquarium, cuve d'eau, eau de chaudièreSonde étanche DS18B20Fourreau inox, ±0,5 °C, câble long
Réfrigérateur et congélateurDS18B20Mesure jusqu'à −55 °C ; le DHT11 ne voit rien sous zéro
Mesure en plusieurs points (pièces, serre, tuyauterie)DS18B20Des dizaines de capteurs sur une broche, chacun avec son adresse
CouveuseDHT22 ou BME280±0,5 °C autour de 37,5 °C et contrôle de l'humidité en même temps
Four, barbecue, fer à souderMAX6675 + thermocouple type KRésiste jusqu'à 1000 °C
Buse d'imprimante 3D, pack de batteriesThermistance NTCPetite, bon marché et rapide ; les imprimantes 3D utilisent des NTC 100 kΩ sous verre
Moteur, roulement, circuit imprimé, pièce mobileMLX90614Mesure sans contact
Apprendre le CAN et la mesure analogiqueLM35 ou NTCSans bibliothèque, fonctionne avec une formule

Idées de projets avec des capteurs de température

  • Serre intelligente : mesure la température et l'humidité de l'air avec un DHT22 et la température de la terre avec une sonde DS18B20 ; pilote le ventilateur et l'arrosage avec un module relais. Pour le projet complet, consulte le projet de serre intelligente.
  • Chauffage d'aquarium avec thermostat : maintiens l'eau entre 25 et 26 °C avec un DS18B20 étanche ; utilise une hystérésis de 0,5 °C pour que le relais ne commute pas à chaque petite variation.
  • Station météo sur piles : associe un BME280 au mode deep sleep de l'ESP32 et mesure toutes les dix minutes pour que le système tienne des mois sur piles.
  • Thermomètre de four à pizza ou de barbecue : affiche la température du four en grands chiffres sur un écran OLED avec un MAX6675 et une sonde type K.
  • Alarme de température moteur sans contact : surveille avec un MLX90614 la température de surface d'un moteur ou du plateau d'une imprimante 3D et déclenche un buzzer au-delà d'un seuil.
  • Domotique : envoie la température de chaque pièce à Home Assistant via MQTT avec un ESP32 et pilote le chauffage en fonction.
  • Gardien de congélateur : avec un DS18B20, déclenche une alarme si l'intérieur du congélateur dépasse −12 °C et affiche la valeur sur un écran LCD I2C.

Erreurs fréquentes et solutions

SymptômeCause probableSolution
DHT : nan ou "Failed to read from DHT sensor!"Mauvais type dans le code (DHT11/DHT22), pas de pull-up ou lectures trop fréquentesCorrige le type, ajoute une pull-up de 10 kΩ, attends 2 secondes entre les lectures
DS18B20 : −127 °CCapteur introuvable : pas de pull-up, câble défectueux ou mauvaise brochePlace 4,7 kΩ entre DQ et VCC, vérifie les connexions
DS18B20 : toujours 85 °CLu avant la fin de la conversion ou alimentation insuffisanteAttends le temps de conversion, alimente VDD directement
LM35 : valeur anormalement haute, le capteur chauffePattes d'alimentation inverséesCoupe tout de suite l'alimentation, corrige l'ordre des pattes
LM35 ou NTC : la valeur saute sans arrêtBruit du CAN, câble long, alimentation USB instableFais une moyenne, ajoute un condensateur de 0,1 µF, raccourcis le câble
NTC : la température baisse quand elle chauffeLe sens du pont ne correspond pas au codeInverse la formule de la résistance
BME280 : "Could not find a valid BME280 sensor"Mauvaise adresse (0x76/0x77) ou la puce est en fait un BMP280Change l'adresse, lis le chip ID (0x60 / 0x58)
BME280 ou DHT : 1–3 °C de tropAuto-échauffement, ESP32 ou régulateur à proximitéÉloigne le capteur de la carte, mesure moins souvent, applique un décalage
MAX6675 : nanThermocouple non branché ou fil coupéVérifie les bornes à vis et la sonde
MAX6675 : la valeur baisse quand ça chauffePolarité du thermocouple inverséeInverse les fils + et −
MLX90614 : le métal brillant paraît très froidFaible émissivitéColle du ruban noir mat ou règle l'émissivité
MLX90614 : petit objet mal mesuréChamp de vision plus grand que l'objetRapproche le capteur ou utilise une version à angle étroit
Quel que soit le capteur choisi, la plus grande source d'erreur n'est souvent pas le capteur lui-même mais son emplacement. Un capteur en plein soleil, collé à un régulateur de tension ou à un ESP32, ou enfermé dans une boîte close mesure la température de son propre environnement, pas celle de la pièce. Éloigne le capteur de la carte, place-le dans un endroit aéré, compare-le une fois avec un thermomètre de confiance et corrige l'écart constant dans le code. Pour lisser des valeurs qui tremblent, jette un œil aux méthodes de filtrage des données de capteurs.

En résumé : un DHT22 ou un BME280 pour les pièces et la météo, un DS18B20 pour l'eau et le froid, un LM35 ou une NTC pour apprendre la mesure analogique et obtenir une réponse rapide, un MAX6675 pour les hautes températures et un MLX90614 pour les surfaces que tu ne peux pas toucher sont les bons points de départ. Si tu veux découvrir d'autres types de capteurs, jette un œil au guide des capteurs Arduino. Dans l'application BlueGrays, tu trouveras des projets comme la mesure de température et d'humidité avec le DHT11, un thermomètre avec NTC et écran LCD, un afficheur de température avec ESP32, DHT22 et LCD, un enregistreur de température ESP32 et un arrosage intelligent, avec schéma de câblage et code pas à pas.

Questions fréquentes

Quel est le capteur de température le plus précis pour Arduino ?

Parmi les capteurs de loisir, les plus précis autour de la température ambiante sont le DS18B20, le DHT22, le BME280 (à 25 °C) et le MLX90614, tous à ±0,5 °C. Le DS18B20 se distingue pour les mesures filaires et étanches, le DHT22 ou le BME280 quand il te faut aussi l'humidité. Quel que soit ton choix, comparer une fois le capteur à un thermomètre fiable et corriger le décalage dans le code améliore nettement la précision.

DHT11 ou DHT22 : lequel acheter ?

Si tu veux seulement surveiller à peu près la température et l'humidité d'une pièce, le DHT11 suffit. Pour l'extérieur, les températures négatives ou une précision de ±0,5 °C, prends le DHT22 ; il mesure de −40 à +80 °C et donne aussi une humidité plus précise. Les deux fonctionnent avec la même bibliothèque et le même code ; tu changes seulement le type de capteur dans le programme.

Comment mesurer la température de l'eau avec Arduino ?

Le meilleur capteur pour l'eau est la sonde DS18B20 étanche en fourreau inox. Tu plonges la sonde dans l'eau et tu relies le fil de données à une broche numérique de l'Arduino avec une résistance de pull-up de 4,7 kΩ. Le câble et ses raccords ne sont généralement pas prévus pour rester longtemps dans l'eau chaude : ne plonge que l'embout en inox.

Peut-on mesurer de hautes températures comme 500 °C avec Arduino ?

Oui. Avec un thermocouple type K et un module MAX6675, tu peux mesurer de 0 à environ 1024 °C. L'extrémité du thermocouple va dans le four, tandis que le module MAX6675 doit rester loin de la chaleur. Vérifie toujours jusqu'à quelle température la gaine et le câble de ta sonde sont prévus.

Peut-on fabriquer un thermomètre sans contact avec Arduino ?

Avec un MLX90614, tu peux fabriquer un thermomètre infrarouge sans contact relié à un Arduino ; la version standard offre ±0,5 °C de précision autour de la température ambiante. Pour la température corporelle, il faut la version de précision médicale (±0,2 °C) et la bonne distance de mesure, et même ainsi ce montage ne remplace pas un dispositif médical. Lors de la mesure, veille à ce que la surface visée remplisse entièrement le champ de vision du capteur.

Pourquoi mon capteur de température affiche-t-il trop chaud ?

La cause la plus fréquente est une source de chaleur près du capteur : un ESP32, un régulateur de tension ou le soleil. Les capteurs comme le BME280 chauffent aussi un peu eux-mêmes lorsqu'ils mesurent en continu. Éloigne le capteur de 10–15 cm de la carte, mesure moins souvent et corrige dans le code l'écart constant restant après comparaison avec un thermomètre de confiance.

Voir tous les projets
Température et humidité avec DHT11
#55Intermédiaire

Température et humidité avec DHT11

Quelle température fait-il dans ta chambre, et l'air est-il humide ou sec ? Le capteur DHT11 mesure la température et l'humidité, et l'Arduino affiche les valeurs sur un écran LCD à deux lignes, mises

4.7(47)
73
Mesure de la température avec NTC et écran LCD 2x16
#44Débutant
Premium

Mesure de la température avec NTC et écran LCD 2x16

Mesure la température ambiante avec un capteur qui ressemble à une petite perle. Cette pièce, appelée NTC, laisse passer l'électricité de plus en plus facilement en chauffant ; l'Arduino lit ce change

4.5(33)
44
ESP32 DHT22 Température et humidité (avec écran LCD)
#117Intermédiaire

ESP32 DHT22 Température et humidité (avec écran LCD)

Il s'agit d'un projet permettant de mesurer la température ambiante et le taux d'humidité à l'aide d'un capteur DHT22 et d'afficher ces données en temps réel sur un écran LCD I2C 16x2. Les données du capteur sont lues à l'aide du protocole one-wire grâce à la bibliothèque Adafruit DHT. Ce projet constitue la base des stations météo IoT, de la domotique ou des systèmes de surveillance de l'environnement dans les serres.

4.8(38)
56
Enregistreur de Température ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
#144Avancé
Premium

Enregistreur de Température ESP32 (DHT22 + DS1307 RTC + microSD + OLED)

Construis un enregistreur de température horodaté avec ESP32 ! Lis la température/humidité du DHT22 chaque minute, obtiens l'heure réelle du DS1307 RTC et enregistre sur carte microSD au format CSV. L'OLED affiche en direct la température (grande police), le pourcentage d'humidité, l'horodatage et le compteur. Le fichier /temp_log.csv sur la carte SD s'ouvre dans Excel, Google Sheets ou Python pandas pour analyse — parfait pour surveillance de serre, suivi de température à domicile, c

4.7(7)
12
Horloge matricielle, calendrier et station météo (MAX7219, DS1307)
#85Intermédiaire
Premium

Horloge matricielle, calendrier et station météo (MAX7219, DS1307)

Un panneau à texte défilant pour ton bureau ou ton mur, qui affiche tour à tour l'heure, la date et la météo de la pièce. Sur l'écran LED 8x32 apparaissent d'abord la température en Celsius et en Fahr

5.0(50)
66
Station d'irrigation intelligente
#83Avancé
Premium

Station d'irrigation intelligente

Un jardinier qui arrose tes plantes tout seul pour qu'elles ne sèchent pas pendant tes vacances. Un capteur d'humidité mesure à quel point la terre est mouillée ; quand elle devient sèche, l'Arduino f

5.0(42)
57
Utilisation de l'écran LCD avec I2C
#32Débutant
Premium

Utilisation de l'écran LCD avec I2C

Offre un écran à ton Arduino et fais-lui écrire son premier message. L'écran LCD à deux lignes se branche avec seulement quelques fils ; un bonjour s'affiche sur la ligne du haut, puis un deuxième tex

4.8(53)
70