Home » Blog » Tutorial Arduino Lebih dari Satu Sensor Suhu DS18B20 – Bahasa Indonesia

Tutorial Arduino Lebih dari Satu Sensor Suhu DS18B20 – Bahasa Indonesia

Sebelum mengikuti tutorial ini, disarankan untuk mengikuti:

PENJELASAN DETIL DS18B20:

PENJELASAN DETIL LCD 16X2 I2C:

Sensor suhu DS18B20 terkenal canggih karena sensor ini memiliki beberapa keunggulan dibandingkan sensor-sensor lainnya. Keunggulan tersebut meliputi parasitic mode, penggunaan One Wire untuk lebih dari satu sensor, dan kedap air. Namun sensor ini merupakan salah satu sensor dengan banyak permasalahan teknis, diantaranya adalah kode program yang rumit dan pemasangan pada sirkuit atau breadboard tidak mudah.

Nah video ini menjelaskan bagaimana kita bisa menggunakan lebih dari satu sensor DS18B20. Ada 5 sensor yang digunakan.

Video dimulai dengan pengetesan sensor DS18B20.

Lalu bagian berikutnya adalah penempatan pada papan breadboard dan penyambungan ke papan Arduino Uno.

Skema Beberapa DS18B20

Ada 3 penjelasan mengenai kode program:

1. Kode program yang menggunakan object getTempCByIndex namun kode ini dibuat apa adanya agar penonton bisa memahami langkah-langkah awal yang diperlukan untuk menyajikan hasil pengukuran suhu dari beberapa sensor DS18B20

// www.progresstech.co.id
// www.karyaone.co.id
// Protus Tanuhandaru

#include <LiquidCrystal_I2C.h> // Memanggil library LCD
#include <OneWire.h> //Memanggil library OneWire yang diperlukan sebagai dependensi library Dallas Temperature
#include <DallasTemperature.h> // Memanggil library Dallas Temperature
#define ONE_WIRE_BUS 2  // Menempatkan PIN hasil pembacaan sensor DS18B20 pada PIN 2. 
   //Disebut One Wire karena kita bisa menempatkan sensor DS18B20 lain pada PIN yang sama  
LiquidCrystal_I2C lcd(0x27, 16, 2); // Mengatur alamat LCD dan dimensi LCD, yaitu 20 kolom dan 4 baris

OneWire oneWire(ONE_WIRE_BUS); //Membuat variabel oneWire berdasarkan PIN yang telah didefinisikan
DallasTemperature sensor(&oneWire); //Membuat variabel untuk menyimpan hasil pengukuran

//deklarasi variable suhu DS18B20 dengan jenis data float
float suhuDS18B20_0;
float suhuDS18B20_1;
float suhuDS18B20_2;
float suhuDS18B20_3;
float suhuDS18B20_4;

void setup(void)
{
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("PROGRESSTECH");
  lcd.setCursor(0, 1);
  lcd.print("Protus");
  Serial.begin(9600); //Menginisiasikan setup kecepatan komunikasi
  sensor.begin();      //Menginisiasikan sensor One-Wire DS18B20

  // Sebelum melakukan pengukuran, atur resolusinya
  //sensor.setResolution(0, 9);  
  //sensor.setResolution(0, 10);
  //sensor.setResolution(0, 11);
  sensor.setResolution(0, 12);

  //sensor.setResolution(1, 9);  
  //sensor.setResolution(1, 10);
  //sensor.setResolution(1, 11);
  sensor.setResolution(1, 12);

  //sensor.setResolution(2, 9);  
  //sensor.setResolution(2, 10);
  //sensor.setResolution(2, 11);
  sensor.setResolution(2, 12);

  //sensor.setResolution(3, 9);  
  //sensor.setResolution(3, 10);
  //sensor.setResolution(3, 11);
  sensor.setResolution(3, 12);

  //sensor.setResolution(4, 9);  
  //sensor.setResolution(4, 10);
  //sensor.setResolution(4, 11);
  sensor.setResolution(4, 12);
  
  delay(2000);
}

void loop(void)
{
  
  sensor.requestTemperatures();  // Perintah konversi suhu
  //Membaca data suhu dari sensor #0 dan mengkonversikannya ke nilai Celsius
  suhuDS18B20_0 = sensor.getTempCByIndex(0);
  suhuDS18B20_1 = sensor.getTempCByIndex(1);
  suhuDS18B20_2 = sensor.getTempCByIndex(2);
  suhuDS18B20_3 = sensor.getTempCByIndex(3);
  suhuDS18B20_4 = sensor.getTempCByIndex(4);      
  // suhuDS18B20 = (suhuDS18B20*9/5) + 32;
  // suhuDS18B20 = suhuDS18B20 = 273.15;

  Serial.print("Sensor 0 : ");
  //Serial.println(suhuDS18B20, 1);  //Presisi 1 digit
  //Serial.println(suhuDS18B20, 2);  //Presisi 2 digit
  //Serial.println(suhuDS18B20, 3);  //Presisi 3 digit
  Serial.println(suhuDS18B20_0, 4);  //Presisi 4 digit
  Serial.println(" ┬░C");

  Serial.print("Sensor 1 : ");
  //Serial.println(suhuDS18B20, 1);  //Presisi 1 digit
  //Serial.println(suhuDS18B20, 2);  //Presisi 2 digit
  //Serial.println(suhuDS18B20, 3);  //Presisi 3 digit
  Serial.println(suhuDS18B20_1, 4);  //Presisi 4 digit
  Serial.println(" ┬░C");

  Serial.print("Sensor 2 : ");
  //Serial.println(suhuDS18B20, 1);  //Presisi 1 digit
  //Serial.println(suhuDS18B20, 2);  //Presisi 2 digit
  //Serial.println(suhuDS18B20, 3);  //Presisi 3 digit
  Serial.println(suhuDS18B20_2, 4);  //Presisi 4 digit
  Serial.println(" ┬░C");

  Serial.print("Sensor 3 : ");
  //Serial.println(suhuDS18B20, 1);  //Presisi 1 digit
  //Serial.println(suhuDS18B20, 2);  //Presisi 2 digit
  //Serial.println(suhuDS18B20, 3);  //Presisi 3 digit
  Serial.println(suhuDS18B20_3, 4);  //Presisi 4 digit
  Serial.println(" ┬░C");

  Serial.print("Sensor 4 : ");
  //Serial.println(suhuDS18B20, 1);  //Presisi 1 digit
  //Serial.println(suhuDS18B20, 2);  //Presisi 2 digit
  //Serial.println(suhuDS18B20, 3);  //Presisi 3 digit
  Serial.println(suhuDS18B20_4, 4);  //Presisi 4 digit
  Serial.println(" ┬░C");
  
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Suhu Sensor 0");
  lcd.setCursor(0, 1);
  lcd.print(suhuDS18B20_0, 4);
  lcd.print((char)223);
  lcd.print("C"); 
  delay(500);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Suhu Sensor 1");
  lcd.setCursor(0, 1);
  lcd.print(suhuDS18B20_1, 4);
  lcd.print((char)223);
  lcd.print("C"); 
  delay(500);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Suhu Sensor 2");
  lcd.setCursor(0, 1);
  lcd.print(suhuDS18B20_2, 4);
  lcd.print((char)223);
  lcd.print("C"); 
  delay(500);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Suhu Sensor 3");
  lcd.setCursor(0, 1);
  lcd.print(suhuDS18B20_3, 4);
  lcd.print((char)223);
  lcd.print("C"); 
  delay(500);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Suhu Sensor 4");
  lcd.setCursor(0, 1);
  lcd.print(suhuDS18B20_4, 4);
  lcd.print((char)223);
  lcd.print("C"); 
  delay(1000);    //delay 1 detik (1000 miliseconds)
}

2. Kode program yang tetap object getTempCByIndex namun kode ini telah di-refactor agar menjadi efisien

// www.progresstech.co.id
// www.karyaone.co.id
// Protus Tanuhandaru

#include <LiquidCrystal_I2C.h> // Memanggil library LCD
#include <OneWire.h> //Memanggil library OneWire yang diperlukan sebagai dependensi library Dallas Temperature
#include <DallasTemperature.h> // Memanggil library Dallas Temperature
#define ONE_WIRE_BUS 2  // Menempatkan PIN hasil pembacaan sensor DS18B20 pada PIN 2. 
   //Disebut One Wire karena kita bisa menempatkan sensor DS18B20 lain pada PIN yang sama  
LiquidCrystal_I2C lcd(0x27, 16, 2); // Mengatur alamat LCD dan dimensi LCD, yaitu 20 kolom dan 4 baris

OneWire oneWire(ONE_WIRE_BUS); //Membuat variabel oneWire berdasarkan PIN yang telah didefinisikan
DallasTemperature sensor(&oneWire); //Membuat variabel untuk menyimpan hasil pengukuran

int jumlahSensor; // Membuat variabel jumlah Sensor yang disambungkan ke Arduino
int resolusiBit = 12; // Menentukan angka resolusi bit 9, 10, 11 atau 12
int jumlahDesimal = 4; // Menentukan jumlah angka desimal penyajian hasil

void setup(void)
{
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("PROGRESSTECH");
  lcd.setCursor(0, 1);
  lcd.print("Protus");
  Serial.begin(9600); //Menginisiasikan setup kecepatan komunikasi
  Serial.print("Sensor nomor : ");
  sensor.begin();      //Menginisiasikan sensor One-Wire DS18B20
  jumlahSensor = sensor.getDeviceCount(); // Menampung informasi jumlah sensor

  // Sebelum melakukan pengukuran, atur resolusinya
  for (int k=0; k < jumlahSensor; k++) {
    sensor.setResolution(k, resolusiBit);
  }
  delay(2000);
}

void loop(void)
{
  sensor.requestTemperatures();  // Perintah konversi suhu
  //Membaca data suhu dari sensor #0 dan mengkonversikannya ke nilai Celsius
  for (int i = 0; i < jumlahSensor; i++) {
    float hasilPengukuran = sensor.getTempCByIndex(i);
    
    Serial.print("Sensor nomor : ");
    Serial.println(i);
    Serial.print(hasilPengukuran, jumlahDesimal);
    Serial.println(" ┬░C");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Suhu Sensor : ");
    lcd.print(i);
    lcd.setCursor(0, 1);
    lcd.print(hasilPengukuran, jumlahDesimal);
    lcd.print((char)223);
    lcd.print("C"); 
    delay(2000);
  }
}

3. Kode program yang memanfaatkan object Device Address untuk menyajikan hasil pengukuran suhu dari sensor dengan alamat unit tertentu

// www.progresstech.co.id
// www.karyaone.co.id
// Protus Tanuhandaru

#include <LiquidCrystal_I2C.h> // Memanggil library LCD
#include <OneWire.h> //Memanggil library OneWire yang diperlukan sebagai dependensi library Dallas Temperature
#include <DallasTemperature.h> // Memanggil library Dallas Temperature
#define ONE_WIRE_BUS 2  // Menempatkan PIN hasil pembacaan sensor DS18B20 pada PIN 2. 
   //Disebut One Wire karena kita bisa menempatkan sensor DS18B20 lain pada PIN yang sama  
LiquidCrystal_I2C lcd(0x27, 16, 2); // Mengatur alamat LCD dan dimensi LCD, yaitu 16 kolom dan 2 baris

OneWire oneWire(ONE_WIRE_BUS); //Membuat variabel oneWire berdasarkan PIN yang telah didefinisikan
DallasTemperature sensor(&oneWire); //Membuat variabel untuk menyimpan hasil pengukuran
DeviceAddress perangkat; //Membuat object array untuk menyimpan alamat Heksadesimal

int jumlahSensor; // Membuat variabel jumlah Sensor yang disambungkan ke Arduino
int resolusiBit = 12; // Menentukan angka resolusi bit 9, 10, 11 atau 12
int jumlahDesimal = 4; // Menentukan jumlah angka desimal penyajian hasil

void setup(void)
{
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("PROGRESSTECH");
  lcd.setCursor(0, 1);
  lcd.print("Protus");
  Serial.begin(9600); //Menginisiasikan setup kecepatan komunikasi
  Serial.print("Sensor nomor : ");
  sensor.begin();      //Menginisiasikan sensor One-Wire DS18B20
  jumlahSensor = sensor.getDeviceCount(); // Menampung informasi jumlah sensor

  delay(2000);
}

void loop(void)
{
  sensor.requestTemperatures();  // Perintah konversi suhu
  //Membaca data suhu dari sensor #0 dan mengkonversikannya ke nilai Celsius
  for (int i = 0; i < jumlahSensor; i++) {
    lcd.clear();
    lcd.setCursor(0, 0);

    // Mendapatkan alamat perangkat
    sensor.getAddress(perangkat, i);
    
    // Sebelum melakukan pengukuran, atur resolusinya
    sensor.setResolution(i, resolusiBit);

    // Menampilkan alamat dengan membaca konten dari array Device Address
    Serial.print("Alamat : ");
    for (uint8_t i = 0; i < 8; i++) {
      if(perangkat[i] < 0x10) Serial.print("0");
      Serial.print(perangkat[i], HEX);
      lcd.print(perangkat[i], HEX);
      
    }
    Serial.print(" | Suhu : ");

    //Menyajikan hasil pengukuran suhu
    float hasilPengukuran = sensor.getTempC(perangkat);
    Serial.print(hasilPengukuran, jumlahDesimal);
    Serial.println(" ┬░C");
    lcd.setCursor(0, 1);
    lcd.print(hasilPengukuran, jumlahDesimal);
    lcd.print((char)223);
    lcd.print("C"); 
    delay(2000);
  }
}

Leave a Reply

Your email address will not be published.