Sensor pH adalah perangkat yang digunakan untuk mengukur tingkat keasaman atau kebasaan (alkalinitas) suatu larutan, yang dinyatakan dalam skala pH.Berikut ini adalah code untuk memprogramnya :
#include <Arduino.h>
const int port_sensor_ph = A0;
float nilai_ph7 = 3.81; //cari dari kalibrasi
float nilai_ph4 = 4.95; //cari dari kalibrasi
float ph_step;
void kalibrasi_sensor_ph(){
//berfungsi untuk mencari volt ph4 dan ph7
int ph;
float volt;
// catatan
// ph 7 = 3.81
// ph 4 = 4.95
//tutorial
// pakai pin 5 volt, walau dari board 3.3 (pake shield)
// 1. sambungkan bagian tengah bnc ke gnd, putar trimpot sampai volt = 1/2 dari volt microcontroller
// 2. putar sampe mentok volt terkecil (utar ke kiri) (mau 2.5 atau 3.5 terserah), lalu lepaskan sambungan.
// 3. sambungkan sensor PH, masukan ke cairan PH4, catat voltnya, lalu dibilas, lalu masukan ke ph7, catat voltnya
ph = analogRead(port_sensor_ph);
volt = ph * (5.0 / 4095.0); // menggunakan 4095 untuk resolusi 12-bit (esp32), pake 1023 untuk esp8266
Serial.println(volt);
delay(100);
}
float baca_sensor_ph() {
int data = analogRead(port_sensor_ph);
float tegangan = 5.0 / 4095.0 * data;
float po = 7.00 + ((nilai_ph7 - tegangan) / ph_step);
return po;
}
void setup()
{
Serial.begin(9600);
pinMode(port_sensor_ph, INPUT);
ph_step = (nilai_ph4 - nilai_ph7) / 3.0;
}
void loop(){
float pHValue = baca_sensor_ph();
Serial.println("PH: " + (String)pHValue);
}
Berikut ini adalah penjelasan dari kode di atas :
1. Inklusi Library dan Deklarasi Variabel Global
C++
#<strong>include</strong> <Arduino.h>
const int port_sensor_ph = A0;
float nilai_ph7 = 3.81; //cari dari kalibrasi
float nilai_ph4 = 4.95; //cari dari kalibrasi
float ph_step;
#include <Arduino.h>: Ini adalah library standar yang wajib ada di setiap program Arduino.const int port_sensor_ph = A0;: Mendeklarasikan konstanta integerport_sensor_phdan menetapkannya ke pin analog A0. Pin ini akan terhubung ke pin output analog dari modul driver sensor pH (bukan langsung ke probe pH).float nilai_ph7 = 3.81; //cari dari kalibrasi: Mendeklarasikan variabel floating-pointnilai_ph7dan menginisialisasikannya dengan3.81. Variabel ini akan menyimpan nilai tegangan yang dibaca dari sensor ketika probe dicelupkan ke dalam larutan pH 7 setelah kalibrasi awal. Komentar//cari dari kalibrasisangat penting, karena nilai ini harus Anda dapatkan sendiri dari proses kalibrasi aktual.float nilai_ph4 = 4.95; //cari dari kalibrasi: Mendeklarasikan variabel floating-pointnilai_ph4dan menginisialisasikannya dengan4.95. Variabel ini akan menyimpan nilai tegangan yang dibaca dari sensor ketika probe dicelupkan ke dalam larutan pH 4 setelah kalibrasi awal. Sekali lagi, nilai ini juga harus Anda dapatkan sendiri dari kalibrasi.float ph_step;: Mendeklarasikan variabel floating-pointph_step. Variabel ini akan menyimpan nilai yang merepresentasikan perubahan tegangan per unit pH. Ini dihitung dari dua titik kalibrasi (pH 7 dan pH 4).
2. Fungsi kalibrasi_sensor_ph()
C++
void kalibrasi_sensor_ph(){
//berfungsi untuk mencari volt ph4 dan ph7
int ph;
float volt;
// catatan
// ph 7 = 3.81
// ph 4 = 4.95
//tutorial
// pakai pin 5 volt, walau dari board 3.3 (pake shield)
// 1. sambungkan bagian tengah bnc ke gnd, putar trimpot sampai volt = 1/2 dari volt microcontroller
// 2. putar sampe mentok volt terkecil (utar ke kiri) (mau 2.5 atau 3.5 terserah), lalu lepaskan sambungan.
// 3. sambungkan sensor PH, masukan ke cairan PH4, catat voltnya, lalu dibilas, lalu masukan ke ph7, catat voltnya
ph = analogRead(port_sensor_ph);
volt = ph * (5.0 / 4095.0); // menggunakan 4095 untuk resolusi 12-bit (esp32), pake 1023 untuk esp8266
Serial.println(volt);
delay(100);
}
Fungsi ini (kalibrasi_sensor_ph()) disisipkan dalam kode ini, tetapi tidak dipanggil di setup() atau loop(). Fungsinya adalah sebagai panduan atau utility terpisah yang bisa Anda jalankan (dengan memanggilnya di loop() sementara) untuk membantu Anda menemukan nilai nilai_ph7 dan nilai_ph4 secara manual.
- Komentar dalam fungsi ini menjelaskan prosedur kalibrasi manual yang umum untuk modul sensor pH (seperti DFRobot Analog pH meter atau sejenisnya):
- Pengaturan Offset: Sambungkan output analog sensor ke Ground, lalu putar trimpot (potensiometer) pada modul driver sensor pH hingga pembacaan tegangan sekitar setengah dari tegangan suplai mikrokontroler (misalnya 2.5V untuk 5V, atau 1.65V untuk 3.3V).
- Penyesuaian Tegangan Terendah: Putar trimpot ke arah yang menghasilkan tegangan terendah (biasanya berlawanan arah jarum jam).
- Pengukuran pH 4 dan pH 7: Sambungkan probe pH ke modul. Celupkan probe ke larutan buffer pH 4, tunggu pembacaan stabil, catat nilai tegangannya (ini akan menjadi
nilai_ph4Anda). Bilas probe, lalu celupkan ke larutan buffer pH 7, catat nilai tegangannya (ini akan menjadinilai_ph7Anda).
ph = analogRead(port_sensor_ph);: Membaca nilai ADC mentah dari pin analog A0.volt = ph * (5.0 / 4095.0);: Mengkonversi nilai ADC mentah menjadi tegangan.5.0: Tegangan referensi ADC Arduino (biasanya 5V untuk Arduino Uno).4095.0: Ini adalah nilai maksimum ADC untuk mikrokontroler 12-bit (seperti ESP32) (212−1=4095). Jika Anda menggunakan Arduino Uno/Nano/Mega (yang memiliki ADC 10-bit), Anda harus mengganti4095.0dengan1023.0(210−1=1023). Dalam konteks kode Arduino standar, nilai1023.0lebih umum kecuali Anda menggunakan board ESP32.
Serial.println(volt);: Mencetak nilai tegangan yang diukur ke Serial Monitor.delay(100);: Memberikan jeda 100 milidetik sebelum pembacaan berikutnya.
Penting: Fungsi kalibrasi_sensor_ph() ini hanya untuk membantu Anda mendapatkan nilai tegangan kalibrasi. Setelah Anda mendapatkan nilai nilai_ph7 dan nilai_ph4 yang akurat, Anda akan memasukkannya secara manual ke variabel global di bagian atas kode. Anda tidak perlu memanggil fungsi ini di loop() setelah kalibrasi selesai dan nilai sudah diatur.
3. Fungsi baca_sensor_ph()
C++
float baca_sensor_ph() {
int data = analogRead(port_sensor_ph);
float tegangan = 5.0 / 4095.0 * data;
float po = 7.00 + ((nilai_ph7 - tegangan) / ph_step);
return po;
}
Fungsi ini bertanggung jawab untuk membaca nilai pH aktual berdasarkan kalibrasi yang telah dilakukan.
int data = analogRead(port_sensor_ph);: Membaca nilai ADC mentah dari pin A0.float tegangan = 5.0 / 4095.0 * data;: Mengkonversi nilai ADC mentah ini menjadi tegangan, sama seperti di fungsikalibrasi_sensor_ph(). Pastikan4095.0sesuai dengan resolusi ADC mikrokontroler Anda.float po = 7.00 + ((nilai_ph7 - tegangan) / ph_step);: Ini adalah rumus inti untuk menghitung nilai pH.7.00: Ini adalah titik referensi pH (pH netral).(nilai_ph7 - tegangan): Menghitung selisih antara tegangan yang terukur pada pH 7 (titik kalibrasi) dan tegangan saat ini yang dibaca dari larutan./ ph_step: Membagi selisih tegangan denganph_step(perubahan tegangan per unit pH).- Logika di balik rumus ini adalah:
- Jika tegangan yang terukur sama dengan
nilai_ph7, maka pH adalah 7.00. - Jika tegangan yang terukur lebih kecil dari
nilai_ph7, maka larutan lebih basa dari pH 7, dan hasilnya akan ditambahkan ke 7.00. - Jika tegangan yang terukur lebih besar dari
nilai_ph7, maka larutan lebih asam dari pH 7, dan hasilnya akan dikurangi dari 7.00.
- Jika tegangan yang terukur sama dengan
return po;: Fungsi mengembalikan nilai pH yang telah dihitung.
4. Fungsi setup()
C++
void setup()
{
Serial.begin(9600);
pinMode(port_sensor_ph, INPUT);
ph_step = (nilai_ph4 - nilai_ph7) / 3.0;
}
Serial.begin(9600);: Menginisialisasi komunikasi serial untuk debugging.pinMode(port_sensor_ph, INPUT);: Mengatur pin analog A0 sebagai input untuk membaca sinyal dari sensor pH.ph_step = (nilai_ph4 - nilai_ph7) / 3.0;: Ini adalah perhitunganph_stepyang vital.nilai_ph4 - nilai_ph7: Menghitung total perubahan tegangan antara pH 4 dan pH 7./ 3.0: Membagi perubahan tegangan tersebut dengan selisih unit pH antara 7 dan 4, yaitu 3 (7 – 4 = 3). Hasilnya adalah perubahan tegangan per unit pH.
5. Fungsi loop()
C++
void loop(){
float pHValue = baca_sensor_ph();
Serial.println("PH: " + (String)pHValue);
}
float pHValue = baca_sensor_ph();: Memanggil fungsibaca_sensor_ph()untuk mendapatkan nilai pH yang sudah dihitung dan menyimpannya dalam variabelpHValue.Serial.println("PH: " + (String)pHValue);: Mencetak nilai pH ke Serial Monitor dengan awalan “PH: ” dan kemudian menambahkan baris baru. Ini akan terus-menerus menampilkan pembacaan pH saat program berjalan.
Kesimpulan
Kode ini adalah implementasi sistem pengukuran pH dua titik. Kunci akurasinya terletak pada:
- Kalibrasi yang Tepat: Nilai
nilai_ph7dannilai_ph4harus didapatkan secara akurat dari pengukuran probe di larutan buffer standar. - Resolusi ADC yang Sesuai: Pastikan
4095.0(untuk 12-bit) atau1023.0(untuk 10-bit) sesuai dengan mikrokontroler Anda. - Koneksi Benar: Pastikan output analog dari modul driver sensor pH terhubung ke pin A0 Arduino
untuk diskusi bisa kontak dibawah ini :

Sosial media :





