Panduan Penggunaan Sensor Suhu DS18B20 dengan Arduin

Panduan Penggunaan Sensor Suhu DS18B20 dengan Arduin

Panduan ini menunjukkan cara menggunakan sensor suhu DS18B20 dengan papan Arduino. Anda akan belajar cara menghubungkan sensor, menginstal pustaka yang diperlukan, dan membaca suhu dari satu atau beberapa sensor DS18B20.

Memperkenalkan Sensor Suhu DS18B20

Sensor suhu DS18B20 adalah sensor suhu digital satu kawat. Ini berarti sensor ini hanya memerlukan satu jalur data (dan GND) untuk berkomunikasi dengan Arduino.

Sensor ini dapat diberi daya oleh sumber daya eksternal atau dapat mengambil daya dari jalur data (disebut “mode parasit”), yang menghilangkan kebutuhan untuk sumber daya eksternal.

Tabel berikut menunjukkan cara menghubungkan sensor DS18B20 ke papan Arduino Anda:

DS18B20Arduino
GNDGND
DQGunakan pin digital apa pun (dengan resistor pull-up 4.7k Ohm)
VDD5V (mode normal) or GND (mode parasit)

Setiap sensor suhu DS18B20 memiliki kode serial unik berukuran 64-bit. Ini memungkinkan Anda untuk menghubungkan beberapa sensor ke jalur data yang sama. Dengan demikian, Anda dapat mengambil suhu dari beberapa sensor menggunakan hanya satu pin digital Arduino.

Berikut adalah ringkasan spesifikasi yang paling relevan dari sensor suhu DS18B20:

  • Berkomunikasi melalui bus komunikasi satu kawat
  • Rentang sumber daya: 3.0V hingga 5.5V
  • Rentang suhu operasional: -55ºC hingga +125ºC
  • Akurasi +/-0.5 ºC (antara rentang -10ºC hingga 85ºC)

Bagian yang dibutuhkan

Untuk menunjukkan bagaimana sensor ini bekerja, kita akan membuat contoh sederhana yang membaca suhu dari sensor DS18B20 dengan Arduino dan menampilkan nilainya pada Arduino Serial Monitor.

Diagram rangkaian

Sensor ini dapat beroperasi dalam dua mode:

  • Mode normal: Membutuhkan koneksi 3 kawat. Anda memberikan daya ke pin VDD. Berikut adalah skema yang harus Anda ikuti:
DS18B20 temperature sensor schematic wiring diagram normal mode
  • Mode parasit: Anda hanya memerlukan jalur data dan GND. Sensor mengambil daya dari jalur data itu sendiri. Dalam hal ini, berikut adalah skema yang harus Anda ikuti:
DS18B20 temperature sensor schematic wiring diagram parasite mode

Anda dapat membaca suhu dari lebih dari satu sensor secara bersamaan menggunakan hanya satu pin digital Arduino. Untuk itu, Anda hanya perlu menghubungkan bersama-sama semua pin data sensor ke satu pin digital Arduino.

Unggah Kode – Satu Sensor DS18B20

Untuk berinteraksi dengan sensor suhu DS18B20, Anda perlu menginstal pustaka One Wire oleh Paul Stoffregen dan pustaka Dallas Temperature. Ikuti langkah-langkah berikut untuk menginstal kedua pustaka tersebut.

Menginstall Librari

  1. Buka Arduino IDE Anda dan pergi ke Sketch > Include Library > Manage Libraries. Library Manager akan terbuka.
  2. Ketik “OneWire” dalam kotak pencarian dan instal pustaka OneWire oleh Paul Stoffregen.
Installing OneWire library Arduino IDE

Kemudian, cari “Dallas” dan instal pustaka Dallas Temperature oleh Miles Burton.

Installing Dallas temperature DS18B20 library Arduino IDE

Setelah menginstal pustaka yang diperlukan, unggah kode berikut ke papan Arduino Anda. Sketch ini didasarkan pada contoh dari pustaka Dallas Temperature.

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
  Based on the Dallas Temperature Library example
*********/

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is conntec to the Arduino digital pin 4
#define ONE_WIRE_BUS 4

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // Start serial communication for debugging purposes
  Serial.begin(9600);
  // Start up the library
  sensors.begin();
}

void loop(void){ 

Ada banyak cara untuk mendapatkan suhu dari sensor suhu DS18B20. Jika Anda hanya menggunakan satu sensor, ini adalah salah satu cara yang paling mudah dan sederhana.

Cara Kerja Kode

Start by including the OneWire and the DallasTemperature libraries.

#include <OneWire.h>
#include <DallasTemperature.h>

Buat instance yang diperlukan untuk sensor suhu. Sensor suhu terhubung ke Pin 4.

// Data wire is conntec to the Arduino digital pin 4
const int oneWireBus = 4;          
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

Dalam setup(), inisialisasi Serial Monitor dengan baud rate 9600..

Serial.begin(9600);

IInisialisasi sensor suhu DS18B20:

sensors.begin();

Di dalam loop(), Anda akan mendapatkan suhu. Anda perlu memanggil metode requestTemperatures() sebelum mendapatkan nilai suhu yang sebenarnya.

sensors.requestTemperatures(); 

Kemudian, dapatkan dan cetak suhu dalam Celsius. Untuk mendapatkan suhu dalam Celsius, gunakan metode getTempCByIndex():

Serial.print(sensors.getTempCByIndex(0)); 

Atau gunakan metode getTempFByIndex() untuk mendapatkan suhu dalam Fahrenheit.

Serial.println(sensors.getTempFByIndex(0));

Metode getTempCByIndex() dan getTempFByIndex() menerima indeks dari sensor suhu. Karena kita hanya menggunakan satu sensor, indeksnya adalah 0. Jika Anda memiliki lebih dari satu sensor, gunakan indeks 0 untuk sensor pertama, indeks 1 untuk sensor kedua, dan seterusnya.

Pembacaan suhu baru diminta setiap detik.

delay(5000);

Demonstrasi

Setelah mengunggah kode, buka Serial Monitor di Arduino IDE dengan baud rate 9600. Anda harus melihat suhu yang ditampilkan dalam derajat Celsius dan Fahrenheit:

Testing DS18b20 Temperature Sensor with Arduino IDE Serial Monitor

Mendapatkan Suhu dari Beberapa Sensor DS18B20

Sensor suhu DS18B20 menggunakan protokol satu kawat dan setiap sensor memiliki kode serial unik berukuran 64-bit, sehingga Anda dapat membaca suhu dari beberapa sensor hanya menggunakan satu pin digital Arduino.

Diagram rangkaian

Untuk membaca suhu dari beberapa sensor, Anda hanya perlu menghubungkan semua jalur data bersama-sama seperti yang ditunjukkan dalam diagram skematik berikut:

Arduino Multiple DS18B20 Temperature sensors wiring schematic diagram

Unggah Kode – Multiple DS18B20

TKemudian, unggah kode berikut. Kode ini akan memindai semua perangkat pada Pin 4 dan mencetak suhu untuk masing-masingnya. Sketch ini didasarkan pada contoh yang disediakan oleh pustaka DallasTemperature.

/*
 * Rui Santos
 * Complete Project Details https://randomnerdtutorials.com
*/

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 4 on the Arduino
#define ONE_WIRE_BUS 4
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

int numberOfDevices; // Number of temperature devices found

DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address

void setup(void) {
  // start serial port
  Serial.begin(9600);
  
  // Start up the library
  sensors.begin();
  
  // Grab a count of devices on the wire
  numberOfDevices = sensors.getDeviceCount();
  
  // locate devices on the bus
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");

  // Loop through each device, print out address
  for(int i=0;i<numberOfDevices; i++) {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i)) {
      Serial.print("Found device ");
      Serial.print(i, DEC);
      Serial.print(" with address: ");
      printAddress(tempDeviceAddress);
      Serial.println();
		} else {
		  Serial.print("Found ghost device at ");
		  Serial.print(i, DEC);
		  Serial.print(" but could not detect address. Check power and cabling");
		}
  }
}

void loop(void) { 
  sensors.requestTemperatures(); // Send the command to get temperatures
  
  // Loop through each device, print out temperature data
  for(int i=0;i<numberOfDevices; i++) {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i)){
		
		// Output the device ID
		Serial.print("Temperature for device: ");
		Serial.println(i,DEC);

    // Print the data
    float tempC = sensors.getTempC(tempDeviceAddress);
    Serial.print("Temp C: ");
    Serial.print(tempC);
    Serial.print(" Temp F: ");
    Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
    } 	
  }
  delay(5000);
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress) {
  for (uint8_t i = 0; i < 8; i++) {
    if (deviceAddress[i] < 16) Serial.print("0");
      Serial.print(deviceAddress[i], HEX);
  }
}

Bagaimana Kode Bekerja

Kode ini menggunakan beberapa metode yang berguna untuk menangani beberapa sensor DS18B20.

Anda menggunakan metode getDeviceCount() untuk mendapatkan jumlah sensor DS18B20 pada jalur data.

numberOfDevices = sensors.getDeviceCount();

Metode getAddress() menemukan alamat-alamat sensor:

if(sensors.getAddress(tempDeviceAddress, i)){

Alamat ini unik untuk setiap sensor. Oleh karena itu, setiap sensor dapat diidentifikasi berdasarkan alamatnya.

Kemudian, Anda menggunakan metode getTempC() yang menerima alamat perangkat sebagai argumen. Dengan metode ini, Anda dapat mendapatkan suhu dari sensor tertentu:

float tempC = sensors.getTempC(tempDeviceAddress);

Untuk mendapatkan suhu dalam derajat Fahrenheit, Anda dapat menggunakan metode getTempF(). Atau, Anda dapat mengonversi suhu dari Celsius ke Fahrenheit sebagai berikut:

DallasTemperature::toFahrenheit(tempC)
Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

    Tinggalkan Balasan

    Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *