Pendahuluan

Water Flow Sensor YF-B6 sangat berguna dalam proyek-proyek yang memerlukan pemantauan aliran air, seperti dalam sistem irigasi atau proyek pemantauan konsumsi air.Dalam proyek ini, kita akan menjelaskan langkah-langkah untuk mengakses Water Flow Sensor YF-B6 menggunakan ESP32 atau Arduino, dengan menampilkan hasil pengukuran pada LCD 20×4 yang dihubungkan melalui interface I2C.

 

Komponen Yang Digunakan

  1. ESP32 Dev Board – Beli Disini
  2. Water Flow Sensor YF-B6 – Beli Disini
  3. LCD 20×4 + I2C – Beli Disini
  4. Kabel Jumper- Beli Disini
  5. Breadboard – Beli Disini

 

Skema Sistem

Konfigurasi pinout :

  • ESP32 -> Water Flow Sensor
    • VIN    ->   Kabel Merah
    • GND  ->   Kabel Hitam
    • D34   ->   Kabel Kuning
  • ESP32 -> LCD 20×4 I2C Interface
    • GND   ->   GND LCD
    • VIN     ->   VCC LCD
    • D21     ->   SDA LCD
    • D22     ->   SCL LCD

 

Power untuk Water Flow Sensor dan LCD I2C disini memerlukan tegangan kerja 5v, untuk mendapatkan tegangan tersebut ESP32 Board jenis yang kita pada percobaan kali ini ada pada pin VIN , Untuk sinyal yang di hasilkan Water Flow Meter kita hubungkan pada pin D34 sedangkan SDA dan SCL pada LCD kita hubungkan pada D21 dan D22 ESP32

 

Program ESP32

#include <LiquidCrystal_I2C.h>

#define flowSensorPin 34  // Pin input untuk sensor flow meter

LiquidCrystal_I2C lcd(0x27, 20, 4);

volatile int pulseCount = 0;          // Variabel untuk menghitung pulse
float flowRate = 0;                   // Variabel untuk menyimpan debit air
float volume = 0;                     // Total volume air dalam liter
unsigned long previousMillis = 0;     // Waktu sebelumnya untuk perhitungan interval
const unsigned long interval = 1000;  // Interval pembacaan dalam ms (1 detik)

int PPL = 572;  // Pulse per Liter (sesuaikan setelah kalibrasi)

bool calibrate = 0;

void IRAM_ATTR pulseCounter() {
  pulseCount++;  // Increment pulse count setiap ada interrupt
}

void setup() {
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();

  pinMode(flowSensorPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(flowSensorPin), pulseCounter, FALLING);

  lcd.setCursor(0, 0);
  lcd.print("Water Meter");
}

void loop() {
  if (!calibrate) {
    flow_meter();
  }
}

void flow_meter() {
  // Serial.print("Flow Meter Begin");

  unsigned long currentMillis = millis();

  // Hitung flow rate setiap 1 detik
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;

    if (pulseCount != 0) {
      
      // Hitung flow rate (liter per menit)
      flowRate = ((float)pulseCount / PPL) * 60.0;

      // Hitung volume total (liter)
      volume += (float)pulseCount / PPL;

      
      // Tampilkan hasil ke serial monitor
      Serial.print("\nPulse : ");
      Serial.print(pulseCount);

      Serial.print(" Flow Rate : ");
      Serial.print(flowRate);
      Serial.print("L/M");

      Serial.print("Volume : ");
      Serial.print(volume);
      Serial.println("L");

      lcd.setCursor(0, 1);
      lcd.print("Rate   :");
      lcd.print(flowRate);
      lcd.print("L/M");

      lcd.setCursor(0, 2);
      lcd.print("Volume :");
      lcd.print(volume * 1000);
      lcd.print("mL");

      // Reset pulse count untuk interval berikutnya
      pulseCount = 0;
    }else{
      Serial.println("0 L/M (No Pulse)");
      lcd.setCursor(0, 1);
      lcd.print("Rate   :");
      lcd.print(0);
      lcd.print("L/M     ");
    }
  }
}

 

Penjelasan Program:

  1. Library dan Objek LCD:
    • Program menggunakan library Wire dan LiquidCrystal_I2C untuk mengakses dan mengendalikan LCD 20×4 dengan interface I2C.
    • Objek lcd digunakan untuk berinteraksi dengan LCD.
  2. Variabel Global:
    • pulseCount: Variabel volatile untuk mengukur frekuensi pulsa dari Water Flow Sensor.
    • volume dan flowRate: Variabel untuk menghitung volume air yang telah mengalir.
    • flowSensorPin: Pin yang terhubung ke Water Flow Sensor.
    • currentMillis dan interval: Variabel untuk mengukur waktu saat ini dan waktu terakhir pengukuran.
    • PPL: Variabel untuk menentukan banyaknya pulsa yang di dapatkan dalam pengukuran 1 liter air saat kalibrasi.
    • calibrate: Merupakan Variabel variable boolean yang berfungsi untuk kalibrasi, ganti 1 saat ingin kalibrasi dan 0 saat ingin menjalakan program utama (Ini di pakai untuk menentukan nilai PPL diatas).
  3. Fungsi Interrupt pulseCounter:
    • Fungsi ini akan dipanggil setiap kali terjadi interrupt pada pin flowSensorPin.
    • Meningkatkan nilai pulseCount setiap kali sensor mendeteksi pulsa.
  4. Setup Function:
    • Inisialisasi Serial untuk komunikasi dengan Serial Monitor.
    • Inisialisasi LCD dan backlight.
    • Konfigurasi pin sensor sebagai input dan mengaktifkan internal pull-up resistor.
    • Menghubungkan fungsi interrupt fpulseCounter dengan pin sensor.
  5. Loop Function:
    • Mengecek apakah sudah waktunya untuk menghitung aliran air (setiap detik).
    • Jika ada pulsa yang terdeteksi, menghitung laju aliran dan volume yang telah mengalir.
    • Menampilkan hasil pengukuran pada Serial Monitor dan LCD.
    • Mengatur ulang counter untuk pulsa.
    • Memberikan delay untuk stabilisasi.

 

Pengujian

Setelah program berhasil ter-upload makan LCD akan menampilkan “Water Meter” kemudian terdapat rate yang masih 0 Liter/menit karena air belum melwati sensor Water Flow Sensor

Setelah air sudah melewati Water Flow Sensor maka data Rate akan muncul dalam satuan Liter/menit dan volume air dalam satuan liter seperti pada gambar di bawah ini

 

 

Kesimpulan

Dengan mengikuti langkah-langkah di atas, kamu dapat mengakses Water Flow Sensor YF-B6 menggunakan ESP32 atau Arduino dan menampilkan hasilnya pada LCD 20×4 dengan interface I2C. Proyek ini dapat berguna dalam berbagai aplikasi, seperti monitoring konsumsi air atau sistem irigasi otomatis. Kamu dapat mengembangkan proyek ini lebih lanjut dengan menambahkan fitur-fitur tambahan sesuai kebutuhan atau juga untuk di implementasikan untuk project Internet of Things atau sistem otomatis lainnya.

Sebagai contoh mungkin kamu bisa implementasikan project ini sistem pengisian galon atau botol otomatis dengan di tambahkan nya solenoid valve yang dapat di atur hidup dan matinya berdasarkan parameter volume air yang telah di tentukan sebelumnya.

Peletakan solenoid valve (klep solenoid) di sistem pengisian air otomatis bisa mempengaruhi kinerja dan akurasi dari water flow meter. Pertimbangan utama dalam menentukan posisi solenoid valve adalah untuk memastikan bahwa aliran air yang diukur oleh flow meter sesuai dengan kebutuhan dan tidak terganggu oleh kondisi di sekitarnya.

Umumnya, disarankan untuk meletakkan solenoid valve setelah water flow meter. Alasan utama adalah agar water flow meter dapat mengukur aliran air dengan akurat tanpa terganggu oleh perubahan tekanan atau hambatan yang mungkin ditimbulkan oleh solenoid valve.

Jadi, urutannya dapat diatur sebagai berikut:

  1. Water source (sumber air)
  2. Water flow meter
  3. Solenoid valve

Dengan menempatkan solenoid valve setelah water flow meter, Kamu dapat memastikan bahwa data yang diukur oleh flow meter mencerminkan jumlah air yang sebenarnya melewati sistem. Ini akan membantu dalam mengontrol dan mengoptimalkan pengisian air otomatis sesuai dengan kebutuhan yang diukur oleh flow meter.

7 thoughts on “Cara Mengakses Water Flow Sensor YF-B6 Menggunakan ESP32 Atau Arduino Interface LCD 20×4 I2C”
  1. bg izin nanya, untuk nilai 0.004 itu nilai pergitungan pulsenya kan bg, jadi untuk kalibrasi sensor ini bagaimana cara atau perbandingannya ya bg ? kenapa bisa dapat sama abg 0.004 itu ?

    1. Dapat refrensi lain, ,ungkin bisa menjawab bang, soalnya saya juga masih bingung. -Misalkan Anda mencatat N pulsa dalam T detik dan volume air yang terukur adalah V liter.
      Volume per pulsa (volume_per_pulse) dapat dihitung dengan rumus:
      volume_per_pulse
      =
      𝑉
      𝑁
      volume_per_pulse=
      N
      V

      Contoh:
      Jika Anda mengukur 1 liter air (V = 1) dan sensor menghasilkan 250 pulsa (N = 250), maka:
      volume_per_pulse
      =
      1
      250
      =
      0.004
      liter per pulsa
      volume_per_pulse=
      250
      1

      =0.004 liter per pulsa

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *






Hubungi Kami

Hubungi Kami

Kami menyediakan jasa proyek Arduino, Electrical, dan IoT (Internet of Things):
- Penyediaan komponen.
- Perancangan hardware dan software.
- Pemrograman.
- Hingga deploy server.


Cocok untuk hobi, edukasi (skripsi atau tugas akhir), dan industri.
Serahkan kepada kami, Anda tinggal terima hasil jadi!



Hubungi via WhatsApp



Ikuti Kami di TikTok (Inspirasi Project IoT)



Kunjungi YouTube Kami (Tutorial Project IoT)



Temukan Kami di Facebook



Beli Komponen Di GoLite Store