– Pendahuluan
Pada tutorial ini, kita akan membahas cara menggunakan sensor soil ph parameter tanah 3 in 1 dengan komunikasi Modbus dan RS485 untuk mengukur ph tanah,kelembaban,dan suhu tanah agar tidak menghambat pertumbuhan tanaman . Kita akan menggunakan berbagai platform mikrokontroler seperti Arduino Uno, Arduino Mega, dan ESP32 untuk menghubungkan sensor pH dan membaca data yang dihasilkannya.
– Penjelasan Sensor parameter 3 in 1
Tanah dianggap sebagai media alami untuk pertumbuhan & perkembangan tanaman. Banyak penelitian yang dilakukan untuk menentukan faktor internal kegagalan produksi tanaman petani. Salah satu faktornya adalah keseimbangan alam dalam tanah yang tidak stabil atau tidak subur yang menghambat pertumbuhan tanaman dan perkembangan akar tanaman. Ph adalah keasaman atau kebasaan bahan yang diukur pada skala antara 0 hingga 14. Nilai Ph kurang dari 7 dianggap asam dan lebih dari 7 dianggap basa. Jika skala pH adalah 7 maka bahan tersebut netral. Kondisi tanah yang paling ideal untuk pertumbuhan & perkembangan tanaman adalah tanah netral. Namun, beberapa jenis tanaman masih toleran terhadap tanah dengan Ph sedikit asam dengan pH maksimum 5. Temperature (suhu) adalah ukuran sejauh mana suatu benda atau sistem panas atau dinginnya. Dalam konteks fisika, suhu berkaitan dengan energi kinetik rata-rata partikel dalam suatu materi. Semakin tinggi suhu, semakin cepat gerakan partikel dalam materi tersebut.Kelembaban adalah jumlah uap air yang ada di udara. Kelembaban biasanya diukur dalam dua cara:
Kelembaban Relatif: Perbandingan antara jumlah uap air yang ada di udara dengan jumlah maksimum uap air yang dapat ditahan oleh udara pada suhu tertentu. Kelembaban relatif biasanya dinyatakan dalam persen (%).
Kelembaban Absolut: Jumlah uap air yang ada dalam satuan volume udara, biasanya dinyatakan dalam gram per meter kubik (g/m³).
– Kegunaan Sensor parameter 3in1 dengan Modbus dan RS485
Menggunakan Modbus dan RS485 untuk komunikasi sensor pH memberikan beberapa keuntungan, seperti:
- Komunikasi Jarak Jauh: RS485 memungkinkan komunikasi data pada jarak lebih jauh dibandingkan dengan komunikasi UART atau I2C.
- Kemampuan Multi-Perangkat: Beberapa sensor pH dapat terhubung dalam satu jaringan RS485.
- Keandalan dalam Lingkungan Industri: Modbus RS485 sangatPendahuluan
- Pada tutorial ini, kita akan membahas cara menggunakan sensor soil ph parameter tanah 3 in 1 dengan komunikasi Modbus dan RS485 untuk mengukur ph tanah,kelembaban,dan suhu tanah agar tidak menghambat pertumbuhan tanaman . Kita akan menggunakan berbagai platform mikrokontroler seperti Arduino Uno, Arduino Mega, dan ESP32 untuk menghubungkan sensor pH dan membaca data yang dihasilkannya.
- – Penjelasan Sensor parameter 3 in 1
- Tanah dianggap sebagai media alami untuk pertumbuhan & perkembangan tanaman. Banyak penelitian yang dilakukan untuk menentukan faktor internal kegagalan produksi tanaman petani. Salah satu faktornya adalah keseimbangan alam dalam tanah yang tidak stabil atau tidak subur yang menghambat pertumbuhan tanaman dan perkembangan akar tanaman. Ph adalah keasaman atau kebasaan bahan yang diukur pada skala antara 0 hingga 14. Nilai Ph kurang dari 7 dianggap asam dan lebih dari 7 dianggap basa. Jika skala pH adalah 7 maka bahan tersebut netral. Kondisi tanah yang paling ideal untuk pertumbuhan & perkembangan tanaman adalah tanah netral. Namun, beberapa jenis tanaman masih toleran terhadap tanah dengan Ph sedikit asam dengan pH maksimum 5. Temperature (suhu) adalah ukuran sejauh mana suatu benda atau sistem panas atau dinginnya. Dalam konteks fisika, suhu berkaitan dengan energi kinetik rata-rata partikel dalam suatu materi. Semakin tinggi suhu, semakin cepat gerakan partikel dalam materi tersebut.Kelembaban adalah jumlah uap air yang ada di udara. Kelembaban biasanya diukur dalam dua cara:
- Kelembaban Relatif: Perbandingan antara jumlah uap air yang ada di udara dengan jumlah maksimum uap air yang dapat ditahan oleh udara pada suhu tertentu. Kelembaban relatif biasanya dinyatakan dalam persen (%).
- Kelembaban Absolut: Jumlah uap air yang ada dalam satuan volume udara, biasanya dinyatakan dalam gram per meter kubik (g/m³).
- – Kegunaan Sensor parameter 3in1 dengan Modbus dan RS485
- Menggunakan Modbus dan RS485 untuk komunikasi sensor pH memberikan beberapa keuntungan, seperti: handal dan tahan terhadap gangguan elektromagnetik yang sering ditemukan dalam lingkungan industri.
Dengan menggunakan Modbus, data sensor pH dapat dengan mudah dikirim ke perangkat lain seperti PLC (Programmable Logic Controller), HMI (Human Machine Interface), atau mikrokontroler untuk pemrosesan lebih lanjut.
Penjelasan tentang kabel sensor Anemometer

– Cara Penggunaan dengan Arduino Uno
Arduino Uno adalah salah satu board mikrokontroler yang paling banyak digunakan. Untuk menghubungkan sensor pH dengan Arduino Uno
Wiring: Arduino uno menggunakan lcd

- Modul RS485 dihubungkan ke pin serial Arduino, yaitu pin RX (9) dan TX (10).
- Sensor pH dihubungkan ke modul RS485, yang kemudian akan mengirimkan data parameter dalam format Modbus.
Langkah-Langkah Penggunaan:
- Gunakan kode untuk membaca data parameter dan menampilkan hasilnya di serial monitor.
- Pastikan konfigurasi baud rate (9600), ID perangkat, dan pengaturan lainnya sesuai dengan sensor pH Anda.
- Gunakan kode untuk membaca data pH dan menampilkan hasilnya di serial monitor dan lcd.
#define EN_RS485 8
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
const int col = 16;
const int row = 2;
LiquidCrystal_I2C lcd(0x27, col, row);
ModbusMaster node;
SoftwareSerial mySerial(9, 10); // RX, TX
#define SLAVE_ADDR ((uint16_t)0x01)
uint16_t nilai;
float ph;
float kel;
float T;
void preTransmission() {
digitalWrite(EN_RS485, 1);
}
void postTransmission() {
digitalWrite(EN_RS485, 0);
}
void setup() {
// put your setup code here, to run once:
pinMode(EN_RS485, OUTPUT);
lcd.init();
//lcd.begin();
lcd.backlight();
lcd.setCursor(5, 0);
lcd.print("TEMINS");
lcd.setCursor(5, 1);
lcd.print("STORE");
delay(3000);
lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("PARAMETER SENSOR");
delay(3000);
Serial.begin(9600);
mySerial.begin(4800);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
node.begin(SLAVE_ADDR, mySerial);
delay(100);
}
void loop() {
// put your main code here, to run repeatedly:
lcd.backlight();
lcd.setCursor(5, 1);
lcd.print("ph:");
lcd.print(ph);
lcd.setCursor(0, 0);
lcd.print("H:");
lcd.print(kel);
lcd.print("%");
lcd.setCursor(8, 0);
lcd.print("T:");
lcd.print(T);
lcd.print("C");
delay(10000);
ph = baca_sensor(3) / 10.0;
kel = baca_sensor(0) / 10.0;
T = baca_sensor(1) / 10.0;
Serial.println("pH : " + String(ph));
Serial.println("H : " + String(kel));
Serial.println("T : " + String(T));
delay(5);
Serial.println("=========================");
delay(100);
}
int baca_sensor(uint16_t alamat) {
int result;
result = node.readHoldingRegisters(alamat, 1);
if (result == node.ku8MBSuccess) {
nilai = node.getResponseBuffer(0);
} else {
Serial.println("modbus fail");
}
return nilai;
}
wiring arduino menggunakan serial monitor
- Modul RS485 dihubungkan ke pin serial Arduino, yaitu pin RX (9) dan TX (10).
- Sensor pH dihubungkan ke modul RS485, yang kemudian akan mengirimkan data parameter dalam format Modbus
Langkah-Langkah Penggunaan:
- Gunakan kode untuk membaca data parameter dan menampilkan hasilnya di serial monitor.
- Pastikan konfigurasi baud rate (9600), ID perangkat, dan pengaturan lainnya sesuai dengan sensor pH Anda.
- Gunakan kode untuk membaca data pH dan menampilkan hasilnya di serial monitor

#define EN_RS485 8
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
ModbusMaster node;
SoftwareSerial mySerial(9, 10); // RX, TX
#define SLAVE_ADDR ((uint16_t)0x01)
uint16_t nilai;
float ph;
float kel;
float t;
void preTransmission() {
digitalWrite(EN_RS485, 1);
}
void postTransmission() {
digitalWrite(EN_RS485, 0);
}
void setup() {
// put your setup code here, to run once:
pinMode(EN_RS485, OUTPUT);
Serial.begin(9600);
mySerial.begin(4800);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
node.begin(SLAVE_ADDR, mySerial);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
ph = baca_sensor(3) / 10.0;
kel = baca_sensor(0) / 10.0;
t = baca_sensor(1) / 10.0;
Serial.println("pH : " + String(ph));
Serial.println("H : " + String(kel));
Serial.println("C : " + String(t));
delay(5);
Serial.println("============================================");
delay(1000);
}
int baca_sensor(uint16_t alamat) {
int result;
result = node.readHoldingRegisters(alamat, 1);
if (result == node.ku8MBSuccess) {
nilai = node.getResponseBuffer(0);
} else {
Serial.println("modbus fail");
}
return nilai;
}
Cara Penggunaan dengan ESP32
ESP32 adalah mikrokontroler yang lebih canggih dengan konektivitas Wi-Fi dan Bluetooth. Dengan ESP32, Anda dapat mengirimkan data pH ke server atau aplikasi web melalui jaringan.
Wiring: ESP32 menggunakan lcd

- Modul RS485 dihubungkan ke ESP32 menggunakan pin UART yang tersedia (misalnya, GPIO 16 untuk RX dan GPIO 17 untuk TX).
- Hubungkan sensor pH ke modul RS485.
Langkah-Langkah Penggunaan:
- Instal library software serial khusus esp 32 agar serial nya terbaca.
- Tentukan baud rate di 9600 pada pengaturan serial monitor dan anda juga bisa memaca di lcd yang sudah terpasang
- Gunakan ESP32 untuk membaca data pH sesuai kebutuhan.
#define EN_RS485 18
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
const int col = 16;
const int row = 2;
LiquidCrystal_I2C lcd(0x27, col, row);
ModbusMaster node;
SoftwareSerial mySerial(16, 17); // RX, TX
#define SLAVE_ADDR ((uint16_t)0x01)
uint16_t nilai;
float ph;
float kel;
float T;
void preTransmission() {
digitalWrite(EN_RS485, 1);
}
void postTransmission() {
digitalWrite(EN_RS485, 0);
}
void setup() {
// put your setup code here, to run once:
pinMode(EN_RS485, OUTPUT);
lcd.begin();
lcd.backlight();
lcd.setCursor(5, 0);
lcd.print("TEMINS");
lcd.setCursor(5, 1);
lcd.print("STORE");
delay(3000);
lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("PARAMETER SENSOR");
delay(3000);
Serial.begin(9600);
mySerial.begin(4800);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
node.begin(SLAVE_ADDR, mySerial);
delay(100);
}
void loop() {
// put your main code here, to run repeatedly:
lcd.backlight();
lcd.setCursor(5, 1);
lcd.print("ph:");
lcd.print(ph);
lcd.setCursor(0, 0);
lcd.print("H:");
lcd.print(kel);
lcd.print("%");
lcd.setCursor(8, 0);
lcd.print("T:");
lcd.print(T);
lcd.print("C");
delay(10000);
ph = baca_sensor(3) / 10.0;
kel = baca_sensor(0) / 10.0;
T = baca_sensor(1) / 10.0;
Serial.println("pH : " + String(ph));
Serial.println("H : " + String(kel));
Serial.println("T : " + String(T));
delay(5);
Serial.println("=========================");
delay(100);
}
int baca_sensor(uint16_t alamat) {
int result;
result = node.readHoldingRegisters(alamat, 1);
if (result == node.ku8MBSuccess) {
nilai = node.getResponseBuffer(0);
} else {
Serial.println("modbus fail");
}
return nilai;
}
wiring diagram esp 32 menggunakan serial monitor

- Modul RS485 dihubungkan ke ESP32 menggunakan pin UART yang tersedia (misalnya, GPIO 16 untuk RX dan GPIO 17 untuk TX).
- Hubungkan sensor pH ke modul RS485.
Langkah-Langkah Penggunaan:
- Instal library software serial khusus esp 32 agar serial nya terbaca.
- Tentukan baud rate di 9600 pada pengaturan serial monitor
- Gunakan ESP32 untuk membaca data pH sesuai kebutuhan.
#define EN_RS485 18
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
ModbusMaster node;
SoftwareSerial mySerial(16, 17); // RX, TX
#define SLAVE_ADDR ((uint16_t)0x01)
uint16_t nilai;
float ph;
float kel;
float t;
void preTransmission() {
digitalWrite(EN_RS485, 1);
}
void postTransmission() {
digitalWrite(EN_RS485, 0);
}
void setup() {
// put your setup code here, to run once:
pinMode(EN_RS485, OUTPUT);
Serial.begin(9600);
mySerial.begin(4800);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
node.begin(SLAVE_ADDR, mySerial);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
ph = baca_sensor(3) / 10.0;
kel = baca_sensor(0) / 10.0;
t = baca_sensor(1) / 10.0;
Serial.println("pH : " + String(ph));
Serial.println("H : " + String(kel));
Serial.println("C : " + String(t));
delay(5);
Serial.println("============================================");
delay(1000);
}
int baca_sensor(uint16_t alamat) {
int result;
result = node.readHoldingRegisters(alamat, 1);
if (result == node.ku8MBSuccess) {
nilai = node.getResponseBuffer(0);
} else {
Serial.println("modbus fail");
}
return nilai;
}
Cara Penggunaan dengan Arduino Mega
Arduino Mega memiliki lebih banyak pin dan lebih banyak port serial dibandingkan dengan Arduino Uno, yang membuatnya lebih fleksibel untuk aplikasi dengan banyak perangkat RS485.
Wiring: Arduino Mega menggunakan serial monitor

- Hubungkan Modul RS485 ke port serial tambahan di Arduino Mega, seperti pin TX1 (18), RX1 (19), atau port lainnya.
- Sensor pH tetap terhubung ke modul RS485.
Langkah-Langkah Penggunaan:
- Sama seperti pada Arduino Uno, instal pustaka Modbus RTU.
- Pilih port serial yang tepat sesuai dengan pin yang digunakan di Arduino Mega.
#define EN_RS485 10
#include <ModbusMaster.h>
ModbusMaster node;
#define SLAVE_ADDR ((uint16_t)0x01)
uint16_t nilai;
float ph;
float kel;
float t;
void preTransmission() {
digitalWrite(EN_RS485, 1);
}
void postTransmission() {
digitalWrite(EN_RS485, 0);
}
void setup() {
// put your setup code here, to run once:
pinMode(EN_RS485, OUTPUT);
Serial.begin(9600);
Serial1.begin(4800);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
node.begin(SLAVE_ADDR, Serial1);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
ph = baca_sensor(3) / 10.0;
kel = baca_sensor(0) / 10.0;
t = baca_sensor(1) / 10.0;
Serial.println("pH : " + String(ph));
Serial.println("H : " + String(kel));
Serial.println("C : " + String(t));
delay(5);
Serial.println("============================================");
delay(1000);
}
int baca_sensor(uint16_t alamat) {
int result;
result = node.readHoldingRegisters(alamat, 1);
if (result == node.ku8MBSuccess) {
nilai = node.getResponseBuffer(0);
} else {
Serial.println("modbus fail");
}
return nilai;
}
Wiring: Arduino Mega menggunakan LCD

- Hubungkan Modul RS485 ke port serial tambahan di Arduino Mega, seperti pin TX1 (18), RX1 (19), atau port lainnya.
- Sensor pH tetap terhubung ke modul RS485.
Langkah-Langkah Penggunaan:
- Sama seperti pada Arduino Uno, instal pustaka Modbus RTU.
- Pilih port serial yang tepat sesuai dengan pin yang digunakan di Arduino Mega.
#define EN_RS485 10
#include <ModbusMaster.h>
#include <LiquidCrystal_I2C.h>
const int col = 16;
const int row = 2;
LiquidCrystal_I2C lcd(0x27, col, row);
ModbusMaster node;
#define SLAVE_ADDR ((uint16_t)0x01)
uint16_t nilai;
float ph;
float kel;
float t;
void preTransmission() {
digitalWrite(EN_RS485, 1);
}
void postTransmission() {
digitalWrite(EN_RS485, 0);
}
void setup() {
// put your setup code here, to run once:
pinMode(EN_RS485, OUTPUT);
//lcd.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(5, 0);
lcd.print("TEMINS");
lcd.setCursor(5, 1);
lcd.print("STORE");
delay(3000);
lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("PARAMETER SENSOR");
delay(3000);
Serial.begin(9600);
Serial1.begin(4800);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
node.begin(SLAVE_ADDR, Serial1);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
lcd.backlight();
lcd.setCursor(5, 1);
lcd.print("ph:");
lcd.print(ph);
lcd.setCursor(0, 0);
lcd.print("H:");
lcd.print(kel);
lcd.print("%");
lcd.setCursor(8, 0);
lcd.print("T:");
lcd.print(t);
lcd.print("C");
ph = baca_sensor(3) / 10.0;
kel = baca_sensor(0) / 10.0;
t = baca_sensor(1) / 10.0;
Serial.println("pH : " + String(ph));
Serial.println("H : " + String(kel));
Serial.println("C : " + String(t));
delay(5);
Serial.println("============================================");
delay(1000);
}
int baca_sensor(uint16_t alamat) {
int result;
result = node.readHoldingRegisters(alamat, 1);
if (result == node.ku8MBSuccess) {
nilai = node.getResponseBuffer(0);
} else {
Serial.println("modbus fail");
}
return nilai;
}