Monitoring Suhu & Kelembaban 4–20 mA Menggunakan ESP32 via RS485 (Modbus RTU)

🎯 Tujuan Praktikum

Mahasiswa mampu:

  1. Memahami karakteristik sensor industri Autonics WD1-C (4–20 mA)
  2. Menggunakan converter Analog→RS485 secara benar dan aman
  3. Membaca data Modbus RTU di ESP32
  4. Mengonversi data digital → arus (mA)suhu (°C) & kelembaban (%RH)

⚠️ PERINGATAN PENTING

  • ESP32 tidak boleh membaca 4–20 mA langsung
  • Gunakan converter Analog→RS485 untuk keamanan & keandalan industri
  • ⚠️ Pastikan ground common antar perangkat

📚 Dasar Teori Singkat

  • Autonics WD1-C: sensor suhu & kelembaban output 4–20 mA (masing-masing kanal)
  • Waveshare Analog to RS485 (12-bit): mengubah arus menjadi data digital 0–4095 via Modbus RTU
  • ESP32: bertindak sebagai Modbus Master (UART/TTL)

🧩 Arsitektur Sistem

Arsitektur

 

 

 

🧰 Alat dan Bahan

No Alat / Bahan
1 ESP32 Dev Board
2 Autonics WD1-C (Suhu & Kelembaban, 4–20 mA)
3 Waveshare Analog to RS485 (12-bit)
4 Converter RS485 to TTL
5 Power Supply 24 VDC
6 Kabel & multimeter

🔌 Wiring Detail

1️ Autonics WD1-C → Waveshare

(Periksa label terminal WD1-C Anda; umumnya terpisah per kanal)

WD1-C Waveshare
OUT Temp + (4–20 mA) IN1+
OUT Temp − IN1−
OUT RH + (4–20 mA) IN2+
OUT RH − IN2−
Power Sensor 24 VDC

Catatan: Jika modul Waveshare hanya 1 kanal, lakukan praktikum bergantian (Temp lalu RH).

2️ Waveshare → RS485 to TTL

Waveshare RS485-TTL
A A
B B
GND GND

3️ RS485-TTL → ESP32

RS485-TTL ESP32
TX GPIO 16 (RX2)
RX GPIO 17 (TX2)
GND GND

⚙️ Konfigurasi Modbus (Waveshare)

  • Slave ID: 1
  • Baudrate: 9600
  • Parity: None
  • Stop Bit: 1
  • Mode: Modbus RTU

📊 Peta Register (Contoh Umum)

Sesuaikan dengan datasheet modul Waveshare Anda

Kanal Register Resolusi
CH1 (Temp) 0x0000 0–4095
CH2 (RH) 0x0001 0–4095

🔄 Konversi Data

  1. Raw (0–4095)Arus (mA)
    Rumus1
  2. Arus → Nilai Fisik (Contoh Umum WD1-C)

💻 Program ESP32 (Arduino IDE)

#include <ModbusMaster.h>

#define RX_PIN 17

#define TX_PIN 16

#define DE_PIN 5 // pin for RS485 direction control (optional)

ModbusMaster modbus;

void setup() {

  Serial.begin(9600);

  Serial2.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);

  pinMode(DE_PIN, OUTPUT); // set DE pin as output (if using)

  digitalWrite(DE_PIN, LOW); // set DE pin low (if using)

}

void loop() {

  uint16_t rawTemp, rawHum;

  // Read holding register from slave 1

  modbus.begin(1, Serial2); // set slave ID to 1 and use Serial2 as the communication port

  uint8_t rc = modbus.readInputRegisters (0, 2); // read 5 holding register starting from address 0

  if (rc == modbus.ku8MBSuccess) {

    rawTemp = modbus.getResponseBuffer(0);

    rawHum  = modbus.getResponseBuffer(1);

    float mA_temp = rawTemp /1000.0 ;

    float mA_hum  = rawHum /1000.0;

    float tempC = (mA_temp - 4.0) / 16.0 * 79.9 - 19.9;

    float humRH = (mA_hum - 4.0) / 16.0 * 99.9;

    Serial.print("Temperature: ");

    Serial.print(tempC);

    Serial.println(" C");

    Serial.print("Humidity: ");

    Serial.print(humRH);

    Serial.println(" %RH");




  } else {

    Serial.print("Slave 1: Error reading holding register: ");

    Serial.println(rc);

  }/*




*/

   

  delay(1000); // delay for 1 second

}

🧪 Tugas Praktikum

  1. Verifikasi nilai dengan Modbus Poll
  2. Bandingkan hasil Modbus Poll vs ESP32
  3. Ubah range suhu/RH sesuai datasheet WD1-C
  4. Analisis resolusi 12-bit & error

Kesalahan Umum

  • A/B RS485 terbalik → No response
  • Slave ID/baud beda → Timeout/CRC error
  • Ground tidak common → Data tidak stabil

Kesimpulan

  • Sistem aman & industrial-grade
  • ESP32 tidak menyentuh analog
  • Siap dikembangkan ke PLC / SCADA / IIoT

🚀 Pengembangan Lanjutan

  • Logging ke MQTT / Node-RED
  • Integrasi PLC Siemens/Omron
  • Isolator RS485 untuk lingkungan bising
  • Kalibrasi & alarm threshold

 

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *