DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180

Lämpötila-antureita, jotka ovat yhteensopivia Arduinon, ESP32:n, ESP8266:n ja muiden kehitysalustojen kanssa, on laaja valikoima. Niinpä voi olla vaikeaa valita projektiin sopivin anturi. Tässä artikkelissa vertailemme 6 yleisesti käytettyä lämpötila-anturia: DHT11, DHT22, LM35, DS18B20, BME280 ja BMP180.

DHT11 vs. DHT22 vs. LM35 vs. DS18B20 vs. BME280 vs. BMP180 Lämpötila-anturit

Vertailemme antureita kommunikaatioprotokollan, lämpötilan vaihteluvälin, tarkkuuden, helppokäyttöisyyden ja monien muiden seikkojen osalta.

Toteutamme myös yksinkertaisen kokeen, jossa mittasimme lämpötilaa samassa ympäristössä kaikilla lämpötila-antureilla ajan mittaan. Tämän kokeen avulla näimme, miten anturit reagoivat lämpötilan muutoksiin. Suoritimme tätä koetta noin 36 tunnin ajan ja näytämme tulokset myöhemmin tässä artikkelissa.

Suositeltava lukeminen: 9 Arduino-yhteensopivaa lämpötila-anturia elektroniikkaprojekteihisi

Lämpötila-antureiden vertailu: DHT11 vs. DHT22 vs. LM35 vs. DS18B20 vs. BME280 vs. BMP180

Lämpötila-antureiden nopeaa vertailua varten olemme koonneet seuraavan taulukon, joka näyttää tärkeimmät tiedot lämpötila-anturia valittaessa, nimittäin: tiedonsiirtoprotokollan, syöttöjännitteen, lämpötila-alueen ja tarkkuuden.

Huomautus: taulukko rullaa vaakasuoraan sekä työpöytäkoneella että tabletilla ja matkapuhelimella.

Sensor DHT11 DHT22 (AM2302) LM35 DS18B20 BME280 BMP180
Mittarit Lämpötila
Kosteus
Lämpötila
Kosteus
Lämpötila
Kosteus
Lämpötila Lämpötila Lämpötila
Kosteus
Paine
Lämpötila
Paine
Kommunikaatio
Protokolla
One-wire One-wire Analog One-wire I2C
SPI
I2C
Supply
voltage
3 to 5.5V DC 3 – 6V DC 4 – 30 V DC 3 – 5.5V DC 1.7 – 3.6V (piirille) 3.3 – 5V levylle 1.8 – 3.6V (piirille) 3.3 – 5V piirilevylle
Lämpötila
alue
0 – 50ºC -40 – 80ºC -55 – 150ºC -55-125ºC -40-85ºC 0-65ºC
Tarkkuus +/- 2ºC (0-50ºC:ssa) +/- 0.5ºC (lämpötilassa -40-80ºC) +/-0.5ºC (lämpötilassa 25ºC) +/-0.5ºC (lämpötilassa -10-85ºC) +/-0.5ºC (lämpötilassa 25ºC) +/-0.5ºC (25ºC:ssa)
Tuki
(Arduino IDE)
Adafruit DHT-kirjasto
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)
dht-moduuli (sisältyy MicroPython-ohjelmistoon) dht-moduuli (sisältyy MicroPython-ohjelmistoon) from machine import ADC
ADC().read
ds18b20-moduuli (sisältyy MicroPython-firmwareen) BME280 Adafruit-kirjasto BMP180-moduuli
Where to buy? Tarkista hinnat Tarkista hinnat Tarkista hinnat Tarkista hinnat Tarkista hinnat
Tarkista hinnat (vedenpitävä)
Tarkista hinnat Tarkista hinnat

DHT11 vs DHT22 (AM2302)

DHT11 vs DHT22 Lämpötila- ja kosteusanturi

DHT11 ja DHT22 (AM2302) ovat digitaalisia lämpötila-antureita, jotka mittaavat lämpötilan ja kosteuden. Ne näyttävät hyvin samankaltaisilta ja toimivat samalla tavalla, mutta niillä on erilaiset tekniset tiedot.

Kummallekin anturille voidaan syöttää virtalähteenä joko 3,3V tai 5V. Voit siis helposti käyttää niitä Arduino- tai ESP-projekteissasi.

DHT22-anturilla on parempi resoluutio ja laajempi lämpötilan ja kosteuden mittausalue. Se on kuitenkin hieman kalliimpi ja voit pyytää lukemia vain 2 sekunnin välein.

DHT11 on hieman halvempi, sillä on pienempi alue ja se on epätarkempi. Mutta voit saada anturin lukemat sekunnin välein.

Eroistaan huolimatta ne toimivat samalla tavalla, ja voit käyttää samaa koodia lämpötilan ja kosteuden lukemiseen. Sinun on vain valittava koodissa käyttämäsi anturityyppi.

Jos siis olet valmis käyttämään ylimääräisen dollarin, suosittelemme DHT22:ta DHT11:n sijaan.

Meillä on useita oppaita DHT11- ja DHT22-antureiden käytöstä:

  • ESP32 (Arduino IDE) DHT11/DHT22 lämpötila- ja kosteusanturilla
  • ESP8266 (Arduino IDE) DHT11/DHT22 lämpötila- ja kosteusanturi Web Palvelin
  • Arduino ja DHT11/DHT22 kosteus- ja lämpötila-anturi
  • ESP32/ESP8266 (MicroPython) ja DHT11/DHT22 Web-palvelin

LM35, LM335 ja LM34

LM35 LM335 ja LM34 Analoginen lämpötila-anturi

LM35, LM335 ja LM34 ovat lineaarisia lämpötila-antureita, jotka antavat lämpötila-arvoon verrannollisen jännitteen. LM35 toimitetaan kalibroituna Celsius-asteina, LM335 kelvineinä ja LM34 Fahrenheitinä. Riippuen siis siitä, mitä lämpötilayksiköitä käytät projektissasi, toinen näistä antureista saattaa olla käytännöllisempi kuin toinen.

Suosittelemme LM35:n tai LM34:n käyttämistä LM335:n sijasta, koska suuren luvun vähentäminen LM335:n mittaustuloksista lämpötilan muuntamiseksi kelvinistä voi heikentää tulosten tarkkuutta.

Tietolehden mukaan LM35:n ja LM34:n anturien virrankulutus on hyvin vähäinen, noin 60uA. Tämä johtaa hyvin vähäiseen itselämmitykseen (noin 0,08ºC tyynessä ilmassa), mikä tarkoittaa, että anturi itse ei vaikuta lämpötilamittauksiin.

Lämpötilan lukemiseksi näiltä antureilta sinun tarvitsee vain lukea anturin lähtöjännite käyttämällä analogista pinniä. Jos käytät Arduinoa, sinun tarvitsee vain käyttää analogRead()-funktiota ja saat lämpötilalukemat kahdella desimaalipisteellä.

Jos siis tarvitset halvan ja helppokäyttöisen anturin lämpötilan seuraamiseen, LM35 voi olla hyvä vaihtoehto. Koska se kuluttaa myös hyvin vähän energiaa, se sopii erinomaisesti kannettaviin projekteihin, joissa vaaditaan pientä virrankulutusta.

Opi käyttämään LM35-, LM335- ja LM34-lämpötila-antureita Arduinon kanssa:

  • Ohje LM35-, LM335- ja LM34-lämpötila-antureiden käyttämiseen Arduinon kanssa

DS18B20-lämpötila-anturi

DS18B20-lämpötila-anturi

>Ds18B20-lämpötila-anturi on yksijohtiminen digitaalinen lämpötilan anturi. Tämä tarkoittaa, että se tarvitsee vain yhden datajohdon (ja GND:n) kommunikoidakseen mikrokontrollereiden kanssa.

Se voi saada virtansa ulkoisesta virtalähteestä tai se voi saada virtansa datajohdosta (ns. ”loistila”), jolloin ulkoista virtalähdettä ei tarvita.

Kullakin DS18B20-lämpötila-anturilla on yksilöllinen 64-bittinen sarjakoodi. Tämän ansiosta voit kytkeä useita antureita samaan datajohtimeen. Voit siis saada lämpötilan useista antureista yhdellä GPIO:lla.

Lämpötila-anturin resoluutio voidaan lisäksi asettaa 9, 10, 11 tai 12 bittiin, mikä vastaa vastaavasti 0,5 °C:n, 0,25 °C:n, 0,125 °C:n ja 0,0625 °C:n askelia. Oletusresoluutio käynnistyksen yhteydessä on 12-bittinen.

DS18B20-lämpötila-anturi on saatavana myös vedenpitävänä versiona, joka on ihanteellinen ulkotiloihin tai nesteen lämpötilan mittaamiseen.

DS18B20 vesitiivis lämpötila-anturi

Voit seurata oppaita, joissa opit käyttämään DS18B20-lämpötila-anturia ESP32:n, ESP8266:n ja Arduinon kanssa Arduino IDE:n tai MicroPythonin avulla:

  • ESP32 (Arduino IDE) DS18B20-lämpötila-anturi (yksittäinen, useita, Web-palvelin)
  • ESP8266 (Arduino IDE) DS18B20-lämpötila-anturi (yksittäinen, useita, Web-palvelin)
  • ESP32 ja ESP8266 (MicroPython) DS18B20-lämpötila-anturilla
  • Arduino DS18B20-lämpötila-anturilla

BME280 vs. BMP180

BME280 vs. BMP180 Barometrinen anturi: BME280 ja BMP180 ovat barometrisia antureita, mikä tarkoittaa, että ne lukevat ilmanpainetta. BME280:ssä on myös lämpötila- ja kosteusanturi ja BMP180:ssä lämpötila-anturi. Koska paine muuttuu korkeuden mukaan, näitä antureita voidaan käyttää myös korkeuden arviointiin.

Lämpötila-alueen osalta BME280:n mittausalue on laajempi: -40-85ºC, kun taas BMP180 mittaa vain 0-65ºC. Kannattaa muistaa, että BME280-moduuli lämmittää itseään hieman, joten lämpötilamittaukset voivat olla 1 ou 2 astetta todellista lämpötila-arvoa korkeammat.

BME280 voi käyttää joko I2C- tai SPI-viestintäprotokollaa, kun taas BMP180 voi käyttää vain I2C-viestintää.

BME280-anturi on kalliimpi, mutta siinä on enemmän toimintoja. Voit esimerkiksi rakentaa sääasemaprojektin pelkästään tällä anturilla. Mutta jos et ole kiinnostunut paineen tai kosteuden mittaamisesta, voit hankkia halvemman lämpötila-anturin.

Tämän anturin liittäminen Arduinon, ESP8266:n ja ESP32:n kanssa on erittäin helppoa Adafruit-kirjastojen ansiosta.

Voit käyttää oppaitamme oppiaksesi käyttämään näitä antureita:

  • BMP180:
    • Arduino ja BMP180 barometrinen anturi
    • ESP32 (Arduino IDE) ja BMP180 barometrinen anturi
  • BME280:
    • ESP32 (Arduino IDE) BME280-anturin kanssa (paine, lämpötila, kosteus)
    • ESP8266 (Arduino IDE) BME280-anturin kanssa (paine, lämpötila, kosteus)
    • Arduino BME280-anturin kanssa (paine, lämpötila, kosteus)

Meillä on myös muita projekteja, joissa on BME280 ja joista saatat pitää:

  • Low Power Weather Station Datalogger using ESP8266 and BME280 with MicroPython
  • ESP32 Web Server with BME280 – Mini Weather Station
  • ESP32/ESP8266 Aseta tiedot MySQL-tietokantaan PHP:llä ja Arduino IDE:llä

Kaikkien lämpötila-antureiden testaaminen

Tämässä kokeilussa kirjattiin lämpötilalukemat eri lämpötila-antureilta ajan mittaan samoissa olosuhteissa.

Kaikkien lämpötila-antureiden testaaminen DHT11 DHT22 LM35 DS18B20 BME280 BMP180 Arduinolla

Kytkimme kaikki seuraavat lämpötila-anturit Arduino Megaan:

  • DHT11
  • DHT22
  • LM35
  • 2x DS18B20 samassa dataväylässä
  • BME280
  • BMP180

Data tallennettiin microSD-kortille microSD-korttimoduulilla. Koe kesti noin 36 tuntia ja lämpötilalukemat kirjattiin ylös 5 minuutin välein.

Johdotimme lämpötila-antureiden datapinnejä Arduino Megan seuraaviin nastoihin:

  • DHT11: Nasta 11
  • DHT22: Nasta 12
  • DS18B20: Nasta 14
  • LM35:n: Nasta A0
  • BME280: Ohjelmiston SPI näille nastoille: Pin 4 (MISO), Pin 5 (CS), Pin 6 (SCK), Pin 7 (MOSI)
  • BMP180:

MicroSD-korttimoduuli kytkettiin laitteiston SPI:n kautta: Pin 51 (MOSI), Pin 50 (MISO), Pin 52 (SCK), Pin 53 (CS).

Tämä on koodi, joka toimii Arduino Megassa.

/* * 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);}

Katsele raakakoodia

Huomautus: tämän koodin kääntäminen ja suorittaminen edellyttää, että asennat Arduino-IDE:hen kaikki tämän artikkelin alussa olevassa vertailutaulukossa mainitut anturikirjastot.

Tulokset: Lämpötilalukemien vertailu

Noin 36 tunnin kuluttua poistimme microSD-kortin ja kopioimme tulokset taulukkolaskentaohjelmaan. Olemme piirtäneet kaikki lukemat, jotta voimme paremmin vertailla eri lämpötila-antureiden mittauksia.

Tulokset celsiusasteina Lämpötila-anturit DHT11 DHT22 LM35 DS18B20 BME280 BMP180 Arduinolla
Lämpötila celsiusasteina (ºC)
Tulokset Fahrenheit-asteina. Lämpötila-anturit DHT11 DHT22 LM35 DS18B20 BME280 BMP180 Arduinolla
Lämpötila Fahrenheit-asteina (ºF)

Tässä kaaviossa ei ole kontrolliryhmää (emme käyttäneet kalibroitua lämpötila-anturia), mutta meillä on käsitys siitä, miten nämä anturit käyttäytyvät.

Jos tarkastelet kaavioita tarkemmin, BME280 mittasi hieman korkeampia arvoja kuin muut lämpötila-anturit. Tämä käyttäytyminen on normaalia, ja se on kuvattu datalehdessä. Moduuli lämmittää itseään hieman ja lämpötilamittaukset voivat olla 1 ou 2 astetta yli todellisen lämpötila-arvon.

Lämpötila-anturi BME280 on kuitenkin myös se lämpötila-anturi, joka antoi vakaampia lämpötilalukemia ilman paljon heilahteluja lukemien välillä. Tämä liittyy anturin resoluutioon. Se pystyy havaitsemaan jopa 0,01ºC:n muutokset.

Lämpötila-antureiden DS18B20:n tapauksessa voimme havaita jonkin verran värähtelyä lukemien välillä, ja on myös havaittavissa, että resoluutio ei ole yhtä hyvä kuin BME280:n. Lisäksi DS18B20-lämpötila-anturi oli ainoa, joka antoi joitakin ”nollalukemia” koko kokeen ajan. Olemme mitanneet kaksi DS18B20-lämpötila-anturia samassa datajohdossa, ja toinen antureista ei lukenut lämpötilaa 6 kertaa kokeen aikana (36 tunnin aikana).

DHT22 ja BMP180 käyttäytyvät hyvin samankaltaisesti vähäisin värähtelyin. DHT11 ei pystynyt havaitsemaan pieniä lämpötilan muutoksia, koska sen resoluutio on 1ºC.

Lämpötila-anturi LM35 havaitsi lopulta lämpötilan muutokset 24ºC:n ja 26ºC:n välillä, mutta siinä oli paljon värähtelyjä mittausten välillä.

Tässä eri lämpötila-antureita vertailevassa kaaviossa näkyy selvästi, miten kukin lämpötila-anturi eroaa toisistaan. On helpompi ymmärtää, miten ne toimivat ja sopivatko ne projekteihin, joita haluat rakentaa.

Pakkaus

Tässä artikkelissa olemme vertailleet useita lämpötila-antureita, joita voit käyttää ESP32:n, ESP8266:n, Arduinon ja muiden kehitysalustojen kanssa. Nämä anturit mittaavat kaikki lämpötilaa, mutta ne käyttäytyvät eri tavalla, kun niitä testataan samassa ympäristössä samaan aikaan.

Toivomme, että löysit tämän artikkelin hyödylliseksi ja että se auttaa sinua valitsemaan parhaan lämpötila-anturin projektisi vaatimuksiin.

Olet ehkä myös kiinnostunut lukemaan:

  • 9 Arduino-yhteensopivaa lämpötila-anturia elektroniikkaprojekteihisi
  • ESP32/ESP8266:n avulla voit piirtää anturin lukemat reaaliaikaisiin kaaviokuvioihin
  • Kirjoittaudu mukaan elektroniikkakursseillemme ja elektroniikkaan liittyviin e-kirjoihin

.

Vastaa

Sähköpostiosoitettasi ei julkaista.