Cara Memprogram Sensor PH Pada ESP32

Cara Memprogram Sensor PH Pada ESP32

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 integer port_sensor_ph dan 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-point nilai_ph7 dan menginisialisasikannya dengan 3.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 kalibrasi sangat penting, karena nilai ini harus Anda dapatkan sendiri dari proses kalibrasi aktual.
  • float nilai_ph4 = 4.95; //cari dari kalibrasi: Mendeklarasikan variabel floating-point nilai_ph4 dan menginisialisasikannya dengan 4.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-point ph_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):
    1. 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).
    2. Penyesuaian Tegangan Terendah: Putar trimpot ke arah yang menghasilkan tegangan terendah (biasanya berlawanan arah jarum jam).
    3. 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_ph4 Anda). Bilas probe, lalu celupkan ke larutan buffer pH 7, catat nilai tegangannya (ini akan menjadi nilai_ph7 Anda).
  • 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 mengganti 4095.0 dengan 1023.0 (210−1=1023). Dalam konteks kode Arduino standar, nilai 1023.0 lebih 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 fungsi kalibrasi_sensor_ph(). Pastikan 4095.0 sesuai 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 dengan ph_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.
  • 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 perhitungan ph_step yang 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 fungsi baca_sensor_ph() untuk mendapatkan nilai pH yang sudah dihitung dan menyimpannya dalam variabel pHValue.
  • 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:

  1. Kalibrasi yang Tepat: Nilai nilai_ph7 dan nilai_ph4 harus didapatkan secara akurat dari pengukuran probe di larutan buffer standar.
  2. Resolusi ADC yang Sesuai: Pastikan 4095.0 (untuk 12-bit) atau 1023.0 (untuk 10-bit) sesuai dengan mikrokontroler Anda.
  3. Koneksi Benar: Pastikan output analog dari modul driver sensor pH terhubung ke pin A0 Arduino

untuk diskusi bisa kontak dibawah ini :

Sosial media :

Apa itu ESP32?