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.





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.
| Capteur | Plage de mesure | Précision | Résolution | Vitesse de lecture |
|---|---|---|---|---|
| DHT11 | 0 … +50 °C | ±2 °C | 1 °C | 1 par seconde |
| DHT22 (AM2302) | −40 … +80 °C | ±0,5 °C | 0,1 °C | 1 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) |
| LM35DZ | 0 … +100 °C (LM35 : −55 … +150 °C) | Typique ±0,6 °C, garantie ±1,5 °C | 0,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'Uno | Instantanée (vitesse du CAN) |
| BME280 | −40 … +85 °C | ±0,5 °C (25 °C), ±1 °C (0 … 65 °C) | 0,01 °C | Des dizaines par seconde |
| MAX6675 + thermocouple type K | 0 … +1023,75 °C | Quelques °C (convertisseur ≈ ±2 °C, soudure froide jusqu'à ±3 °C) | 0,25 °C | ≈ 4 par seconde (conversion de 0,22 s) |
| MLX90614 | Objet −70 … +380 °C, ambiante −40 … +125 °C | ±0,5 °C (autour de l'ambiante) | 0,02 °C | Plusieurs fois par seconde |
| Capteur | Interface | Alimentation | Longueur de câble | Mesure en plus | Prix relatif |
|---|---|---|---|---|---|
| DHT11 | Numérique à un fil, 1 broche | 3–5,5 V | Jusqu'à 20 m | Humidité | Très bas |
| DHT22 | Numérique à un fil, 1 broche | 3,3–6 V | Jusqu'à 20 m | Humidité | Moyen |
| DS18B20 | 1-Wire, plusieurs capteurs sur 1 broche | 3,0–5,5 V | Des dizaines de mètres | Aucune | Bas |
| LM35 | Analogique, 1 broche du CAN | 4–30 V | Courte, ≈ 1 m (au-delà, précautions nécessaires) | Aucune | Bas |
| NTC | Analogique, 1 broche du CAN via un pont diviseur | 3,3 ou 5 V via le pont | Quelques mètres | Aucune | Le plus bas |
| BME280 | I2C (2 broches) ou SPI | Puce 1,71–3,6 V ; module avec régulateur 5 V | Courte, moins de 50 cm | Humidité et pression | Moyen |
| MAX6675 | SPI, 3 broches (lecture seule) | 3,0–5,5 V | Le fil du thermocouple peut faire plusieurs mètres | Aucune | Moyen |
| MLX90614 | I2C (SMBus), 2 broches | Version 3 V ou 5 V (le module peut avoir un régulateur) | Courte (I2C) ; mesure sans contact | Température ambiante | Élevé |
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.
DS18B20 : étanche, robuste et plusieurs capteurs sur une broche

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.
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.
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 ?.
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 :
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}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 :
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}Récapitulatif du câblage : Arduino Uno, ESP32 et Raspberry Pi Pico
| Capteur et broche | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| DHT11 / DHT22 : DATA | D2 | GPIO 27 | GP15 |
| DS18B20 : DQ (+ pull-up 4,7 kΩ) | D3 | GPIO 4 | GP22 |
| LM35 : Vout (alimentation 5 V) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| NTC : point milieu du pont | A1 (pont sur 5V) | GPIO 35 (ADC1, pont sur 3V3) | GP27 (ADC1, pont sur 3V3) |
| BME280 : SDA / SCL | A4 / A5 | GPIO 21 / 22 | GP4 / GP5 |
| MLX90614 : SDA / SCL | A4 / A5 (même bus I2C) | GPIO 21 / 22 | GP4 / GP5 |
| MAX6675 : SO / CS / SCK | D4 / D5 / D6 | GPIO 19 / 23 / 18 | GP16 / 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.
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 :
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 besoin | Capteur conseillé | Pourquoi ? |
|---|---|---|
| Premier projet, thermomètre d'intérieur | DHT11 | Le moins cher, donne aussi l'humidité ; ±2 °C suffit pour une pièce |
| Station météo intérieure et extérieure | BME280 ou DHT22 | Descend à −40 °C et donne l'humidité ; le BME280 mesure aussi la pression et l'altitude |
| Aquarium, cuve d'eau, eau de chaudière | Sonde étanche DS18B20 | Fourreau inox, ±0,5 °C, câble long |
| Réfrigérateur et congélateur | DS18B20 | Mesure jusqu'à −55 °C ; le DHT11 ne voit rien sous zéro |
| Mesure en plusieurs points (pièces, serre, tuyauterie) | DS18B20 | Des dizaines de capteurs sur une broche, chacun avec son adresse |
| Couveuse | DHT22 ou BME280 | ±0,5 °C autour de 37,5 °C et contrôle de l'humidité en même temps |
| Four, barbecue, fer à souder | MAX6675 + thermocouple type K | Résiste jusqu'à 1000 °C |
| Buse d'imprimante 3D, pack de batteries | Thermistance NTC | Petite, bon marché et rapide ; les imprimantes 3D utilisent des NTC 100 kΩ sous verre |
| Moteur, roulement, circuit imprimé, pièce mobile | MLX90614 | Mesure sans contact |
| Apprendre le CAN et la mesure analogique | LM35 ou NTC | Sans 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ôme | Cause probable | Solution |
|---|---|---|
| DHT : nan ou "Failed to read from DHT sensor!" | Mauvais type dans le code (DHT11/DHT22), pas de pull-up ou lectures trop fréquentes | Corrige le type, ajoute une pull-up de 10 kΩ, attends 2 secondes entre les lectures |
| DS18B20 : −127 °C | Capteur introuvable : pas de pull-up, câble défectueux ou mauvaise broche | Place 4,7 kΩ entre DQ et VCC, vérifie les connexions |
| DS18B20 : toujours 85 °C | Lu avant la fin de la conversion ou alimentation insuffisante | Attends le temps de conversion, alimente VDD directement |
| LM35 : valeur anormalement haute, le capteur chauffe | Pattes d'alimentation inversées | Coupe tout de suite l'alimentation, corrige l'ordre des pattes |
| LM35 ou NTC : la valeur saute sans arrêt | Bruit du CAN, câble long, alimentation USB instable | Fais une moyenne, ajoute un condensateur de 0,1 µF, raccourcis le câble |
| NTC : la température baisse quand elle chauffe | Le sens du pont ne correspond pas au code | Inverse 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 BMP280 | Change l'adresse, lis le chip ID (0x60 / 0x58) |
| BME280 ou DHT : 1–3 °C de trop | Auto-échauffement, ESP32 ou régulateur à proximité | Éloigne le capteur de la carte, mesure moins souvent, applique un décalage |
| MAX6675 : nan | Thermocouple non branché ou fil coupé | Vérifie les bornes à vis et la sonde |
| MAX6675 : la valeur baisse quand ça chauffe | Polarité du thermocouple inversée | Inverse les fils + et − |
| MLX90614 : le métal brillant paraît très froid | Faible émissivité | Colle du ruban noir mat ou règle l'émissivité |
| MLX90614 : petit objet mal mesuré | Champ de vision plus grand que l'objet | Rapproche le capteur ou utilise une version à angle étroit |
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.
Projets à réaliser après cet article
Voir tous les projets
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

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

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.

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

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

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

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
Autres articles
Application BlueGrays
Réalise ce montage pas à pas sur ton téléphone
Schéma, code et liste des composants sur un seul écran. Plus de 200 projets Arduino, ESP32 et Pico à réaliser.
Scanne avec ton téléphone
Pointe l’appareil photo vers le code : la boutique d’applications de ton téléphone s’ouvre.
ou ouvre la boutique

