Il existe une grande variété de capteurs de température compatibles avec Arduino, ESP32, ESP8266 et autres cartes de développement. Il peut donc être difficile de choisir le capteur le plus adapté à votre projet. Dans cet article, nous allons comparer 6 capteurs de température largement utilisés : DHT11, DHT22, LM35, DS18B20, BME280 et BMP180.
Nous comparerons les capteurs en matière de protocole de communication, de plage de température, de précision, de facilité d’utilisation et bien plus encore.
Nous réalisons également une expérience simple dans laquelle nous avons mesuré la température dans le même environnement en utilisant tous les capteurs de température au fil du temps. Avec cette expérience, nous avons pu voir comment les capteurs réagissent aux changements de température. Nous avons mené cette expérience pendant environ 36 heures et nous vous montrerons les résultats plus tard dans cet article.
Lecture recommandée : 9 Capteurs de température compatibles avec Arduino pour vos projets électroniques
Comparaison des capteurs de température : DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180
Pour une comparaison rapide des capteurs, nous avons établi le tableau suivant qui indique les informations les plus importantes lorsqu’il s’agit de choisir un capteur de température à savoir : le protocole de communication, la tension d’alimentation, la plage de température et la précision.
Note : le tableau défile horizontalement à la fois sur l’ordinateur de bureau, la tablette et le mobile.
Sensor | DHT11 | DHT22 (AM2302) | LM35 | DS18B20 | BME280 | BMP180 |
Mesures | Température Humidité |
Température Humidité |
Température | Temperature | Temperature Humidité Pression |
Temperature Pression |
Communication protocole |
Une-fil | Un fil | Analogique | Un fil | I2C SPI |
I2C |
Alimentation tension |
3 à 5.5V DC | 3 à 6V DC | 4 à 30 V DC | 3 à 5,5V DC | 1,7 à 3,6V (pour la puce) 3,3 à 5V pour la carte | 1,8 à 3,6V (pour la puce) 3.3 à 5V pour la carte |
Température gamme |
0 à 50ºC | -40 à 80ºC | -55 à 150ºC | -55 à 125ºC | -40 à 85ºC | 0 à 65ºC |
Exactitude | +/- 2ºC (de 0 à 50ºC) | +/- 0.5ºC (de -40 à 80ºC) | +/-0.5ºC (à 25ºC) | +/-0.5ºC (de -10 à 85ºC) | +/-0.5ºC (à 25ºC) | +/-0.5ºC (à 25ºC) |
Support (Arduino IDE) |
La bibliothèque DHT d’Adafruit La bibliothèque unifiée de capteurs d’Adafruit |
. Adafruit DHT Library Adafruit Unified Sensor Library |
analogRead() | DallasTemperature OneWire |
Adafruit BME280 library Bibliothèque de capteurs unifiée d’Adafruit |
BME085 d’Adafruit Bibliothèque de capteurs unifiée d’Adafruit |
Support (MicroPython) |
Module dht (inclus dans le firmware MicroPython) | Module dht (inclus dans le firmware MicroPython) | from machine import ADC ADC().read |
module ds18b20 (inclus dans le firmware MicroPython) | BME280 Adafruit Library | Module BMP180 |
Où acheter ? | Vérifier les prix | Vérifier les prix | Vérifier les prix | Vérifier les prix Vérifier les prix (étanche) |
Vérifier les prix | Vérifier les prix |
DHT11 vs DHT22 (AM2302)
Les DHT11 et DHT22 (AM2302) sont des capteurs de température numériques qui mesurent la température et l’humidité. Ils se ressemblent beaucoup et fonctionnent de la même façon, mais ont des spécifications différentes.
Les deux capteurs peuvent être alimentés soit avec 3,3V soit avec 5V. Vous pouvez donc facilement les utiliser dans vos projets Arduino ou ESP.
Le capteur DHT22 a une meilleure résolution et une plage de mesure de température et d’humidité plus large. Cependant, il est un peu plus cher et vous ne pouvez demander des lectures qu’avec un intervalle de 2 secondes.
Le DHT11 est légèrement moins cher, il a une gamme plus petite, et il est moins précis. Mais vous pouvez obtenir des lectures du capteur toutes les secondes.
Malgré leurs différences, ils fonctionnent de manière similaire, et vous pouvez utiliser le même code pour lire la température et l’humidité. Vous devez juste sélectionner dans le code le type de capteur que vous utilisez.
Donc, si vous êtes prêt à dépenser un dollar supplémentaire, nous recommandons le DHT22 plutôt que le DHT11.
Nous avons plusieurs guides sur la façon d’utiliser les capteurs DHT11 et DHT22 :
- ESP32 (Arduino IDE) avec capteur de température et d’humidité DHT11/DHT22
- ESP8266 (Arduino IDE) DHT11/DHT22 température et humidité Web. Server
- Arduino avec DHT11/DHT22 Capteur d’humidité et de température
- ESP32/ESP8266 (MicroPython) avec DHT11/DHT22 Web Server
LM35, LM335 et LM34
Les LM35, LM335 et LM34 sont des capteurs de température linéaires qui sortent une tension proportionnelle à la valeur de température. Le LM35 est livré calibré en degrés Celsius, le LM335 en Kelvin et le LM34 en Fahrenheit. Ainsi, selon les unités de température que vous utiliserez dans votre projet, l’un de ces capteurs pourrait être plus pratique que l’autre.
Nous recommandons d’utiliser le LM35 ou le LM34 plutôt que le LM335, car soustraire un grand nombre aux mesures du LM335 pour convertir la température en Kelvin peut compromettre la précision des résultats.
Selon la fiche technique, les capteurs LM35 et LM34 nécessitent très peu de courant pour fonctionner, environ 60uA. Il en résulte un auto-échauffement très faible (environ 0,08ºC dans l’air immobile), ce qui signifie que les mesures de température ne seront pas affectées par le capteur lui-même.
Pour lire la température de ces capteurs, il suffit de lire la tension de sortie du capteur en utilisant une broche analogique. Si vous utilisez un Arduino, il vous suffit d’utiliser la fonction analogRead() et vous obtiendrez des lectures de température avec deux points décimaux.
Donc, si vous avez besoin d’un capteur bon marché et facile à utiliser pour surveiller la température, le LM35 peut être une bonne option. De plus, comme il consomme très peu d’énergie, il est idéal pour les projets portables, où une faible consommation d’énergie est requise.
Apprenez à utiliser les capteurs de température LM35, LM335 et LM34 avec Arduino:
- Guide pour les capteurs de température LM35, LM335 et LM34 avec Arduino
Capteur de température DS18B20
Le capteur de température DS18B20 est un capteur de température numérique à un fil. Cela signifie qu’il ne nécessite qu’une ligne de données (et GND) pour communiquer avec vos microcontrôleurs.
Il peut être alimenté par une alimentation externe ou il peut dériver l’alimentation de la ligne de données (appelé « mode parasite »), ce qui élimine le besoin d’une alimentation externe.
Chaque capteur de température DS18B20 a un code série unique de 64 bits. Cela vous permet de câbler plusieurs capteurs sur le même fil de données. Ainsi, vous pouvez obtenir la température de plusieurs capteurs en utilisant un seul GPIO.
En outre, la résolution du capteur de température peut être réglée sur 9, 10, 11 ou 12 bits, ce qui correspond à des incréments de 0,5°C, 0,25°C, 0,125°C et 0,0625°C, respectivement. La résolution par défaut à la mise sous tension est de 12 bits.
Le capteur de température DS18B20 est également disponible en version étanche, idéale pour les projets en extérieur ou pour mesurer la température des liquides.
Vous pouvez suivre nos guides pour apprendre à utiliser le capteur de température DS18B20 avec l’ESP32, l’ESP8266 et Arduino en utilisant l’IDE Arduino ou MicroPython :
- ESP32 (Arduino IDE) Capteur de température DS18B20 (simple, multiple, serveur Web)
- ESP8266 (Arduino IDE) Capteur de température DS18B20 (simple, multiple, Web Server)
- ESP32 et ESP8266 (MicroPython) avec capteur de température DS18B20
- Arduino avec capteur de température DS18B20
BME280 vs BMP180
Les BME280 et BMP180 sont des capteurs barométriques, ce qui signifie qu’ils lisent la pression atmosphérique. Le BME280 est également équipé d’un capteur de température et d’un capteur d’humidité, et le BMP180 d’un capteur de température. Comme la pression change avec l’altitude, ces capteurs peuvent également être utilisés pour estimer l’altitude.
En ce qui concerne la plage de température, le BME280 a une plage de mesure plus large : -40 à 85ºC, tandis que le BMP180 mesure juste de 0 à 65ºC. Vous devez garder à l’esprit que le module BME280 s’auto-chauffe un peu, de sorte que les mesures de température peuvent être 1 ou 2 degrés au-dessus de la valeur de température réelle.
Le BME280 peut utiliser le protocole de communication I2C ou SPI, tandis que le BMP180 ne peut utiliser que la communication I2C.
Le capteur BME280 est plus cher mais il a plus de fonctionnalités. Par exemple, vous pouvez construire un projet de station météo avec seulement ce capteur. Mais si vous n’êtes pas intéressé par la mesure de la pression ou de l’humidité, vous pouvez obtenir un capteur de température moins cher.
L’interfaçage de ces capteurs avec Arduino, ESP8266 et ESP32 est très facile grâce aux bibliothèques Adafruit.
Vous pouvez utiliser nos guides pour apprendre à utiliser ces capteurs :
- BMP180:
- Arduino avec capteur barométrique BMP180
- ESP32 (Arduino IDE) avec capteur barométrique BMP180
- BME280 :
- ESP32 (Arduino IDE) avec capteur BME280 (Pression, Température, Humidité)
- ESP8266 (Arduino IDE) avec BME280 (Pression, Température, Humidité)
- Arduino avec capteur BME280(Pression, Température, Humidité)
Nous avons également d’autres projets avec le BME280 qui pourraient vous intéresser :
- Enregistreur de données de station météo à faible puissance utilisant l’ESP8266 et le BME280 avec MicroPython
- Serveur Web EPS32 avec BME280 – Mini station météo
- ESP32/ESP8266 Insérer des données dans une base de données MySQL en utilisant PHP et Arduino IDE
Tester tous les capteurs de température
Cette expérience a enregistré les lectures de température de différents capteurs de température au fil du temps dans les mêmes conditions.
Nous avons câblé tous les capteurs de température suivants à un Arduino Mega :
- DHT11
- DHT22
- LM35
- 2x DS18B20 dans le même bus de données
- BME280
- BMP180
Les données ont été enregistrées sur une carte microSD en utilisant un module de carte microSD. L’expérience a duré environ 36 heures et les lectures de température ont été enregistrées toutes les 5 minutes.
Nous avons câblé les broches de données des capteurs de température aux broches suivantes sur Arduino Mega:
- DHT11 : Pin 11
- DHT22 : Pin 12
- DS18B20 : Pin 14
- LM35 : Pin A0
- BME280 : logiciel SPI sur ces broches : Pin 4 (MISO), Pin 5 (CS), Pin 6 (SCK), Pin 7 (MOSI)
- BMP180 : Pin 20 (SDA) et Pin 21 (CSL)
Le module de carte microSD a été connecté via le SPI matériel : Pin 51 (MOSI), Pin 50 (MISO), Pin 52 (SCK), Pin 53 (CS).
Voici le code s’exécutant dans l’Arduino Mega.
/* * Rui Santos * Complete Project Details https://RandomNerdTutorials.com */#include "DHT.h"#include <OneWire.h>#include <DallasTemperature.h>#include <Wire.h>#include <SPI.h>#include <Adafruit_Sensor.h>#include <Adafruit_BME280.h>#include <Wire.h>#include <Adafruit_BMP085.h>#include <SD.h> // for the SD cardconst int DHT11sensorPin = 11; const int DHT22sensorPin = 12; DHT dht11(DHT11sensorPin, DHT11);DHT dht22(DHT22sensorPin, DHT22);float DHT11temperature;float DHT22temperature;const int DS18B20sensorPin = 14;OneWire oneWire(DS18B20sensorPin);DallasTemperature ds18b20(&oneWire);float DS18B20temperature1;float DS18B20temperature2;const int BME_SCK = 6;const int BME_MISO = 4;const int BME_MOSI = 7;const int BME_CS = 5;Adafruit_BME280 bme280(BME_CS, BME_MOSI, BME_MISO, BME_SCK);Adafruit_BMP085 bmp180; const int LM35sensorPin = A0; float LM35sensorValue;float LM35voltageOut;float LM35temperature;const int chipSelectSDCard = 53; File myFile;void setup() { Serial.begin(9600); dht11.begin(); delay(2000); dht22.begin(); ds18b20.begin(); bme280.begin(); bmp180.begin(); pinMode(LM35sensorPin, INPUT); if(!SD.begin(chipSelectSDCard)) { Serial.println("SD card initialization failed!"); return; } Serial.println("SD card initialization done."); myFile=SD.open("DATA.txt", FILE_WRITE); if (myFile) { Serial.println("File opened ok"); // print the headings for our data myFile.println("DHT11,DHT22,DS18B20-1,DS18B20-2,BME280,BMP180,LM35"); } myFile.close(); }void loop() { /*-------------------------------------------------------*/ //DHT11 DHT11temperature = dht11.readTemperature(); if (isnan(DHT11temperature)) { Serial.println("Failed to read from DHT11 sensor!"); return; } Serial.print("Temperature DHT11(ºC): "); Serial.println(DHT11temperature); /*-------------------------------------------------------*/ //DHT22 DHT22temperature = dht22.readTemperature(); if (isnan(DHT22temperature)) { Serial.println("Failed to read from DHT22 sensor!"); return; } Serial.print("Temperature DHT22(ºC): "); Serial.println(DHT22temperature);/*-------------------------------------------------*/ //DS18B20 ds18b20.requestTemperatures(); DS18B20temperature1 = ds18b20.getTempCByIndex(0); DS18B20temperature2 = ds18b20.getTempCByIndex(1); Serial.print("Temperature DS18B20-1(ºC): "); Serial.println(DS18B20temperature1); Serial.print("Temperature DS18B20-2(ºC): "); Serial.println(DS18B20temperature2);/*-------------------------------------------------*///BME280 Serial.print("Temperature BME280(ºC): "); Serial.println(bme280.readTemperature());/*-------------------------------------------------*///BMP180 Serial.print("Temperature BMP180(ºC): "); Serial.println(bmp180.readTemperature());/*-------------------------------------------------*/ //LM35 SENSOR LM35sensorValue = analogRead(LM35sensorPin); LM35voltageOut = (LM35sensorValue * 5000) / 1024; // calculate temperature for LM35 (LM35DZ) LM35temperature = LM35voltageOut / 10; Serial.print("Temperature LM35(ºC): "); Serial.println(LM35temperature); Serial.println(""); myFile = SD.open("DATA.txt", FILE_WRITE); if (myFile) { Serial.println("File open with success"); myFile.print(DHT11temperature); myFile.print(","); myFile.print(DHT22temperature); myFile.print(","); myFile.print(DS18B20temperature1); myFile.print(","); myFile.print(DS18B20temperature2); myFile.print(","); myFile.print(bme280.readTemperature()); myFile.print(","); myFile.print(bmp180.readTemperature()); myFile.print(","); myFile.print(LM35temperature); myFile.println(","); } myFile.close(); delay(6000);}
Voir le code brut
Note : pour compiler et exécuter ce code, vous devez installer dans votre Arduino IDE toutes les bibliothèques de capteurs mentionnées dans le tableau de comparaison au début de cet article.
Résultats : Comparaison des relevés de température
Après environ 36 heures, nous avons retiré la carte microSD et copié les résultats dans une feuille de calcul. Nous avons tracé toutes les lectures pour mieux comparer les mesures des différents capteurs de température.
Ce tableau n’a pas de groupe de contrôle (nous n’avons pas utilisé de capteur de température calibré), mais nous avons une idée sur la façon dont ces capteurs se comportent.
Si vous regardez de plus près les graphiques, le BME280 a mesuré des valeurs légèrement plus élevées que les autres capteurs de température. Ce comportement est normal, et cela est décrit dans la fiche technique. Le module s’auto-chauffe un peu et les mesures de température peuvent être 1 ou 2 degrés au-dessus de la valeur de température réelle.
Cependant, le BME280 est aussi le capteur de température qui a donné des lectures de température plus stables, sans beaucoup d’oscillations entre les lectures. Cela est lié à la résolution du capteur. Il peut détecter des changements jusqu’à 0,01ºC.
Dans le cas des capteurs de température DS18B20, nous pouvons voir quelques oscillations entre les lectures et il est également notable que la résolution n’est pas aussi bonne que celle du BME280. De plus, le capteur de température DS18B20 a été le seul à donner des lectures « nulles » tout au long de l’expérience. Nous avons mesuré deux capteurs de température DS18B20 sur la même ligne de données et l’un des capteurs n’a pas réussi à lire la température 6 fois tout au long de l’expérience (pendant 36 heures).
Le DHT22 et le BMP180 se comportent de manière très similaire avec peu d’oscillations. Le DHT11 ne pouvait pas détecter de petits changements de température, car sa résolution est de 1ºC.
Enfin, le capteur de température LM35 a détecté des changements de température entre 24ºC et 26ºC mais avec beaucoup d’oscillations entre les mesures.
Ce tableau comparant les différents capteurs de température montre clairement comment chaque capteur diffère des autres. Il est plus facile de comprendre comment ils fonctionnent et s’ils conviendront aux projets que vous voulez construire.
Wrapping Up
Dans cet article, nous avons comparé plusieurs capteurs de température que vous pouvez utiliser avec l’ESP32, l’ESP8266, l’Arduino et d’autres cartes de développement. Ces capteurs mesurent tous la température mais ils se comportent différemment lorsqu’ils sont mis à l’épreuve dans le même environnement au même moment.
Nous espérons que cet article vous a été utile et qu’il vous aidera à choisir le meilleur capteur de température pour les besoins de votre projet.
Vous pourriez également aimer lire :
- 9 Capteurs de température compatibles avec Arduino pour vos projets électroniques
- ESP32/ESP8266 Tracer les lectures des capteurs dans des graphiques en temps réel
- S’inscrire à nos cours d’électronique et à notre livre électronique
.