Menggunakan Sensor DS18B20 Pada ESP32

Pendahuluan

Sensor DS18B20 dapat mengukur suhu dengan rentang -55°C sampai +125°C dengan akurasi ±0.5°C untuk temperature antara -10°C dan +85°C. Cocok digunakan untuk aplikasi yang membutuhkan akurasi yang lebih tinggi.

DS18B20 menggunakan 1-Wire bus system dan dengan protokol komunikasi 64-bit addressing, jadi multiple DS18B20s dapat menggunakan saluran komunikasi yang sama.

DS18B20

Component

  • DS18B20 sensor.
  • 4.7 kΩ pull-up resistor.

Diagram

Code

File driver sama dengan external library dari modul sebelumnya.

Kita juga perlu mengatur platformio.ini

monitor_speed = 115200
lib_extra_dirs =
../../esp-idf-lib/components

Buka file main.c, gunakan code berikut

//bagian import library
#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <ds18x20.h>
#define SENSOR_PIN 21
#define MAX_SENSORS 8
static ds18x20_addr_t addrs[MAX_SENSORS];
static int sensor_count = 0;
static float temps[MAX_SENSORS];

//bagian init hardware
static void init_hw(void)
{
    while (sensor_count == 0)
    {
        sensor_count = ds18x20_scan_devices((gpio_num_t)SENSOR_PIN, addrs, MAX_SENSORS);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    if (sensor_count > MAX_SENSORS)
    {
        sensor_count = MAX_SENSORS;
    }
}

//bagian main function
void app_main()
{
    init_hw();
    while (1)
    {
        ds18x20_measure_and_read_multi((gpio_num_t)SENSOR_PIN,
        addrs, sensor_count, temps);
        for (int i = 0; i < sensor_count; i++)
        {
            printf("sensor-id: %08x temp: %fC\n", (uint32_t)
            addrs[i], temps[i]);
        }
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

Penjelasan Code

Bagian import library

Untuk driver, include ds18x20.h header file. Type untuk addressing adalah ds18x20_addr_t, berupa 64-bit unsigned integer yang didefinsikan pada header file.

Pada contoh, kita alokasikan arrays dengan ukuran 8 untuk menyimpan addresses dan temperature readings.

Bagian Init Hardware

Pada init_hw function, kita scan 1-wire bus untuk sensor dengan memanggil perintah ds18x20_scan_devices. Parameter yang diperlukan GPIO pin dimana sensors terhubung dan isi addrs dengan array sensor addresses.

Bagian Main App

app_main function akan berisi while loop untuk membaca sensors. Fungsi yang digunakan adalah ds18x20_measure_and_read_multi, parameter yang digunakan adalah GPIO pin dimana sensors terhubung, addresses dan array untuk menyimpan hasil readings.

Tips

Jika anda menggunakan single DS18B20 sensor, Anda dapat gunakan fungsi ds18x20_read_temperature, dengan sensor address adalah ds18x20_ANY. Jadi kita tidak perlu melakukan bus scan untuk menemukan addresses.

Sampai disini kita sudah mempelajari bagaimana menggunakan sensor suhu yang lebih akurat. Pada modul berikutnya kita akan mempelajari sensor cahaya.

Sharing is caring:

Leave a Comment