/Menguji Sensor Suhu DHT11,DHT22,LM35, DS18B20, BME280 dan BMP180

Menguji Sensor Suhu DHT11,DHT22,LM35, DS18B20, BME280 dan BMP180

Pada pengujian ini dicatat pembacaan suhu dari berbagai sensor suhu yang berbeda dari waktu ke waktu dalam kondisi yang sama.

Kami menghubungkan semua sensor suhu berikut ke Arduino Mega yaitu :

  • DHT11
  • DHT22
  • LM35
  • 2x DS18B20 pada bus data yang sama
  • BME280
  • BMP180

Data dicatat pada kartu microSD menggunakan modul kartu microSD. Eksperimen berjalan selama kurang lebih 36 jam dan pembacaan suhu dicatat setiap 5 menit.

Kami menghubungkan pin data dari sensor suhu ke pin berikut di Arduino Mega:

  • DHT11: Pin 11
  • DHT22: Pin 12
  • DS18B20: Pin 14
  • LM35: Pin A0
  • BME280: software SPI pada pin ini: Pin 4 (MISO), Pin 5 (CS), Pin 6 (SCK), Pin 7 (MOSI)
  • BMP180: Pin 20 (SDA) dan Pin 21 (CSL)

Modul kartu microSD dihubungkan melalui perangkat keras SPI: Pin 51 (MOSI), Pin 50 (MISO), Pin 52 (SCK), Pin 53 (CS).

Di bawah Ini adalah kode yang berjalan di 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 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);
}

 

Catatan: untuk mengkompilasi dan menjalankan kode ini, Anda harus menginstal di Arduino IDE Anda semua library sensor yang disebutkan dalam tabel perbandingan di awal artikel ini.

Hasil: Membandingkan Pembacaan Suhu Setelah kira-kira 36 jam, kami mengeluarkan kartu microSD dan menyalin hasilnya ke spreadsheet. Kami telah memplot semua pembacaan untuk membandingkan pengukuran dari berbagai sensor suhu dengan lebih baik.

Temperature dalam derajat  Celsius (ºC)

Temperature dalam derajat Fahrenheit (ºF)

Grafik di atas  tidak memiliki grup kontrol (kami tidak menggunakan sensor suhu yang dikalibrasi), tetapi kami memiliki gambaran tentang bagaimana sensor ini berperilaku.

Jika Anda melihat lebih dekat pada grafik, BME280 mengukur nilai yang sedikit lebih tinggi daripada sensor suhu lainnya. Perilaku ini normal, dan ini dijelaskan di lembar data. Modul sedikit memanas sendiri dan pengukuran suhu bisa 1 atau 2 derajat di atas nilai suhu sebenarnya. Namun, BME280 juga merupakan sensor suhu yang memberikan pembacaan suhu yang lebih stabil tanpa banyak osilasi antar pembacaan. Ini ada hubungannya dengan resolusi sensor. Ini dapat mendeteksi perubahan hingga 0,01ºC.

Dalam kasus sensor suhu DS18B20, kami dapat melihat beberapa osilasi antara pembacaan dan juga terlihat bahwa resolusinya tidak sebaik BME280. Selain itu, sensor suhu DS18B20 adalah satu-satunya yang memberikan beberapa pembacaan “nol” selama percobaan. Kami telah mengukur dua sensor suhu DS18B20 di jalur data yang sama dan salah satu sensor gagal membaca suhu 6 kali selama percobaan (selama 36 jam).

DHT22 dan BMP180 berperilaku sangat mirip dengan sedikit osilasi. DHT11 tidak dapat mendeteksi perubahan suhu yang kecil, karena resolusinya adalah 1ºC.

Terakhir, sensor suhu LM35 mendeteksi perubahan suhu antara 24ºC dan 26ºC tetapi dengan banyak osilasi antar pengukuran.

grafik yang membandingkan berbagai sensor suhu ini dengan jelas menunjukkan bagaimana setiap sensor berbeda dari yang lain. Lebih mudah untuk memahami cara kerjanya dan apakah cocok untuk proyek yang ingin Anda bangun.

Dalam artikel ini kami telah membandingkan beberapa sensor suhu yang dapat Anda gunakan dengan ESP32, ESP8266, Arduino, dan papan pengembangan lainnya. Semua sensor ini mengukur suhu tetapi berperilaku berbeda saat diuji di lingkungan yang sama pada waktu yang sama.

Kami berharap artikel ini bermanfaat dan membantu Anda memilih sensor suhu terbaik untuk kebutuhan proyek Anda.

Sumber : randomnerdtutorials.com