• Tidak ada hasil yang ditemukan

8. Relay berfungsi sebagai saklar untuk pompa

4.2 Analisa Rangkaian

4.2.4 Analisa Rangkaian Sensor Aliran (Flow Meter)

Lcd.setCursor(0,0); //meletakkan posisi karakter pada LCD Lcd.putsf(“tes lcd”); //meletakkan tulisan tes lcd pada layar LCD }

Program di atas akan menampilkan kata “Tes LCD” di baris pertama pada display LCD 2x16.

4.2.4 Analisa Rangkaian Sensor Aliran (Flow Meter)

Flow sensor di analisa dengan cara menghubungkan water flow sensor pada mikrokontroler, dan memasukkan program ke dalam mikrokontroler.

Sehingga dapat diketahui apakah sensor tersebut dapat berfungsi dengan baik atau tidak. Kemudian pengujian pengukuran alat ini dengan menggunakan botol ukur sebagai penampung keluaran air dari water flow sensor tersebut. Jika flow sensor dapat berkerja dengan baik, maka hasil perhitungan akan ditampilkan pada layar LCD. Berikut hasil pengujian ketepatan output sensor.

Tabel 4.2Analisa data flow sensor

Percobaan

1 0,5 0,48 0,02

2 1 0,94 0,06

3 1,5 1,38 0,12

4 2 1,90 0,1

Berdasarkan pengujian diatas terdapat kekurangan pada alat water flow sensor karena alat ini tidak memiliki ketepatan atau presisi 100%, terdapat kesalahan atau ketidaktepatan pengukuran. Berikut persentase kesalahan :

1. Persentase kesalahan analisa data flow sensor

Persentase kesalahan % = ( 500 ml) Persentase kesalahan % = ( 1000 ml) Persentase kesalahan % = ( 1500 ml) Persentase kesalahan % = ( 2000 ml)

Adapun program yang menjalankan sensor ini sebagai berikut :

#include <LiquidCrystal.h>// memasukkan ke library

LiquidCrystal lcd(8, 6, 5, A4, A5, 4); // konfigurasi PIN LCD

#define pompa A0 // pompa di PIN a0

#define up A1 // up di PIN A1

#define down 11 // down di PIN 11

#define righ 10 // right di PIN 10

#define left 9 // left di PIN 9

#define ok 12 // ok di PIN 12

int state=0; // membuat variabel pada tipe data interger float volum=0; // membuat variabel pada tipe data float char recev; // membuat variabel pada tipe data carakter

byte statusLed = 13; // membuat variabel pada tipe data byte byte sensorInterrupt = 0;// membuat variabel pada tipe data byte byte sensorPin = 2;// membuat variabel pada tipe data byte

float calibrationFactor = 4.5; // membuat variabel pada tipe data float dengan nilai 4.5

volatile byte pulseCount; // membuat variabel pada tipe data byte float flowRate; // membuat variabel pada tipe data float

unsigned int flowMilliLitres; // membuat variabel pada tipe data interger float totalMilliLitres; // membuat variabel pada tipe data float

unsigned long oldTime; // membuat variabel pada tipe data float

void setup() {

lcd.begin(16, 2); // inisialisasi LCD

pinMode(pompa,OUTPUT); // pompa menjadi output Serial.begin(9600); // inisialisasi serial

pinMode(statusLed, OUTPUT); // statusled menjadi output

digitalWrite(statusLed, HIGH); // statusled menjadi high pinMode(sensorPin, INPUT); // sensorpin menjadi output digitalWrite(sensorPin, HIGH); // sensorpin menjadi high pinMode(up, INPUT); // up menjadi input

pinMode(down, INPUT); //down menjadi input pinMode(left, INPUT); //left menjadi input pinMode(righ, INPUT); //right menjadi input pinMode(ok, INPUT); // ok menjadi input

digitalWrite(up, HIGH); // up menjadi high digitalWrite(down, HIGH); //down menjadi high digitalWrite(left, HIGH); //left menjadi high digitalWrite(righ, HIGH); //right menjadi high digitalWrite(ok, HIGH); // ok menjadi high

pulseCount = 0; // memberikan 0 pada variabel pulseCount flowRate = 0.0; // memberikan 0 pada variabel flowRate flowMilliLitres = 0; // memberikan 0 pada variabel flowMilliLitres totalMilliLitres = 0; // memberikan 0 pada variabel totalMilliLitres oldTime = 0; // memberikan 0 pada variabel oldTime

attachInterrupt(sensorInterrupt, pulseCounter, FALLING); // membuat attachInterrupt

}

void loop() {

while (state==0)// perulangan selama nilai state 0 {

digitalWrite(pompa,LOW); // pompa mati lcd.clear(); // menghapus LCD

lcd.setCursor(0,0); // meletakkan posisi karakter pada LCD

lcd.print("Android >>>"); // mencetak karakter android pada LCD lcd.setCursor(0,1); // meletakkan posisi karakter pada LCD

lcd.print("Manual"); // dicetak Karakter Manual pada LCD

if (digitalRead(down)==0){state=1;} // jika tombol down ditekan maka state sama dengan 1

if (digitalRead(ok)==0){state=2;delay(200);} // jika tombol ok ditekan maka state sama dengan 2 dengan delay 200 ms

delay(200); // delay sama dengan 200 ms

while (state==1) // perulangan selama nilai state 1 {

digitalWrite(pompa,LOW); // pompa mati

pulseCount = 0; // memberikan 0 pada variabel pulseCount flowRate = 0.0; // memberikan 0 pada variabel flowRate flowMilliLitres = 0; // memberikan 0 pada variabel flowMilliLitres totalMilliLitres = 0; // memberikan 0 pada variabel totalMilliLitres oldTime = 0; // memberikan 0 pada variabel oldTime

lcd.clear(); // menghapus LCD

lcd.setCursor(0,0); // meletakkan posisi karakter pada LCD lcd.print("Android"); // dicetak Karakter Android pada LCD lcd.setCursor(0,1); // meletakkan posisi karakter pada LCD

lcd.print("Manual >>>"); // mencetak karakter Manual pada LCD

if (digitalRead(up)==0){state=0;} // jika tombol up tekan maka state sama dengan 0

if (digitalRead(ok)==0){state=3;delay(200);} // jika tombol up tekan maka state sama dengan 3 dengan delay sama dengan 200 ms

delay(300); // delay sama dengan 200 ms }

while (state==3) // perulangan selama nilai state 3

{

digitalWrite(pompa,LOW); // pompa mati

if (digitalRead(righ)==0){volum+=0.1;} // jika tombol right ditekan maka volume bertambah

if (digitalRead(left)==0){volum-=0.1;} // jika tombol left ditekan maka volume berkurang

lcd.setCursor(0,0); // meletakkan posisi karakter pada LCD

lcd.print("Set Volume"); // mencetak karakter Set Volume pada LCD lcd.setCursor(0,1); // meletakkan posisi karakter pada LCD

lcd.print(volum,1); // mencetak nilai volum pada LCD

if (digitalRead(ok)==0){state=4;delay(200);} // jika ok ditekan maka state sama dengan 4 dengan delay sama dengan 200 ms

delay(100); // delay sama dengan 200 ms lcd.clear(); // menghapus LCD

}

while (state==4) // perulangan selama nilai state 4 {

if (totalMilliLitres>=volum) // jika volume yang masuk lebih besar atau sama dengan

{

digitalWrite(pompa,LOW); // pompa mati

lcd.setCursor(0,0); // mencetak nilai flowrate pada LCD lcd.print("Debit: "); // mencetak karakter Debit pada LCD lcd.print(flowRate,3); // mencetak nilai flowrate pada LCD lcd.print(" L/S"); // mencetak karakter L/S pada LCD

lcd.setCursor(0,1); // meletakkan posisi karakter pada LCD lcd.print("Vol : "); // mencetak nilai volume pada LCD

lcd.print(totalMilliLitres); // mencetak nilai totalmillitres pada LCD lcd.print(" L"); // mencetak karakter L pada LCD

if (digitalRead(ok)==0){state=3;delay(300);} // jika ok ditekan maka state 3 dengan delay sama dengan 300 ms

}

else{ // jika yang lain

digitalWrite(pompa,HIGH); // pompa menjadi high

if (digitalRead(ok)==0){state=3;delay(300);} // jika ok ditekan maka state 3 dengan delay sama dengan 300

if((millis() - oldTime) > 200){ // timer

detachInterrupt(sensorInterrupt); // menggambil data dari sensorinterrupt oldTime = millis(); // timer

flowRate = pulseCount; // membaca pulsa

flowRate=flowRate*0.0263/480/2.5*100; // nilai kalibrasi

totalMilliLitres+=flowRate; // menjumlahkan flowrate dengan berulang selama pompa aktif

unsigned int frac; // membuat variabel pada tipe data interger

lcd.setCursor(0,0); // meletakkan posisi karakter pada LCD lcd.print("Debit: "); // mencetak karakter Debit pada LCD lcd.print(flowRate,3); // mencetak nilai flowrate pada LCD lcd.print(" L/S"); // mencetak karakter L/S pada LCD

lcd.setCursor(0,1); // meletakkan posisi karakter pada LCD lcd.print("Vol : "); // mencetak nilai volume pada LCD lcd.print(totalMilliLitres); // mencetak nilai totalmillitres pada LCD lcd.print(" L"); // mencetak karakter L pada LCD

pulseCount = 0; // memberikan 0 pada variabel pulseCount

attachInterrupt(sensorInterrupt, pulseCounter, FALLING); // membuat attachInterrupt

} } }

digitalWrite(pompa,LOW); // pompa mati

pulseCount = 0; // memberikan 0 pada variabel pulseCount flowRate = 0.0; // memberikan 0 pada variabel flowRate flowMilliLitres = 0; // memberikan 0 pada variabel flowMilliLitres totalMilliLitres = 0; // memberikan 0 pada variabel totalMilliLitres oldTime = 0; // memberikan 0 pada variabel oldTime

lcd.clear(); // menghapus LD

lcd.setCursor(0,0); // meletakkan posisi karakter pada LCD

lcd.print("Set Volume"); // mencetak karakter Set Volume pada LCD lcd.setCursor(0,1); // meletakkan posisi karakter pada LCD

lcd.print(volum,1); // mencetak nilai Volume pada LCD

if (Serial.available()){recev= Serial.read(); // kalau serial aktif maka data diambil dari android

if (recev=='A'){volum+=0.1;} // jika data yang dimasukkan A maka volum bertambah 1

else if (recev=='B'){volum-=0.1;} // jika data yang dimasukkan B maka volum berkurang 1

else if (recev=='Z'){state=5;} // jika data yang dimasukkan A maka state sama dengan 5

}

Serial.print("*F"); // mengirim data ke android Serial.print(volum); // mengirim data ke android

Serial.print("*"); // mengirim data ke android

Serial.print("*G"); // mengirim data ke android

Serial.print(totalMilliLitres); // mencetak nilai totalmillitres pada LCD Serial.print("*"); // mengirim data ke android

Serial.print("*H"); // mengirim data ke android Serial.print(flowRate,3); // mengirim data ke android Serial.print("*"); // mengirim data ke android

delay(50); // delay 50 ms }

while (state==5) // perulangan selama nilai state 5 {

if (totalMilliLitres>=volum) // jika volume yang masuk lebih besar atau sama dengan

{

digitalWrite(pompa,LOW); // pompa mati

lcd.setCursor(0,0); // meletakkan posisi karakter pada LCD lcd.print("Debit: "); // mencetak karakter Debit pada LCD

lcd.print(flowRate,3); // Print the integer part of the variable lcd.print(" L/S"); // mencetak karakter L/S pada LCD

lcd.setCursor(0,1); // meletakkan posisi karakter pada LCD lcd.print("Vol : "); // mencetak karakter Vol pada LCD lcd.print(volum); // mencetak karakter volum pada LCD lcd.print(" L"); // mencetak karakter L pada LCD

if (Serial.available()){if (Serial.read()=='Z'){state=2;delay(200);}} // jika serial aktif dan jika data dimasukkan z maka state sama dengan 2 dengan delay sama dengan 200 ms

}

else{

digitalWrite(pompa,HIGH); // pompa hidup

if (Serial.available()){if (Serial.read()=='Z'){state=2;delay(200);}} // jika serial aktif dan jika data dimasukkan z maka state sama dengan 2 dengan delay sama dengan 200 ms

if((millis() - oldTime) > 200){ // timer

detachInterrupt(sensorInterrupt); // mengambil data dari sensorinterrupt flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;

//

oldTime = millis(); // timer

flowRate = pulseCount; // membaca pulsa

flowRate=flowRate*0.0263/480/2.5*100; // nilai kalibrasi

totalMilliLitres+=flowRate; // menjumlahkan flowrate dengan berulang selama pompa aktif

/* flowMilliLitres = ((flowRate / 60) * 1000)/8256;

totalMilliLitres += flowMilliLitres;*/

unsigned int frac; // membuat variabel pada tipe data interger

lcd.setCursor(0,0); // meletakkan posisi karakter pada LCD lcd.print("Debit: "); // mencetak karakter Debit pada LCD lcd.print(flowRate,3); // mencetak nilai flowrate pada LCD lcd.print(" L/S"); // mencetak karakter L/S pada LCD

lcd.setCursor(0,1); // meletakkan posisi karakter pada LCD lcd.print("Vol : "); // mencetak karakter Vol pada LCD

lcd.print(totalMilliLitres); // mencetak nilai totalmillitres pada LCD lcd.print(" L"); // mencetak karakter L pada LCD

pulseCount = 0; // memberikan 0 pada variabel pulseCount

attachInterrupt(sensorInterrupt, pulseCounter, FALLING); // membuat attachInterrupt

} }

Serial.print("*F"); // mengirim data ke android Serial.print(volum); // mengirim data ke android Serial.print("*"); // mengirim data ke android

Serial.print("*G"); // mengirim data ke android

Serial.print(totalMilliLitres); // mencetak nilai totalmillitres pada LCD Serial.print("*"); // mengirim data ke android

Serial.print("*H"); // mengirim data ke android

Serial.print(flowRate,3); // mencetak nilai flowrate pada LCD Serial.print("*"); // mengirim data ke android

}

}

void pulseCounter(){pulseCount++;} // pulsa dari sensor

Dokumen terkait