Bukan Cuma PLC! Arduino Mega Bisa Baca Sensor 4–20 mA (Modbus RTU – Industrial Approach)

Tujuan Praktikum
Setelah praktikum ini, peserta mampu:
- Memahami pembacaan sensor industri 4–20 mA menggunakan Arduino Mega
- Menggunakan Modbus RTU (RS485) sebagai standar komunikasi industri
- Mengkonfigurasi dan membaca converter Analog 4–20 mA ke Modbus RTU
- Menerapkan alur industri yang benar (controller → field device)
Dasar Teori Singkat
Sensor 4–20 mA di Industri
Sensor 4–20 mA digunakan karena:
- Tahan noise
- Stabil untuk jarak jauh
- Mudah mendeteksi fault (0 mA = error)
Kenapa Menggunakan Modbus RTU?
Pendekatan industri tidak membaca arus langsung ke mikrokontroler, melainkan:
- Sensor → converter → data digital (Modbus)
- Lebih aman, rapi, dan scalable
Arsitektur Sistem (WAJIB DIPAHAMI)
Alur Sistem yang Digunakan

📌 Catatan penting:
Arduino tidak membaca 4–20 mA secara langsung, tetapi membaca register Modbus dari converter.
Alat dan Bahan (REVISI)
Hardware
- Arduino Mega 2560
- Sensor THD WD1-C (Temperature & Humidity, output 4–20 mA)
- Analog 8CH to Modbus RTU Converter – Waveshare
- TTL to RS485 Converter – Waveshare
- Power supply 24V DC (sensor & converter)
- Kabel jumper & kabel RS485 (A/B)
Software
- Arduino IDE
- Library Modbus Master (contoh: ModbusMaster)
Wiring Sistem
A. Arduino Mega → TTL to RS485
| Arduino Mega | TTL–RS485 |
| TX1 (18) | TX |
| RX1 (19) | RX |
| GND | GND |
| 5V | VCC |
B. TTL to RS485 → Converter Analog Waveshare
| RS485 Line | Converter |
| A (D+) | A |
| B (D-) | B |
📌 Pastikan:
- Baudrate sama
- Slave ID diketahui
C. Converter Analog → Sensor THD WD1-C
| Sensor THD WD1-C | Converter |
| +24V | +24V |
| I+ (4–20 mA) | AI+ |
| I− | AI− |
| GND | GND |
Konfigurasi Converter Analog Waveshare
Contoh parameter umum:
- Baudrate : 9600
- Data bit : 8
- Parity : None
- Stop bit : 1
- Slave ID : 1
Contoh mapping register (contoh, sesuaikan datasheet):
- Channel 1 → Input Register 30001
- Nilai dalam raw / scaled
Program Arduino Mega (Modbus RTU)
Contoh Program Dasar
#include <ModbusMaster.h>
#define RX_PIN 19
#define TX_PIN 18
ModbusMaster node;
void setup() {
Serial.begin(9600);
Serial1.begin(9600); // UART1 Arduino Mega
node.begin(1, Serial1); // Slave ID = 1
}
void loop() {
uint8_t result;
uint16_t data;
result = node.readInputRegisters(0x0000, 1); // Register 30001
if (result == node.ku8MBSuccess) {
data = node.getResponseBuffer(0);
Serial.print("Raw Value: ");
Serial.println(data);
} else {
Serial.println("Modbus Read Failed");
}
delay(1000);
}Setting Mode Kanal Converter ke 4–20 mA
Modul Waveshare Modbus RTU Analog Input dikirim dengan mode bawaan 0–20 mA. Mode setiap kanal disimpan di holding register 0x1000–0x1007 (kanal 1–8) dengan nilai:
| Nilai | Mode |
|---|---|
| 0x0000 | 0–5 V |
| 0x0001 | 1–5 V |
| 0x0002 | 0–20 mA |
| 0x0003 | 4–20 mA |
| 0x0004 | Kode mentah 0–4096 |
Kanal 1 dapat diubah ke mode 4–20 mA dari Arduino dengan FC06 (cukup sekali, nilai tersimpan di modul):
node.writeSingleRegister(0x1000, 0x0003); // kanal 1 = 4-20 mAPada mode arus, nilai input register dibaca dalam satuan µA (mis. 12000 = 12 mA). Kode mentah 0–4096 hanya muncul pada mode 0x0004.
Konversi ke Suhu dan Kelembapan
Membaca dua kanal sekaligus (kanal 1 = suhu, kanal 2 = kelembapan) dan mengubahnya ke satuan teknik. Range di bawah adalah contoh untuk WD1-C; sesuaikan dengan datasheet sensor Anda.
uint8_t hasil = node.readInputRegisters(0x0000, 2);
if (hasil == node.ku8MBSuccess) {
float mA_t = node.getResponseBuffer(0) / 1000.0;
float mA_h = node.getResponseBuffer(1) / 1000.0;
if (mA_t < 3.8 || mA_t > 20.5) {
Serial.println("Sensor suhu FAULT (kabel putus/short)");
} else {
float suhu = (mA_t - 4.0) / 16.0 * (60.0 - (-19.9)) + (-19.9);
float rh = (mA_h - 4.0) / 16.0 * 99.9;
Serial.print("Suhu: "); Serial.print(suhu, 1);
Serial.print(" C | RH: "); Serial.print(rh, 1); Serial.println(" %");
}
}Catatan Wiring TTL–RS485
- Label pin modul TTL–RS485 berbeda antar produsen: sebagian ditulis dari sisi mikrokontroler (TX ke TX), sebagian dari sisi modul (TX ke RX). Jika tidak ada respons, tukar sambungan TX1/RX1 terlebih dahulu sebelum mengecek hal lain.
- Arduino Mega bekerja di 5 V, sehingga modul TTL–RS485 5 V bisa langsung dipakai. Untuk ESP32 (3,3 V), gunakan modul yang mendukung logika 3,3 V.
- Jika memakai modul MAX485 dengan pin DE/RE, aktifkan fungsi
preTransmission/postTransmissiondi library ModbusMaster.
Arduino Mega vs ESP32 untuk Aplikasi Ini
| Aspek | Arduino Mega 2560 | ESP32 |
|---|---|---|
| UART hardware | 4 (Serial0–3) | 3 (pin bisa dipetakan) |
| Logika | 5 V | 3,3 V |
| Konektivitas | Perlu modul tambahan | Wi-Fi & Bluetooth bawaan |
| Cocok untuk | Pembelajaran, data logger lokal, banyak port serial | Mengirim data ke cloud/MQTT |
Pembahasan lanjutan: rumus scaling 4–20 mA dan deteksi sensor putus atau short.
Pengujian Praktikum
- Nyalakan power supply 24V
- Jalankan program Arduino
- Ubah kondisi suhu/kelembaban sensor
- Amati perubahan nilai register di Serial Monitor
Expected Result
- Nilai berubah stabil
- Tidak ada lonjakan ekstrem
- Data konsisten dengan kondisi sensor
Kesalahan Umum (WAJIB DIHINDARI)
❌ Salah wiring A/B RS485
❌ Ground tidak common
❌ Salah register address
❌ Baudrate tidak sama
❌ Menganggap Arduino membaca arus langsung
Kesimpulan
Dengan pendekatan ini, Arduino Mega dapat membaca sensor industri 4–20 mA dengan cara yang BENAR secara industri, yaitu melalui Modbus RTU RS485. Metode ini aman, stabil, dan cocok untuk monitoring, data logging, dan IoT industri.
Pengembangan Lanjutan
- Arduino Mega → HMI / SCADA
- Arduino → Raspberry Pi (IoT Gateway)
- Logging ke database / cloud
Baca juga:
— Training ESP32 Berbasis IoT – Pelatihan Praktis & Bersertifikat
— Training IoT Profesional – Pelatihan Online & Onsite Bersertifikat
Baca juga: Ingin Jadi Ahli IoT & Otomasi? Semua Bisa Dimulai dari Arduino! untuk memahami roadmap lengkap belajar Arduino dari dasar hingga proyek IoT.




