Dallas DS18b20 : Mutiple Sensor Temperature with Single Wire + LCD1602

Author : Ila MulyandiNo comments

Dallas DS18b20 (by Maxim) adalah salah satu jenis sensor temperature yang dapat kita gunakan dalam jumlah banyak secara paralel hanya dengan menggunakan 1 kabel data (oneWire) menggunakan library oneWire.h

Berikut adalah datasheets dari sensor Dallas DS18b20 Maxim :


- Hanya membutuhkan 1 pin untuk komunikasi
 - Tidak membutuhkan komponen tambahan
 - Dapat menerima tegangan kerja 3.0 - 5.5V bahkan dari kabel data
- Zero standby power required
- Range pengukuran suhu dari -55°C hingga +125°C.
- Dalam Fahrenheit -67°F hingga +257°F - ±0.5°C accuracy from -10°C to +85°C -Thermometer resolution is programmable    from 9 to 12 bits -Converts 12-bit temperature to digital word in750 ms (max.) -User-definable, nonvolatile temperature alarmsettings -Alarm search command identifies and
addresses devices whose temperature is
 outside of programmed limits (temperature alarm condition)
-Applications include thermostatic controls,industrial systems,
consumer products,thermometers, or any thermally sensitive system
PIN Interface
Dallas DS18b20 memiliki 3 pin (TO-92 package)
pin1 = GND (0V)
pin2 = Data (to digital Pin Controller/Arduino)
pin3 = VCC (3-5.5VDC)

Jika anda menggunakan DS18b20 tanpa breakout board (hanya komponen saja) seperti diatas maka tidak ada masalah tinggal langsung dihubungkan sesuai urutan PIN saja.

Yang jadi masalah adalah jika menggunakan Module sensor Dallas yang sudah menjadi board / dilengkapi Breakout board,biasanya menggunakan Universal Breakout board seperti produk KEYES atau yang terdapat pada 37in1 Sensor KIT, banyak sekali terjadi kesalahan pemasangan komponen seperti Terbalik atau salah lubang yang mengakibatkan PIN OUT pada modulenya tidak sesuai dan sensor tidak dapat bekerja bahkan berpotensi RUSAK.

Perhatikan Gambar dibawah :
Diatas adalah Gambar Module Dallas DS18b20 + Breakout Board dengan POSISI yang benar.Komponen harus Disolder pada jajar lubang paling depan dan menghadap keluar.Apabila module sensor Anda berada pada posisi lubang yang salah atau menghadap ke arah yang salah maka tidak akan berfungsi sebagaimana mestinya.
Saya banyak menemui kasus module ini banyak terjadi kesalahan penyolderan posisi komponen.


Library Arduino
Untuk memudahkan penggunaan sensor ini dengan Arduino kita membutuhkan Library dibawah ini :
OneWire library download disini atau disini
Dallas Temperature Library download disini
apabila menggunakan LCD 1602 i2C silahkan download Library tambahan berikut New LCD i2C Library download disini Untuk Project awal silahkan menggunakan Example pada Library Dallas Temperature Control yang sudah di download diatas atau menggunakan contoh project berikut : 3 Sample Project Arduino Temperature Sensor Dallas DS18b20 disini
Multiple Temperature Sensor with Dallas DS18b20 & LCD1602 i2C
Komponen/module yang diperlukan :
-Sensor dallas DS18b20 (kalau bisa lebih dari 1 unit)
-LCD1602 dengan i2C backpack
-Arduino Uno/Nano/Pro mini
-Beberapa kabel jumper duppont

Library :
OneWire library download disini atau disini
Dallas Temperature Library download disini
New LCD i2C Library download disini
Wiring :
1.Dallas ke Arduino
-Paralel semua sensor Dallas menjadi 1 line yaitu
 vcc dengan vcc
 gnd dengan gnd
 data dengan data
-Hubungkan kumpilan sensor dallas dengan Arduino
 *VCC dallas ke pin 5V arduino
 *GND dallas ke pin GND Arduino
 *Pin Data.Signal Dallas ke Pin D10 Arduino
2.LCD 1602 i2C ke Arduino
 -Pin VCC i2C LCD ke pin 5V Arduino
 -Pin GND i2C LCD ke pin GND Arduino
 -Pin SDA/data i2C LCD ke pin A4 Arduino
 -Pin SCL/clock i2C LCD ke pin A5 Arduino
Pastikan anda sudah mengetahui i2C address dari LCD i2c anda.secara default biasanya 0x27 beberapa i2C LCD mempunyai defailt Address 0x3F.Apabila anda Ragu denga i2C address LCD anda silahkan Scanning terlebih dahulu dengan skeck coding "i2C Scanner" download disini
Sourche Code
Upload Sourche kode berikut ke dalam Arduino Board anda,pastikan i2C address LCD sudah disesuaikan,pada sketch ini saya menggunakan addres i2C LCD 0x3F.



//**************************************
//Program ini dibuat Oleh Dani Ardianto
//Untuk www.belajarduino.com
//Bagi siapapun yang menggunakanya harap tidak menghapus marking ini
//sebagai bentuk apresiasi atas penggunaan kode ini secara cuma cuma
//didukung oleh www.tokopedia.com/rajacell
//***************************************

#include <OneWire.h> //1-Wire Library
#include <DallasTemperature.h> //Dallas D18b20 Library
#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library
LiquidCrystal_I2C lcd(0x3F, 16, 2);  //Ganti 0x3F dengan i2c address LCD anda
//Gunakan i2C Scanner untuk melihat alamat i2C LCD jika anda belum mengetahuinya

uint8_t testChar[8] = {0x4,0xa,0x4,0x0,0x0,0x0,0x0,0x0}; // Custom char degress

// Kabel Signal (data) sensor dihubungkan ke pin D10 Arduino
#define ONE_WIRE_BUS 10

// Setup a oneWire Lib ke Sensor Dallas/Maxim
OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);
int numberOfDevices; // Var. untuk menyimpan Jumlah Sensor yg ditemukan
DeviceAddress tempDeviceAddress; // Var. untuk menyimpan Sensor Address sementara

void setup(void)
{
  //Serial.begin(9600);

  lcd.begin();  //Memulai LCD
  lcd.createChar(0, testChar); // Sends the custom char to lcd
  lcd.setCursor(2,0);
  lcd.print(F("Multi Sensor"));
  lcd.setCursor(2,1);
  lcd.print(F("Temperature"));
  delay(2000);
  // Start up the library
  sensors.begin();
  
  // Menghitung jumlah sensor dalam wire
  numberOfDevices = sensors.getDeviceCount();
  lcd.setCursor(0,0);
  lcd.print(F("Mencari Sensor.."));
  delay(100); lcd.setCursor(0,1); lcd.print(F("                "));
  for (int i=0; i<=100; i++){
  lcd.setCursor(0,1); lcd.print(i); lcd.print('%');delay(50);
  }
  delay(1000);
  lcd.setCursor(0,0);
  lcd.print(F("Menemukan Sensor "));
  lcd.setCursor(0,1);
  lcd.print(numberOfDevices, DEC);
  lcd.print(F(" Sensor     "));
  delay(2000);
    lcd.clear();
  for(int i=0;i<numberOfDevices; i++)
  {
    // Menngambil alamat masing2 Sensor
    if(sensors.getAddress(tempDeviceAddress, i))
  
  lcd.setCursor(0,0);
  lcd.print(F("Alamat Sensor "));
  lcd.print(i+1); // +1 -> mempermudah hitungan sensor dari 1
  delay(1000);
  lcd.setCursor(0,1);
  for (uint8_t i = 0; i < 8; i++)
  {
    if (tempDeviceAddress[i] < 16) lcd.print("0");
    lcd.print(tempDeviceAddress[i], HEX); delay (100);
 
  }
  delay(500);
  lcd.setCursor(0,1); lcd.print(F("                "));
  delay(500);
  }
  delay (1000);  lcd.clear();
}

// Fungsi untuk menampilkan suhu pada tiap sensor
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  lcd.setCursor(0,1);
  lcd.print(tempC); lcd.print((char)0); lcd.print("C");
  lcd.print("  ");
  lcd.print(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
  lcd.print((char)0); lcd.print("F");
}

void loop(void)
{ 
  lcd.setCursor(0,0);
  // Mengambil data pada setiap sensor secara bergantian
  lcd.print(F("Mengambil data..")); delay (100);
  sensors.requestTemperatures(); //Mengirim perintah pengambilan data sensor
  lcd.setCursor(0,0);
  lcd.print(F("Selesai....     ")); delay (500);
  for(int i=0; i<numberOfDevices; i++)
  {
    if(sensors.getAddress(tempDeviceAddress, i))
 {
    lcd.setCursor(0,0);
  lcd.print("Temp. Sensor: ");
  lcd.print(i+1,DEC); // +1 -> mempermudah hitungan sensor dari 1
  printTemperature(tempDeviceAddress);
   delay (1500);
   lcd.clear();
 } 
 }
}

Apabila belum nampak seperti video diatas berarti masih terdapat beberapa kesalahan..silahkan diperiksa ulang kembali Wiring dan Code nya.


Posted On : Wednesday, February 1, 2017Time : 6:11 PM
SHARE TO :
| | Template Created By : Rajendroid | CopyRigt By : ARDUINO | |