DHT11 contre DHT22 contre LM35 contre DS18B20 contre BME280 contre BMP180

DHT11 contre DHT22 contre LM35 contre DS18B20 contre BME280 contre BMP180

Il existe une grande variété de capteurs de température compatibles avec Arduino, ESP32, ESP8266 et d’autres cartes de développement. Ainsi, il peut être difficile de choisir le capteur le plus adapté à votre projet. Dans cet article, nous comparerons 6 capteurs de température largement utilisés : DHT11, DHT22, LM35, DS18B20, BME280 et BMP180.

Capteurs de température DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180

Nous comparerons les capteurs en ce qui concerne le protocole de communication, la plage de température, la précision, la facilité d’utilisation et bien plus encore.

Nous menons également une expérience simple dans laquelle nous mesurons 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 loin dans cet article.

Lecture recommandée: 9 capteurs de température compatibles 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 rassemblé le tableau suivant qui présente les informations les plus importantes lorsqu’il s’agit de sélectionner un capteur de température à savoir : protocole de communication, tension d’alimentation, plage de température et précision.

Noter: le tableau défile horizontalement à la fois sur ordinateur de bureau, tablette et mobile.

DHT11 contre DHT22 (AM2302)

Capteur de température et d'humidité DHT11 vs DHT22

le 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 manière, mais ont des spécifications différentes.

Les deux capteurs peuvent être alimentés en 3,3V ou 5V. Ainsi, vous pouvez 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, c’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 portée plus petite et il est moins précis. Mais vous pouvez obtenir des lectures de 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é. Il vous suffit de sélectionner dans le code le type de capteur que vous utilisez.

Donc, si vous êtes prêt à dépenser un dollar de plus, nous vous recommandons le DHT22 sur le DHT11.

Nous avons plusieurs guides sur la façon d’utiliser les capteurs DHT11 et DHT22 :

LM35, LM335 et LM34

Capteur de température analogique LM35 LM335 et LM34

le LM35, LM335 et LM34 sont des capteurs de température linéaires qui délivrent une tension proportionnelle à la valeur de la température. Le LM35 est 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 peut être plus pratique que l’autre.

Nous vous recommandons d’utiliser le LM35 ou LM34 au lieu du LM335, car soustraire un grand nombre aux mesures du LM335 pour convertir la température de 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 très faible auto-échauffement (environ 0,08 °C dans l’air calme), 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 vous suffit de lire la tension de sortie du capteur à l’aide d’une broche analogique. Si vous utilisez un Arduino, il vous suffit d’utiliser le analogRead() fonction 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, parce qu’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 :

Capteur de température DS18B20

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 seule ligne de données (et GND) pour communiquer avec vos microcontrôleurs.

Il peut être alimenté par une alimentation externe ou il peut être alimenté par la ligne de données (appelé « mode parasite »), ce qui élimine le besoin d’une alimentation externe.

Chaque capteur de température DS18B20 possède un code série 64 bits unique. Cela vous permet de câbler plusieurs capteurs au même câble de données. Ainsi, vous pouvez obtenir la température de plusieurs capteurs à l’aide d’un seul GPIO.

De plus, 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éal pour les projets extérieurs ou pour mesurer la température d’un liquide.

Capteur de température étanche DS18B20

Vous pouvez suivre nos guides pour apprendre à utiliser le capteur de température DS18B20 avec les ESP32, ESP8266 et Arduino en utilisant Arduino IDE ou MicroPython :

BME280 contre BMP180

BME280 vs BMP180 Capteur barométrique : température, humidité et pression

le 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’humidité, et le BMP180 d’un capteur de température. Étant donné que 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 : de -40 à 85 °C, tandis que le BMP180 ne mesure que de 0 à 65 °C. Vous devez garder à l’esprit que le module BME280 s’auto-chauffe un peu, donc les mesures de température peuvent être de 1 ou 2 degrés au-dessus de la valeur réelle de la température.

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 créer un projet de station météo avec uniquement ce capteur. Mais si vous n’êtes pas intéressé par la mesure de la pression ou de l’humidité, vous pouvez vous procurer un capteur de température moins cher.

L’interfaçage de ces capteurs avec Arduino, ESP8266 et ESP32 est très simple grâce aux librairies Adafruit.

Vous pouvez utiliser nos guides pour apprendre à utiliser ces capteurs :

Nous avons également d’autres projets avec le BME280 qui pourraient vous plaire :

Test de 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.

Test de tous les capteurs de température DHT11 DHT22 LM35 DS18B20 BME280 BMP180 avec Arduino

Nous avons câblé tous les capteurs de température suivants à un Arduino méga:

Les données ont été enregistrées sur une carte microSD à l’aide d’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: Broche 11
  • DHT22: Broche 12
  • DS18B20: Broche 14
  • LM35: Broche A0
  • BME280: SPI logiciel sur ces broches : Pin 4 (MISO), Pin 5 (CS), Pin 6 (SCK), Pin 7 (MOSI)
  • BMP180: Broche 20 (SDA) et Broche 21 (CSL)

Le module de carte microSD était connecté via le SPI matériel : Pin 51 (MOSI), Pin 50 (MISO), Pin 52 (SCK), Pin 53 (CS).

C’est le code qui s’exécute dans l’Arduino Mega.

/*
 * Rui Santos
 * Complete Project Details https://Raspberryme.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 card

const 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);
}

Afficher le code brut

Noter: Afin de compiler et d’exécuter ce code, vous devez installer dans votre IDE Arduino 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 sur une feuille de calcul. Nous avons tracé toutes les lectures pour mieux comparer les mesures des différents capteurs de température.

Résultats en degrés Celsius Capteurs de température DHT11 DHT22 LM35 DS18B20 BME280 BMP180 avec Arduino
Température en degrés Celsius (ºC)
Résultats en degrés Fahrenheit Capteurs de température DHT11 DHT22 LM35 DS18B20 BME280 BMP180 avec Arduino
Température en degrés Fahrenheit (ºF)

Ce graphique 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 du comportement de ces capteurs.

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 est décrit dans la fiche technique. Le module s’auto-chauffe un peu et les mesures de température peuvent être de 1 ou 2 degrés au-dessus de la valeur réelle de la température.

Cependant, le BME280 est également le capteur de température qui a donné des lectures de température plus stables sans beaucoup d’oscillations entre les lectures. Cela a à voir avec 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 des oscillations entre les lectures et on remarque également que la résolution n’est pas aussi bonne que celle du BME280. De plus, le capteur de température DS18B20 était le seul à donner des lectures « nulles » tout au long de l’expérience. Nous avons mesuré deux capteurs de température DS18B20 dans 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 n’a pas pu 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 de nombreuses oscillations entre les mesures.

Ce graphique comparant les différents capteurs de température montre clairement en quoi chaque capteur diffère des autres. Il est plus facile de comprendre comment ils fonctionnent et s’ils seront adaptés aux projets que vous souhaitez construire.

Conclusion

Dans cet article, nous avons comparé plusieurs capteurs de température que vous pouvez utiliser avec les cartes ESP32, ESP8266, Arduino et autres. Ces capteurs mesurent tous la température, mais ils se comportent différemment lorsqu’ils sont testés dans le même environnement en même temps.

Nous espérons que vous avez trouvé cet article utile et qu’il vous aide à choisir le meilleur capteur de température pour les exigences de votre projet.

Vous aimerez peut-être aussi lire :

S’il y a un autre capteur que vous aimeriez voir dans cette comparaison, postez un commentaire ci-dessous.

Merci d’avoir lu.