Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Jumat, 22 September 2023

[Tutorial] Sensor Suhu Ds18b20 dan output ke display oled

 




Pada beberapa tulisan di blog ini telah sering dibahas mengenai sensor suhu dasar, baik yang paling sederhana LM35 dan yang lumayan cukup sering dipakai untuk sensor IOT yaitu DHT11. Namun untuk pengukuran yang lebih akurat dan mengakomodir suhu negatif, maka kali ini saya pilihkan sensor suhu digital DS18B20. Secara umum rangkaian DS18B20 memerlukan 3 pin dan sebuah resistor pull up data bernilai 4,7K ohm. Praktek kali ini dilakukan bersama mahasiswa teknik listrik vokasi unesa angkatan 2022.





Untuk dapat menjalankan sensor ini pada arduino atau esp8266, library yang perlu di install pada sketch arduino yaitu One Wire dan Dallas Temperature. Perhatikan penjelasan script dasar berikut ini untuk mendapatkan pembacaan suhu yang tepat.


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

// Sensor data ke digital pin 4, sesuaikan yg dipakai
#define ONE_WIRE_BUS 4

// inisialisasi nama library one wire
OneWire oneWire(ONE_WIRE_BUS);

// menghubungkan library onewire vs Dallas Temperature 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // Start serial baud 9600
  Serial.begin(9600);
  // memulai ibrary library
  sensors.begin();
}

void loop(void){ 
  // Panggil pembacaan sensor pada bus one wire
  sensors.requestTemperatures(); 
  //tulis ke serial monitor
  Serial.print("Celsius temperature: ");
  // kasi index 0 karena cuman 1 sensor, bisa untuk banyak sensor
  Serial.print(sensors.getTempCByIndex(0)); 
  Serial.print(" - Fahrenheit temperature: ");
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}

Dan jika rangkaian sudah benar maka hasilnya seperti berikut ini :



Catatan jika menggunakan wemos atau nodemcu, pin yang digunakan disesuaikan dengan tulisan pin pada board, namun asal board yang digunakan sesuai. Perhatikan gambar dibawah ini :




Jadi jika library boardnya sesuai maka cukup mengikuti penamaan pada board yg dipakai, seperti contoh dibawah ini :

 
// Sensor data ke digital pin D4, sesuaikan yg dipakai
#define ONE_WIRE_BUS D4

-  Display Ke OLED 


Layar oled yang kita gunakan adalah OLED SSD12306 dengan lebar layar 128x64 pixel. 



Pin dari OLED ini berbasis I2C 3.3 volt, sehingga VCC/VDD jangan sampai salah colok harus ke pin 3.3 volt pada wemos kamu. I2C merupakan komunikasi data 2 kabel dengan SCK (serial clock) dan SDA (serial data), dimana pada wemos pin SCK = D1 , sedangkan SDA = D2. Untuk mencoba melakukan testing terhadap display oled kamu bisa menggunakan script example pada Library Adafruit_SSD1306 .








catatan: Pada example terdapat kesalahan address dari oled yang dijual dipasaran ( 128 x 64 ) yang seharusnya 0x3C

#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


Lalu mari kita gabungkan 2 koding diatas untuk menampilkan pengukuran sensor suhu DS12B20 pada OLED.


#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>


#define SCREEN_WIDTH 128 // display display width, in pixels
#define SCREEN_HEIGHT 64 // display display height, in pixels

#define SENSOR_PIN D4   // pin sensor DS18B20
#define BUZZER_PIN D5   // pin buzzer

#define display_RESET     -1 // Reset pin 
#define SCREEN_ADDRESS 0x3C ///address i2c oled 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, display_RESET);

OneWire oneWire(SENSOR_PIN);         // setup a oneWire 
DallasTemperature tempSensor(&oneWire); // pass oneWire 



unsigned long previousMillis = 0;

String tempString,tempString1;
float batas = 35;     // batas suhu biar alarm
float tempCelsius;


void setup() {
  Serial.begin(9600);
  pinMode(BUZZER_PIN,OUTPUT);
  digitalWrite(BUZZER_PIN,LOW);

  // initialize display display with address 0x3C for 128x64
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    while (true);
  }

  delay(2000);         // wait for initializing
  display.clearDisplay(); // clear display

  display.setTextSize(1);          // text size
  display.setTextColor(WHITE);     // text color
  
  displayDisplayCenter("Teknik Listrik", 4);
  displayDisplayCenter("Vokasi Unesa 2023",56);

  display.setTextSize(2);
  display.setCursor(0, 32);        // position to display

  tempSensor.begin();     // initialize the sensor
  tempString.reserve(10); // to avoid fragmenting memory when using String


  

  
}

void loop() {
  tempSensor.requestTemperatures();             // send the command to get temperatures
  tempCelsius = tempSensor.getTempCByIndex(0);  // read temperature in Celsius

  
  tempString  = String(tempCelsius, 2); // two decimal places
  tempString += (char)247;
  tempString += "C";
  
  //biar ketumpuk hitam dulu jika suhu nya berubah
  if(tempString != tempString1)
  {
  display.setTextColor(BLACK);
  displayDisplayCenter(tempString1,28);
  }
  
  tempString1= tempString; 
  Serial.println(tempString); // print the temperature in Celsius to Serial Monitor
  
  //lanjut tulis warna putih
  display.setTextColor(WHITE);
  displayDisplayCenter(tempString,28);


  if( tempCelsius >= batas)  //cek alarm vs buzzer
   {

    digitalWrite(BUZZER_PIN,HIGH);
    delay(200);
    digitalWrite(BUZZER_PIN,LOW);
    delay(50);
   }
  
  else digitalWrite(BUZZER_PIN,LOW);
   
}

//function agar tulisan rata tengah (center)

void displayDisplayCenter(String text, int posisi) {
  int16_t x1;
  int16_t y1;
  uint16_t width;
  uint16_t height;

  display.getTextBounds(text, 0, 0, &x1, &y1, &width, &height);

  display.setCursor((SCREEN_WIDTH - width) / 2, posisi);
  display.println(text); // text to display
  display.display();
}

Dan hasilnya menjadi keren seperti ini :




Share:

0 komentar:

Posting Komentar

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (14) antares (11) arduino (28) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (76) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (2) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (8) radio (28) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (94) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika