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:
DS18B20 | Arduino |
GND | GND |
DQ | Gunakan pin digital apa pun (dengan resistor pull-up 4.7k Ohm) |
VDD | 5V (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:

- 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:

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
- Buka Arduino IDE Anda dan pergi ke Sketch > Include Library > Manage Libraries. Library Manager akan terbuka.
- Ketik “OneWire” dalam kotak pencarian dan instal pustaka OneWire oleh Paul Stoffregen.

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

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:

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:

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)