Saat ini terdapat beberapa produk teknologi untuk bisa mendapatkan level ketinggian air dalam suatu bak penampung atau toren air. Salah satu produk yang pernah saya temukan di toko online dari Cina adalah dengan menggunakan sensor ultrasonik dengan harga yang cukup mahal dan susah untuk diintegrasikan dengan perangkat lain. Dengan menggunakan Arduino dan sensor ultrasonik sebenarnya kita bisa membuat modul untuk mengukur ketinggian air namun jarak ukurnya cukup pendek serta rentan rusak karena faktor kelembapan di dalam toren air.
Alternatif lain yang cukup sederhana dan tidak mahal adalah dengan menggunakan sensor saklar tipe pelampung (float switch water level sensor). Sensor pelampung ini dapat dengan mudah ditemukan di toko online dengan harga yang cukup murah. Prinsip kerja sensor ini adalah saklar/switch open-closed berbasis magnet (reed switch) yang akan dialiri arus listrik (Closed) jika magnet yang di dalam pelampung terangkat ke atas ketika level air naik dan menyentuh saklar (Normally Open /NO) dan kembali terputus (Open) jika pelampung turun ke bawah jika level air menurun.
Untuk mendapatkan level ketinggian air tentunya kita membutuhkan lebih dari satu sensor . Misalnya untuk mendapatkan level air mulai dari kosong – seperempat (1/4), setengah (1/2), tigaperempat (3/4) dan penuh membutuhkan lima (5) buah sensor yang ditempatkan secara vertikal. Masing-masing sensor tersebut dihubungkan ke input pin dari Arduino sehingga kita bisa mendapatkan status HIGH/LOW untuk sensor-sensor tersebut. Kondisi HIGH didapatkan ketika saklar dalam keadaan tersambung (Closed) dan LOW ketika saklar terputus (Open).
Oke, secara garis besar prinsip kerjanya adalah seperti yang saya jelaskan diatas. Sebagai tambahan, saya menggunakan Arduino yang terhubung ke jaringan Smart Home yang menggunakan controller Openhab dan komunikasi data menggunakan NRF24L01 wireless module (2.4GHZ band) serta gateway/hub untuk menghubungkan/relay komunikasi radio dengan internet menggunakan protokol MQTT. Oleh karena itu untuk screenshot dan video yang dilampirkan merupakan screenshot dari aplikasi smarthome Openhab. Untuk integrasi dengan smarthome tidak saya dibahas disini.
Berikut adalah komponen-komponen yang dibutuhkan:
Sensor-sensor:
Komponen pipa untuk water level sensor:
- Knee 3/4″ (2)
- Dop 3/4″ (7)
- Sambungan pipa Tee 3/4″ (5)
- Sambungan pipa / socket reducer 3/4″ ke 1/2″ (2)
- Pipa 3/4″ 2 meter
- Pipa 1/2″ 1 meter
Note: Disini saya menggunakan pipa ukuran 3/4″ karena kebetulan tersedia yang ukuran tersebut. Anda bisa mengganti dengan pipa ukuran 1/2″ sehingga komponen socket reducer tidak diperlukan lagi.
Komponen modul:
- Arduino Pro Mini 5v/3.3v (bisa diganti jenis lain)
- Resistor 4K7 (6)
- Kabel utp 10 meter (sesuikan dengan jarak toren ke modul)
- RJ45 pcb socket adapter
Note: Anda dapat mengganti kabel utp dengan kabel biasa, disini saya menggunakan kabel utp untuk mempermudah integrasi ke modul dan mengurangi jumlah kabel sehingga lebih rapih.
Membuat Sensor Level Ketinggian Air
Berikut adalah gambar design sensor level ketinggian air yang dibangun:
Keterangan:
- K1-2 = Knee
- D1-7 = Dop
- So = Sensor suhu
- S1-5 = Sensor pelampung
- T1-5 = Sambungan Tee
- O1 = Pipa keluar
Langkah-langkah
- Dimulai dari bagian bawah yaitu sensor suhu, buat lubang dengan menggunakan bor pada dop pipa (D1) menggunakan mata bor ukuran 6mm.
- Masukkan sensor suhu pada lubang dop yang dibuat dengan ujung bagian besi berada di sisi luar.
- Lapisi lubang luar dengan lem pipa untuk mencegah air masuk.
- Bor dop pipa (D2) seukuran dengan diameter sensor pelampung. Saya menggunakan mata bor pagoda (step drill) karena ukuran diameter yang cukup besar.
- Masukkan sensor pelampung sehingga bagian pelampung berada diluar. Lem bagian luar menggunakan lem pipa sehingga tidak lepas dan juga mencegah air masuk.
- Sambung dop yang telah terpasang sensor pelampung ke sambungan pipa Tee (T1). Untuk sambungan pipa, ukurannya kira-kira 5cm (bisa dikira-kira sendiri). Pastikan kabel sensor ditarik keluar dari sambungan pipa tee. Jangan lupa untuk menggunakan lem pipa saat memasang sambungan, diampelas terlebih dahulu sehingga lebih kuat. Seal bagian sambungan dengan menggunakan lem pipa untuk memastikan air tidak masuk.
- Ulangi langkah pemasangan sensor pelampung diatas untuk sisa sensor lainnya (total 5 sensor, T1-T5).
- Sekarang sambung kabel untuk masing-masing sensor (masing-masing sepasang) hingga panjangnya kira-kira sampai ke ujung paling atas sensor sesuai gambar design. Pada akhirnya terdapat total 13 helai kabel yang keluar dari ujung atas sensor (D7). Tandai kabel untuk masing-masing sensor.
- Ukur tinggi toren mulai dari dasar toren sampai ke posisi dimana bola pelampung berada (dalam keadaan menutup/air penuh). Tinggi sensor pelampung terakhir bisa berada diatas atau dibawah sedikit dari posisi pelampung sehingga saat air mencapai sensor pelampung paling atas (S5) kita bisa mematikan pompa air. Untuk toren Penguin ukuran 500 liter yang saya gunakan, tinggi dari dasar sampai ke posisi pelampung saat menutup adalah sekitar 95cm. Jadi posisi sensor pelampung harus berada pada ketinggian tersebut.
- Sambungkan kelima sensor pelampung yang telah terpasang ke sambungan tee dan sensor suhu dengan pipa sampai mencapai tinggi yang diinginkan seperti gambar design diatas.
- Jangan lupa untuk menggunakan lem pipa pada setiap sambungan dan seal masing-masing sambungan dengan lem pipa untuk mencegah air masuk melalui sela-sela sambungan.
- Untuk toren Penguin berukuran 500 liter, lubang inlet berukuran 1/2″ sehingga pipa yang bisa masuk adalah pipa 1/2″. Karena saya menggunakan pipa ukuran 3/4″ maka dibutuhkan socket reducer untuk bisa meneruskan pipa dari dalam toren ke luar. Gambar design diatas tidak menggunakan socket reducer dengan asumsi ukuran inlet sama dengan pipa sensor (1/2″)
- Sekali lagi saya ingatkan, saya menggunakan pipa ukuran 3/4″ karena kebetulan stok yang ada adalah 3/4″ dan juga pada keluran pipa sensor di luar toren (D7), membutuhkan ukuran yang lebih besar dari 1/2″ untuk bisa menyimpan socket adapter rj45.
- Pastikan kabel-kabel yang keluar dari pipa sensor di luar toren berjumlah 13 buah (10 untuk sensor pelampung, masing2 sensor sepasang (+/-) dan 3 untuk sensor suhu (+/-/data)).
- Sambungkan kabel-kabel tersebut dengan modul arduino. Saya menggunakan kabel utp karena biar lebih rapih dan juga jarak dari toren ke posisi arduino yang cukup jauh. Untuk itu perlu digunakan alat tambahan berupa socket adapter rj45. Note: socket ini saya cetak sendiri pcb-nya, jika butuh bisa didownload disini file gerbernya.
Berikut adalah hasil akhir sensor ketinggian air yang sudah terpasang dalam toren
Merangkai Modul Arduino
Modul yang saya gunakan yaitu modul Arduino Pro Mini 3.3v namun anda bisa menggantikannya dengan modul Arduino lain. Schematicnya adalah seperti gambar di bawah:
Kabel dari masing-masing sensor berupa pasangan kabel positif (arus) dan negatif (ground) . Kedua kabel tersebut dapat dipertukarkan posisinya. Sebaiknya menggunakan warna kabel yang berbeda untuk sambungan sensor tersebut, merah untuk arus, dan hitam untuk ground sehingga gampang dibedakan.
Hubungkan kabel-kabel sbb:
- Semua kabel arus/positif dari masing-masing sensor dihubungkan dengan 5V Arduino
- Kabel ground/negatif sensor S1 (level kosong) dihubungkan dengan input D5
- Kabel ground/negatif sensor S2 (level 1/4) dihubungkan dengan input D6
- Kabel ground/negatif sensor S3 (level 1/2) dihubungkan dengan input D7
- Kabel ground/negatif sensor S4 (level 3/4) dihubungkan dengan input D8
- Kabel ground/negatif sensor S5 (level penuh) dihubungkan dengan input D9
- Gunakan resistor 4K7 (R1-R5) sebagai pull down resistor untuk masing-masing input untuk menstabilkan input atau mencegah floating (default to LOW)
- Hubungkan kabel ground (-) dari sensor suhu ke GND Arduino
- Hubungkan kabel data dari sensor suhu ke input D4 melalui resistor 4K7 sebagai pull up resistor (R6).
Flownya sbb:
- Ketika air mencapai sensor S1 maka modul akan mendeteksi level HIGH pada Arduino input D5 dan sebaliknya LOW ketika menurun dibawah sensor S1
- Ketika air mencapai sensor S2 maka modul akan mendeteksi level HIGH pada Arduino input D6 dan sebaliknya LOW ketika menurun dibawah sensor S2
- Ketika air mencapai sensor S3 maka modul akan mendeteksi level HIGH pada Arduino input D7 dan sebaliknya LOW ketika menurun dibawah sensor S3
- Ketika air mencapai sensor S4 maka modul akan mendeteksi level HIGH pada Arduino input D8 dan sebaliknya LOW ketika menurun dibawah sensor S4
- Ketika air mencapai sensor S5 maka modul akan mendeteksi level HIGH pada Arduino input D9 dan sebaliknya LOW ketika menurun dibawah sensor S5
Dengan demikian kita bisa mendeteksi level air dari kosong sampai penuh dan menggunakannya untuk action tertentu. Misalnya, saat air penuh kita bisa mematikan pompa air tentunya pompa air harus terhubung juga ke modul arduino yang sama menggunakan relay atau bisa juga menggunakan komunikasi radio atau mqtt jika pompa berada pada modul arduino yang terpisah. Begitupun juga ketika air mencapai level setengah, pompa air bisa diaktifkan untuk mengisi kembali toren.
Untuk case saya, saya menghubungkan modul arduino yang terhubung dengan network smarthome sehingga status level air bisa dilihat dari aplikasi dan juga untuk mengaktifkan modul saklar pompa air yang terpisah menggunakan komunikasi radio dan relay gateway mqtt. Untuk source code yang saya sertakan hanya basicnya saja, untuk bisa membaca level ketinggian air, adalah bagian anda untuk dikembangkan sesuai dengan kebutuhan masing-masing.
Berikut ada contoh sederhana source code Arduino yang ditulis menggunakan Atom dan PlatformIO IDE. Anda membutuhkan library untuk Dallas temperature sensor, Onewire.h dan DallasTemperature.h. Jika menggunakan Platform IDE, install kedua library diatas dari command line:
pio lib install 1
pio lib install 54
Source code
#include <Arduino.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define PIN_FULL 9
#define PIN_TRIQUARTER 8
#define PIN_HALF 7
#define PIN_ONEQUARTER 6
#define PIN_EMPTY 5
#define PIN_TEMP_SENSOR 4
OneWire oneWire(PIN_TEMP_SENSOR);
DallasTemperature tempSensor(&oneWire);
unsigned long lastLevelRead = 0;
unsigned long lastTempRead = 0;
void printAddress(DeviceAddress deviceAddress) {
for (uint8_t i = 0; i < 8; i++) {
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
void setupTempSensor() {
tempSensor.begin();
Serial.println("");
Serial.print("Checking temp sensor... ");
Serial.print(tempSensor.getDeviceCount(), DEC);
Serial.print(" sensors found");
DeviceAddress tempAddr;
if (!tempSensor.getAddress(tempAddr, 0)) {
Serial.print(", unable to find address for sensor");
} else {
Serial.print(", address: ");
printAddress(tempAddr);
}
Serial.print("\n\n");
}
void setup() {
Serial.begin(9600);
pinMode(PIN_FULL, INPUT);
pinMode(PIN_TRIQUARTER, INPUT);
pinMode(PIN_HALF, INPUT);
pinMode(PIN_ONEQUARTER, INPUT);
pinMode(PIN_EMPTY, INPUT);
setupTempSensor();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - lastLevelRead > 1000) {//one seconds delay
Serial.println("Water level: ");
uint8_t full = digitalRead(PIN_FULL);
if (full == 1) {
Serial.println("Full");
}
uint8_t triquarter = digitalRead(PIN_TRIQUARTER);
if (triquarter == 1) {
Serial.println("3/4");
}
uint8_t half = digitalRead(PIN_HALF);
if (half == 1) {
Serial.println("1/2");
}
uint8_t onequarter = digitalRead(PIN_ONEQUARTER);
if (onequarter == 1) {
Serial.println("1/4");
}
uint8_t empty = digitalRead(PIN_EMPTY);
if (empty == 1) {
Serial.println("Empty");
}
lastLevelRead = millis();
}
if (currentMillis - lastTempRead > 10000) { //10 seconds delay
tempSensor.requestTemperatures();
float temperature = tempSensor.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.println(temperature);
lastTempRead = millis();
}
}
Berikut adalah contoh tampilan aplikasi Smarthome Openhab yang terhubung ke modul sensor ketinggian air, temperature dan sensor kecepatan aliran air yang saya aplikasikan pada toren penampung air di rumah saya. Modul ini juga terintegrasi dengan pompa air menggunakan stop kontak otomatis Sonoff untuk memompa air dari bawah ke atas toren. Tutorial untuk sensor kecepatan aliran air bisa dibaca pada postingan saya selanjutnya.
Yoshimuri Sumimura says
Sensor pelampungnya beli dimana?
lorenz says
Di tokopedia banyak mas
Hardi says
Klo untuk mengukur level oil apa bisa sensornya di aplikasikan ya
lorenz says
sepertinya bisa mas .
Natahari Wibowo says
Kalau Saya mau tambahkan indikator Lampu LED untuk posisi level Air bisa dipasang antara R=4K7 dan GND yah ?
lorenz says
Antara resistor 4k7 dgn input saja.
gunawan wibisono says
Ijin mencoba dan mengikuti tutorial ini Pak lorenz, Terima kasih
lorenz says
Silahkan mas..;)
lorenz says
Silahkan mas 😉
Arda Paitama says
halo bang, kalo misalkan mikrokontrolernya menggunakan ESP8266 NodeMCU bisa gak bang
lorenz says
sy lupa, tp kayaknya jumlah pin di nodemcu kurang, jadi harus pake shift register biar bisa extend port.
Arda Paitama says
izin nanya bang untuk buat rangkaian skhematic nya itu buatnya pake software apa bang
lorenz says
Sy pake Eagle mas
Aris says
Untuk Server openhub bisa d ganti sama pc ? Cara integrasi ke pc dari kontroler gmn ya pa ?
lorenz says
Bisa harusnya. Integrasinya pake mqtt via Wifi
Abah Reza says
hehehe…ketemu disini, keren nih saya dulu manual buatnya, hanya pakai sensorsumur dalam, sambung ke rangkaian LED, mantap Bang Lorenz
lorenz says
Wah ada Abah Reza..maaf baru buka blog..hehe….thank u ya, iseng2 aja ini project smart home..haha
Dicki Armanda says
izin nanya, kabel lan yang digunakan itu pakai yang berapa meter ya mas? dan maksimal kabel lan yang bisa digunakan berapa meter yah?
Terimakasih
lorenz says
Tergantung jarak dari toren ke modulnya. Max. 100m