Cara Memprogram Sensor Suhu MAX31865 Di ESP32

Cara Memprogram Sensor Suhu MAX31865 Di ESP32

Sensor MAX31865 bukanlah sensor suhu itu sendiri, melainkan modul interface (konverter) yang digunakan untuk membaca data dari sensor suhu RTD (Resistance Temperature Detector) jenis PT100 atau PT1000.Berikut ini adalah code untuk memprogramnya :

#include <Arduino.h>

#include <Adafruit_MAX31865.h>

 
// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 thermo = Adafruit_MAX31865(5, 23, 19, 18);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 thermo = Adafruit_MAX31865(10);
 
// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF      430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL  100.0
 
 

void cek_suhu_max31865(){
uint16_t rtd = thermo.readRTD();
 
  Serial.print("RTD value: "); Serial.println(rtd);
  float ratio = rtd;
  ratio /= 32768;
  Serial.print("Ratio = "); Serial.println(ratio,8);
  Serial.print("Resistance = "); Serial.println(RREF*ratio,8);
  Serial.print("Temperature = "); Serial.println(thermo.temperature(RNOMINAL, RREF));
 
  // Check and print any faults
  uint8_t fault = thermo.readFault();
  if (fault) {
    Serial.print("Fault 0x"); Serial.println(fault, HEX);
    if (fault & MAX31865_FAULT_HIGHTHRESH) {
      Serial.println("RTD High Threshold");
    }
    if (fault & MAX31865_FAULT_LOWTHRESH) {
      Serial.println("RTD Low Threshold");
    }
    if (fault & MAX31865_FAULT_REFINLOW) {
      Serial.println("REFIN- > 0.85 x Bias");
    }
    if (fault & MAX31865_FAULT_REFINHIGH) {
      Serial.println("REFIN- < 0.85 x Bias - FORCE- open");
    }
    if (fault & MAX31865_FAULT_RTDINLOW) {
      Serial.println("RTDIN- < 0.85 x Bias - FORCE- open");
    }
    if (fault & MAX31865_FAULT_OVUV) {
      Serial.println("Under/Over voltage");
    }
    thermo.clearFault();
  }
  Serial.println();
  delay(1000);
 
}



void setup()
{
Serial.begin(9600);
Serial.begin(115200);
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
 
  thermo.begin(MAX31865_3WIRE);  // set to 2WIRE or 4WIRE as necessary

}
void loop(){
cek_suhu_max31865();


}

Berikut ini adalah penjelasan dari kode di atas :

1. Import Library dan Inisialisasi Objek

#include <Arduino.h>
#include <Adafruit_MAX31865.h>
  • Adafruit_MAX31865.h adalah library yang memudahkan penggunaan modul MAX31865 untuk sensor RTD.

2. Inisialisasi Objek Sensor (Software SPI)

Adafruit_MAX31865 thermo = Adafruit_MAX31865(5, 23, 19, 18);
  • Membuat objek thermo untuk sensor MAX31865 dengan menggunakan Software SPI pada pin:
    • CS = 5
    • DI (MOSI) = 23
    • DO (MISO) = 19
    • CLK = 18

Catatan: Jika ingin menggunakan hardware SPI, tinggal pakai baris yang dikomentari (CS saja).


3. Definisi Konstanta

#define RREF      430.0
#define RNOMINAL  100.0
  • RREF: nilai resistor referensi pada modul MAX31865 (biasanya 430 ohm untuk PT100).
  • RNOMINAL: resistansi nominal sensor RTD pada suhu 0°C (100 ohm untuk PT100).

4. Fungsi cek_suhu_max31865()

Fungsi ini membaca nilai dari sensor dan menampilkan data suhu serta status fault.

uint16_t rtd = thermo.readRTD();
Serial.print("RTD value: "); Serial.println(rtd);
  • Membaca nilai RTD mentah (resistansi sensor dalam bentuk digital).
float ratio = rtd;
ratio /= 32768;
Serial.print("Ratio = "); Serial.println(ratio,8);
Serial.print("Resistance = "); Serial.println(RREF*ratio,8);
  • Menghitung rasio nilai RTD terhadap nilai maksimum (32768 = 2^15).
  • Menghitung resistansi aktual sensor dari rasio ini.
Serial.print("Temperature = "); Serial.println(thermo.temperature(RNOMINAL, RREF));
  • Menghitung dan menampilkan suhu (dalam °C) berdasarkan resistansi dan parameter sensor.

5. Deteksi dan Penanganan Fault

uint8_t fault = thermo.readFault();
if (fault) {
  Serial.print("Fault 0x"); Serial.println(fault, HEX);
  if (fault & MAX31865_FAULT_HIGHTHRESH) Serial.println("RTD High Threshold");
  if (fault & MAX31865_FAULT_LOWTHRESH) Serial.println("RTD Low Threshold");
  if (fault & MAX31865_FAULT_REFINLOW) Serial.println("REFIN- > 0.85 x Bias");
  if (fault & MAX31865_FAULT_REFINHIGH) Serial.println("REFIN- < 0.85 x Bias - FORCE- open");
  if (fault & MAX31865_FAULT_RTDINLOW) Serial.println("RTDIN- < 0.85 x Bias - FORCE- open");
  if (fault & MAX31865_FAULT_OVUV) Serial.println("Under/Over voltage");
  thermo.clearFault();
}
  • Membaca register fault.
  • Jika ada fault, mencetak jenis kesalahan:
    • Threshold terlalu tinggi/rendah,
    • Tegangan referensi bermasalah,
    • RTD open circuit,
    • Over/under voltage.
  • Setelah itu fault dibersihkan (clearFault()).

6. Setup

void setup() {
  Serial.begin(9600);
  Serial.begin(115200);  // Perhatikan ini, dua kali Serial.begin, biasanya cukup satu
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
  thermo.begin(MAX31865_3WIRE);  // Mode 3-wire, sesuaikan dengan sensor
}
  • Memulai komunikasi serial.
  • Menginisialisasi sensor MAX31865 dengan mode kabel RTD (2, 3, atau 4-wire).

7. Loop

void loop() {
  cek_suhu_max31865();
}
  • Terus-menerus memanggil fungsi pembacaan suhu dan menampilkan hasil.

Ringkasan

  • Kode ini membaca suhu dari sensor PT100/PT1000 melalui modul MAX31865 menggunakan software SPI.
  • Data mentah resistansi RTD diubah menjadi nilai suhu Celsius.
  • Jika ada kesalahan pada sensor/modul, kode akan mendeteksi dan menampilkan tipe fault tersebut.
  • Pembacaan dilakukan setiap 1 detik.

untuk diskusi bisa kontak dibawah ini :

Sosial media :

Apa itu ESP32?