DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180

Există o mare varietate de senzori de temperatură compatibili cu Arduino, ESP32, ESP8266 și alte plăci de dezvoltare. Așadar, poate fi dificil să alegeți cel mai potrivit senzor pentru proiectul dvs. În acest articol, vom compara 6 senzori de temperatură utilizați pe scară largă: DHT11, DHT22, LM35, DS18B20, BME280 și BMP180.

DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180 Senzori de temperatură

Vom compara senzorii atunci când vine vorba de protocolul de comunicare, intervalul de temperatură, acuratețea, ușurința de utilizare și multe altele.

De asemenea, vom realiza un experiment simplu în care am măsurat temperatura în același mediu folosind toți senzorii de temperatură în timp. Prin acest experiment am putut vedea cum reacționează senzorii la schimbările de temperatură. Am rulat acest experiment timp de aproximativ 36 de ore și vă vom arăta rezultatele mai târziu în acest articol.

Lectura recomandată: 9 senzori de temperatură compatibili cu Arduino pentru proiectele dvs. electronice

Compararea senzorilor de temperatură: DHT11 vs DHT22 vs LM35 vs DS18B20 vs DS18B20 vs BME280 vs BMP180

Pentru o comparație rapidă a senzorilor, am alcătuit următorul tabel care prezintă cele mai importante informații atunci când vine vorba de selectarea unui senzor de temperatură și anume: protocolul de comunicare, tensiunea de alimentare, intervalul de temperatură și precizia.

Nota: tabelul se derulează orizontal atât pe computerul desktop, cât și pe tabletă și mobil.

.

Senzor DHT11 DHT22 (AM2302) LM35 DS18B20 BME280 BMP180
Măsuri Temperatură
Humiditate
Temperatură
Humiditate
Temperatură Temperatură Temperatură Temperatură
Humiditate
Presiune
Temperatură
Presiune
Comunicare
protocol
Unul-fir Cu un singur fir Analogic Cu un singur fir I2C
SPI
I2C
Alimentare
tensiune
3 până la 5.5V DC 3 până la 6V DC 4 până la 30 V DC 3 până la 5,5V DC 1,7 până la 3,6V (pentru cip) 3,3 până la 5V pentru placă 1,8 până la 3,6V (pentru cip) 3.3 până la 5V pentru placă
Temperatură
interval
0 până la 50ºC -40 până la 80ºC -55 până la 150ºC -.55 până la 125ºC -40 până la 85ºC 0 până la 65ºC
Precizia +/– 2ºC (la 0 până la 50ºC) +/- 0.5ºC (la -40 până la 80ºC) +/-0.5ºC (la 25ºC) +/-0.5ºC (la -10 până la 85ºC) +/-0.5ºC (la 25ºC) +/-0.5ºC (la 25ºC) +/-0.5ºC (la 25ºC)
Suport
(Arduino IDE)
Adafruit DHT Library
Adafruit Unified Sensor Library
. Adafruit DHT Library
Adafruit Unified Sensor Library
analogRead() DallasTemperature
OneWire
Adafruit BME280 library
Adafruit Unified Sensor Library
Adafruit BME085
Adafruit Unified Sensor Library
Support
(MicroPython)
modul dht (inclus în firmware-ul MicroPython) modul dht (inclus în firmware-ul MicroPython) from machine import ADC
ADC().read
modul ds18b20 (inclus în firmware-ul MicroPython) BME280 Adafruit Library BMP180 module
Unde să cumpărați? Controlați prețurile Controlați prețurile Controlați prețurile Controlați prețurile
Controlați prețurile (rezistent la apă)
Controlați prețurile Controlați prețurile Controlați prețurile

DHT11 vs DHT22 (AM2302)

Senzor de temperatură și umiditate DHT11 vs DHT22

DHT11 și DHT22 (AM2302) sunt senzori de temperatură digitali care măsoară temperatura și umiditatea. Ei arată foarte asemănător și funcționează în același mod, dar au specificații diferite.

Ambele senzori pot fi alimentați fie cu 3,3V, fie cu 5V. Astfel, îi puteți folosi cu ușurință în proiectele dumneavoastră Arduino sau ESP.

Senzorul DHT22 are o rezoluție mai bună și o gamă mai largă de măsurare a temperaturii și umidității. Cu toate acestea, este un pic mai scump și puteți solicita citiri doar cu un interval de 2 secunde.

Senzorul DHT11 este puțin mai ieftin, are o gamă mai mică și este mai puțin precis. Dar puteți obține citiri ale senzorilor la fiecare secundă.

În ciuda diferențelor dintre ele, acestea funcționează în mod similar și puteți folosi același cod pentru a citi temperatura și umiditatea. Trebuie doar să selectați în cod tipul de senzor pe care îl folosiți.

Deci, dacă sunteți dispus să cheltuiți un dolar în plus, vă recomandăm DHT22 în locul lui DHT11.

Avem mai multe ghiduri privind modul de utilizare a senzorilor DHT11 și DHT22:

  • ESP32 (Arduino IDE) cu senzorul de temperatură și umiditate DHT11/DHT22
  • ESP8266 (Arduino IDE) DHT11/DHT22 Temperature and Humidity Web Server
  • Arduino cu senzor de umiditate și temperatură DHT11/DHT22
  • ESP32/ESP8266 (MicroPython) cu server web DHT11/DHT22

LM35, LM335 și LM34

LM35 LM335 și LM34 Senzor de temperatură analogic

Senzorii de temperatură LM35, LM335 și LM34 sunt senzori de temperatură liniari care emit o tensiune proporțională cu valoarea temperaturii. LM35 vine calibrat în grade Celsius, LM335 în Kelvin și LM34 în Fahrenheit. Astfel, în funcție de unitățile de temperatură pe care le veți folosi în proiectul dumneavoastră, unul dintre acești senzori ar putea fi mai practic decât celălalt.

Vă recomandăm să folosiți LM35 sau LM34 în loc de LM335, deoarece scăderea unui număr mare la măsurătorile LM335 pentru a converti temperatura din Kelvin poate compromite acuratețea rezultatelor.

Conform fișei tehnice, senzorii LM35 și LM34 necesită foarte puțin curent pentru a funcționa, aproximativ 60uA. Acest lucru duce la o autoîncălzire foarte scăzută (aproximativ 0,08ºC în aer liniștit), ceea ce înseamnă că măsurătorile de temperatură nu vor fi afectate de senzorul în sine.

Pentru a citi temperatura de la acești senzori trebuie doar să citiți tensiunea de ieșire a senzorului folosind un pin analogic. Dacă folosiți un Arduino, trebuie doar să folosiți funcția analogRead() și veți obține citiri de temperatură cu două puncte zecimale.

Așa că, dacă aveți nevoie de un senzor ieftin și ușor de utilizat pentru a monitoriza temperatura, LM35 poate fi o opțiune bună. De asemenea, deoarece consumă foarte puțină energie, este excelent pentru proiectele portabile, unde este necesar un consum redus de energie.

Învățați cum să utilizați senzorii de temperatură LM35, LM335 și LM34 cu Arduino:

  • Ghid pentru senzorii de temperatură LM35, LM335 și LM34 cu Arduino

Senzor de temperatură DS18B20

Senzor de temperatură DS18B20

Senzorul de temperatură DS18B20 este un senzor de temperatură digital cu un singur fir. Acest lucru înseamnă că are nevoie doar de o singură linie de date (și GND) pentru a comunica cu microcontrolerele dumneavoastră.

Poate fi alimentat de o sursă de alimentare externă sau poate obține energie de la linia de date (numită „mod parazit”), ceea ce elimină necesitatea unei surse de alimentare externe.

Care senzor de temperatură DS18B20 are un cod serial unic pe 64 de biți. Acest lucru vă permite să conectați mai mulți senzori la același fir de date. Astfel, puteți obține temperatura de la mai mulți senzori folosind un singur GPIO.

În plus, rezoluția senzorului de temperatură poate fi setată la 9, 10, 11 sau 12 biți, ceea ce corespunde unor creșteri de 0,5°C, 0,25°C, 0,125°C și, respectiv, 0,0625°C. Rezoluția implicită la pornire este de 12 biți.

Senzorul de temperatură DS18B20 este disponibil și în versiunea rezistentă la apă, ideală pentru proiecte în aer liber sau pentru a măsura temperatura lichidelor.

Senzor de temperatură rezistent la apă DS18B20

Puteți urmări ghidurile noastre pentru a învăța cum să utilizați senzorul de temperatură DS18B20 cu ESP32, ESP8266 și Arduino folosind Arduino IDE sau MicroPython:

  • ESP32 (Arduino IDE) Senzor de temperatură DS18B20 (simplu, multiplu, server web)
  • ESP8266 (Arduino IDE) Senzor de temperatură DS18B20 (simplu, multiplu, server web)
  • ESP8266 (Arduino IDE) Senzor de temperatură DS18B20 (simplu, multiplu, Web Server)
  • ESP32 și ESP8266 (MicroPython) cu senzor de temperatură DS18B20
  • Arduino cu senzor de temperatură DS18B20

BME280 vs BMP180

BME280 vs BMP180 Senzor barometric: temperatură, umiditate și presiune

BME280 și BMP180 sunt senzori barometrici, ceea ce înseamnă că citesc presiunea atmosferică. BME280 este echipat, de asemenea, cu un senzor de temperatură și unul de umiditate, iar BMP180 cu un senzor de temperatură. Deoarece presiunea se modifică odată cu altitudinea, acești senzori pot fi folosiți și pentru a estima altitudinea.

Când vine vorba de intervalul de temperatură, BME280 are un interval de măsurare mai larg: de la -40 la 85ºC, în timp ce BMP180 măsoară doar de la 0 la 65ºC. Trebuie să țineți cont de faptul că modulul BME280 se autoîncălzește puțin, astfel încât măsurătorile de temperatură pot fi cu 1 sau 2 grade peste valoarea reală a temperaturii.

BME280 poate folosi fie protocolul de comunicare I2C, fie SPI, în timp ce BMP180 poate folosi doar comunicarea I2C.

Senzorul BME280 este mai scump, dar are mai multe funcționalități. De exemplu, puteți construi un proiect de stație meteo doar cu acest senzor. Dar dacă nu vă interesează să măsurați presiunea sau umiditatea, puteți obține un senzor de temperatură mai ieftin.

Interfacerea acestor senzori cu Arduino, ESP8266 și ESP32 este foarte ușoară datorită bibliotecilor Adafruit.

Puteți folosi ghidurile noastre pentru a învăța cum să utilizați acești senzori:

  • BMP180:
    • Arduino cu senzorul barometric BMP180
    • ESP32 (Arduino IDE) cu senzorul barometric BMP180
  • BME280:
    • ESP32 (Arduino IDE) cu senzor BME280 (presiune, temperatură, umiditate)
    • ESP8266 (Arduino IDE) cu BME280 (presiune, temperatură, umiditate)
    • Arduino cu senzor BME280 (presiune, temperatură, umiditate)

Avem și alte proiecte cu BME280 care s-ar putea să vă placă:

  • Low Power Weather Station Datalogger using ESP8266 and BME280 with MicroPython
  • ESP32 Web Server with BME280 – Mini Weather Station
  • ESP32/ESP8266 Insert Data into MySQL Database using PHP and Arduino IDE

Testing All Temperature Sensors

Acest experiment a înregistrat citirile de temperatură de la diferiți senzori de temperatură în timp, în aceleași condiții.

Testarea tuturor senzorilor de temperatură DHT11 DHT22 LM35 DS18B20 BME280 BMP180 cu Arduino

Am cablat toți următorii senzori de temperatură la un Arduino Mega:

  • DHT11
  • DHT22
  • LM35
  • 2x DS18B20 în aceeași magistrală de date
  • BME280
  • BMP180

Datele au fost înregistrate pe un card microSD folosind un modul de card microSD. Experimentul a funcționat timp de aproximativ 36 de ore, iar citirile de temperatură au fost înregistrate la fiecare 5 minute.

Am cablat pinii de date ai senzorilor de temperatură la următorii pini de pe Arduino Mega:

  • DHT11: Pin 11
  • DHT22: Pin 12
  • DS18B20: Pin 14
  • LM35: Pin A0
  • BME280: software SPI pe acești pini: Pin 4 (MISO), Pin 5 (CS), Pin 6 (SCK), Pin 7 (MOSI)
  • BMP180: Pinul 20 (SDA) și Pinul 21 (CSL)

Modulul de card microSD a fost conectat prin SPI hardware: Pin 51 (MOSI), Pin 50 (MISO), Pin 52 (SCK), Pin 53 (CS).

Acesta este codul care rulează în 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);}

Vezi codul brut

Note: pentru a compila și rula acest cod, trebuie să instalați în Arduino IDE toate bibliotecile de senzori menționate în tabelul comparativ de la începutul acestui articol.

Rezultate: Compararea citirilor de temperatură

După aproximativ 36 de ore, am scos cardul microSD și am copiat rezultatele într-o foaie de calcul. Am trasat toate citirile pentru a compara mai bine măsurătorile de la diferiți senzori de temperatură.

Rezultate în grade Celsius Senzori de temperatură DHT11 DHT22 LM35 DS18B20 BME280 BMP180 cu Arduino
Temperatura în grade Celsius (ºC)
Rezultate în grade Fahrenheit Senzori de temperatură DHT11 DHT22 LM35 DS18B20 BME280 BMP180 cu Arduino
Temperatura în grade Fahrenheit (ºF)

Acest grafic nu are un grup de control (nu am folosit un senzor de temperatură calibrat), dar avem o idee despre cum se comportă acești senzori.

Dacă vă uitați mai atent la diagrame, BME280 a măsurat valori ușor mai mari decât ceilalți senzori de temperatură. Acest comportament este normal, iar acest lucru este descris în fișa tehnică. Modulul se autoîncălzește puțin și măsurătorile de temperatură pot fi cu 1 sau 2 grade peste valoarea reală a temperaturii.

Cu toate acestea, BME280 este, de asemenea, senzorul de temperatură care a dat citiri de temperatură mai stabile, fără multe oscilații între citiri. Acest lucru are de-a face cu rezoluția senzorului. Acesta poate detecta modificări de până la 0,01ºC.

În cazul senzorilor de temperatură DS18B20, putem observa unele oscilații între citiri și se observă, de asemenea, că rezoluția nu este la fel de bună ca cea a BME280. În plus, senzorul de temperatură DS18B20 a fost singurul care a dat câteva citiri „nule” pe tot parcursul experimentului. Am măsurat doi senzori de temperatură DS18B20 în aceeași linie de date și unul dintre senzori nu a reușit să citească temperatura de 6 ori pe parcursul experimentului (pe parcursul a 36 de ore).

DHT22 și BMP180 se comportă foarte asemănător, cu puține oscilații. DHT11 nu a putut detecta schimbări mici de temperatură, deoarece rezoluția sa este de 1ºC.

În cele din urmă, senzorul de temperatură LM35 a detectat schimbări de temperatură între 24ºC și 26ºC, dar cu multe oscilații între măsurători.

Acest grafic care compară diferiți senzori de temperatură arată clar cum diferă fiecare senzor de ceilalți. Este mai ușor să înțelegeți cum funcționează aceștia și dacă vor fi potriviți pentru proiectele pe care doriți să le construiți.

Încheiere

În acest articol am comparat mai mulți senzori de temperatură pe care îi puteți folosi cu ESP32, ESP8266, Arduino și alte plăci de dezvoltare. Toți acești senzori măsoară temperatura, dar se comportă diferit atunci când sunt puși la încercare în același mediu și în același timp.

Sperăm că ați găsit acest articol util și că vă ajută să alegeți cel mai bun senzor de temperatură pentru cerințele proiectului dvs.

S-ar putea, de asemenea, să vă placă să citiți:

  • 9 senzori de temperatură compatibili cu Arduino pentru proiectele dvs. electronice
  • ESP32/ESP8266 Plot Sensor Readings in Real Time Charts
  • Înscrieți-vă la cursurile noastre de electronică și eBook

Lasă un răspuns

Adresa ta de email nu va fi publicată.