Sensor pH tanah adalah alat yang digunakan untuk mengukur tingkat keasaman atau kebasaan (pH) tanah. pH tanah adalah salah satu faktor penting dalam pertanian dan kebun karena memengaruhi ketersediaan unsur hara bagi tanaman dan aktivitas mikroorganisme di dalam tanah.Berikut ini adalah code untuk memprogram nya :
#include <Arduino.h>
#define pin_PH_tanah 34 // pin input untuk ADC
#define DMSpin 14 // pin output untuk DMS
float PH_tanah= 0;
void hitung_ph() {
analogReadResolution(10); // mengubah resolusi analog
digitalWrite(DMSpin, LOW); // aktifkan DMS
delay(10 * 1000); // wait DMS capture data
float ADC = analogRead(pin_PH_tanah);
//dibawah ini rumus hasil kalibrasi 28-6-2024
//rumus untuk arduino harus didapat dari kalibrasi, rumus defaultnya (-0.0233 * ADC) + 12.698
PH_tanah = -0.0386 * ADC + 16.030; // ini adalah rumus regresi linier yang wajib anda ganti!
digitalWrite(DMSpin, HIGH);
analogReadResolution(12); // balik awal
delay(3000); // wait for DMS ready
}
void setup()
{
Serial.begin(9600);
pinMode(DMSpin,OUTPUT);
pinMode(pin_PH_tanah,INPUT);
}
void loop(){
hitung_ph();
//saat gak stabil membuat nilai ph -1
if (PH_tanah < 0) {
PH_tanah = -1;
}
Serial.println("nilai PH_tanah : " + String(PH_tanah));
}
Berikut ini adalah penjelasan dari kode di atas :
Bagian Pendefinisian dan Variabel
#define pin_PH_tanah 34 // pin input untuk ADC
#define DMSpin 14 // pin output untuk DMS
float PH_tanah = 0;
pin_PH_tanah
diset ke pin 34 → pin ini digunakan untuk membaca sinyal analog dari sensor pH.DMSpin
diset ke pin 14 → digunakan untuk mengaktifkan atau menonaktifkan sensor pH (DMS).PH_tanah
adalah variabel untuk menyimpan nilai pH hasil pembacaan.
Fungsi hitung_ph()
void hitung_ph() {
analogReadResolution(10); // ubah resolusi ADC jadi 10-bit (0-1023)
digitalWrite(DMSpin, LOW); // aktifkan sensor (DMS aktif saat LOW)
delay(10 * 1000); // tunggu 10 detik agar sensor stabil dan bisa ambil data
float ADC = analogRead(pin_PH_tanah); // baca nilai ADC dari sensor pH
Kalibrasi Sensor
// rumus regresi linier hasil kalibrasi 28-6-2024
PH_tanah = -0.0386 * ADC + 16.030; // harus diganti sesuai hasil kalibrasi sensor masing-masing
- Di sini dilakukan konversi dari nilai ADC menjadi nilai pH aktual berdasarkan rumus kalibrasi linier.
- Rumus
PH_tanah = -0.0386 * ADC + 16.030
berasal dari eksperimen kalibrasi (mungkin menggunakan larutan pH standar). - Contoh rumus default dari sensor serupa adalah
(-0.0233 * ADC) + 12.698
.
digitalWrite(DMSpin, HIGH); // matikan sensor (hemat daya)
analogReadResolution(12); // kembalikan resolusi ADC ke default (12-bit)
delay(3000); // delay agar sensor siap digunakan lagi
}
Fungsi setup()
void setup()
{
Serial.begin(9600); // inisialisasi komunikasi serial
pinMode(DMSpin, OUTPUT); // pin output untuk kontrol sensor
pinMode(pin_PH_tanah, INPUT); // pin input untuk membaca data sensor
}
- Menyiapkan komunikasi serial dan konfigurasi pin input/output.
Fungsi loop()
void loop(){
hitung_ph(); // baca dan hitung nilai pH
if (PH_tanah < 0) {
PH_tanah = -1; // jika nilai pH tidak valid, ubah jadi -1
}
Serial.println("nilai PH_tanah : " + String(PH_tanah)); // cetak hasil ke serial monitor
}
- Fungsi
loop()
akan terus berjalan:- Membaca nilai pH.
- Jika nilai pH negatif (kemungkinan sensor belum stabil), ditetapkan ke
-1
. - Hasilnya ditampilkan lewat Serial Monitor Arduino IDE.
Catatan Tambahan:
- Resolusi ADC:
- 10-bit → nilai ADC dari 0–1023.
- 12-bit → nilai ADC dari 0–4095 (standar di beberapa board seperti ESP32).
- Kalibrasi sangat penting, karena sensor murah bisa punya deviasi besar. Gunakan larutan buffer pH 4, 7, dan 10 untuk kalibrasi yang akurat.
delay(10 * 1000)
artinya tunggu 10 detik. Ini cukup lama dan bisa dioptimalkan.
untuk diskusi bisa kontak dibawah ini :

Sosial media :