Sistem Pengatur Pengisian Tangki Air 2 L Menggunakan Sensor Flow Meter Berbasis Mikrokontoler ATMega8 Chapter III V

19

Gambar 3.1 Diagram blok sistem
3.1.1 Fungsi – Fungsi Diagam Blok
1. Supply berfungsi sebagai sumber tegangan.
2. Bluetooth berfungsi sebagai penerima dan pemancar data.
3. Pompa berfungsi sebagai penyedot air
4. Driver relay berfungsi sebagai penggerak relay
5. Flow sensor berfungsi sebagai penghitung jumlah aliran
6. Set 1berfungsi sebagai pengatur volume air ( pull down)
Set 2 berfungsi sebagai set mode
Set 3 berfungsi sebagai pengatur volume air ( pull up)
Set 4 berfungsi sebagai set mode
Set 5 berfungsi sebagai tombol oke
7. LCD berfungsi sebagai penampil data
8. Relay berfungsi sebagai saklar untuk pompa.

3.2 Rangkaian Mikrokontroler Atmega8
Rangkaian mikrokontroller merupakan pusat pengendalian dari bagian input
dan keluaran serta pengolahan data. Pada sistem ini digunakan mikrokontroller
jenis Atmega8 yang memiliki spesifikasi sebagai berikut:

a. Kristal 8 MHz, yang berfungsi sebagai pembangkit clock.
b.Kapasitor 22 pF pada pin XTAL1 dan XTAL2.
c. Resistor 10 kΩ dan kapasitor 10 nF pada pin reset.
d.Port masukan dan keluaran yang digunakan yaitu :

Universitas Sumatera Utara

20



PortC.0 digunakan sebagai Penerima data dari remote (receiver)



PortA.1, PortB.1 -PortB.4

digunakan sebagai data input basis

transistor pada driver relay.

Skema rangkaian sistem minimum mikrokontroller dapat dilihat pada
gambar berikut :

Gambar 3.2 Rangkaian Mikrokontroler Atmega8
3.3 Rangkaian Regulator 7805
Mikrokontroler, sensor dan komponen komponen elektonika, kebanyakan
menggunakan tegangan 5v untuk menstabilkan tegangan dapat menggunakan
ICLM7805, yang berfungsi sebagai penstabil tegangan, dan mempertahankan
output tetap 5 volt.

Gambar 3.3 Rangkaian Regulator 7805

3.4Rangkaian LCD
Pada alat

ini,

display

yang


digunakan

adalah LCD (Liquid

Universitas Sumatera Utara

21

Crystal Display) 16 x 2. Untuk blok ini tidak ada komponen tambahan karena
mikrokontroler dapat memberi data langsung ke LCD, pada LCD Hitachi - M1632
sudah terdapat driver untuk mengubah data ASCII output mikrokontroler menjadi
tampilan karakter. Pemasangan potensio sebesar 10 KΩ untuk mengatur kontras
karakter yang tampil. Gambar 3.5 berikut merupakan gambar rangkaian LCD
yang dihubungkan ke mikrokontroler. Gambar 3.5, rangkaian ini terhubung ke
PB.1 - PB.7, yang merupakan pin I/O dua arah dan pin fungsi khusus, yaitu
sebagai Timer/Counter, komperator analog dan SPI mempunyai fungsi khusus
sebagai pengiriman data secara serial. Sehingga nilai yang akan tampil pada LCD
display akan dapat dikendalikan oleh Mikrokontroller Atmega8.


Gambar 3.4 Rangkaian LCD

3.5Rangkaian Sensor Aliran
Sensor aliran memiliki tegangan kerja 5V DC-24V C , perpandingan aliran
0,5~ 60L / menit dan tekanan air maksimal 1,75 MPa.

Universitas Sumatera Utara

22

Gambar 3.6 Rangkaian Flow Sensor
3.6 Flowchat Sistem

3.7 Gambar Flowchat Sistem
BAB IVPENGUJIAN ALAT

Universitas Sumatera Utara

23


4.1Pengujian Rangkaian
4.1.1Pengujian Rangkaian Regulator 7805
Voltage regulator IC adalah IC yang digunakan untuk mengatur tegangan
.IC 7805 adalah Regulator 5V, Voltage yang membatasi output tegangan 5V dan
menarik 5V diatur power supply.Pengujian rangkaian regulator ini biasanya
menggunakan volt meter, rangkaian ic7805 ini akan mengeluarkan tegangan 5
volt dengan inputan diatas 6 volt sampai dengan 35 Volt.
4.1.2.Pengujian Rangkaian Mikrokontroler
Pemrograman menggunakan mode ISP (In System Programming)
mikrokontroler

harus dapat

diprogram langsung pada papan rangkaian dan

rangkaian mikrokontroler harus dapat dikenali oleh program downloader.
Pada pengujian ini berhasil dilakukan dengan dikenalinya jenis mikrokontroler
oleh program downloader yaitu Atmega8.

Gambar 4.1. Informasi Signature Mikrokontroler


4.1.3 Pengujian Rangkaian LCD
Bagian ini hanya terdiri dari sebuah LCD dot matriks 2 x 16 karakter yang
berfungsi sebagai tampilan hasil pengukuran dan tampilan dari beberapa
keterangan. LCD dihubungkan langsung ke Port B dari mikrokontroler yang
berfungsi mengirimkan data hasil pengolahan untuk ditampilkan dalam bentuk
alfabet dan numerik pada LCD.Display karakter pada LCD diatur oleh pin EN,
RS dan RW: Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu

Universitas Sumatera Utara

24

LCD bahwa anda sedang mengirimkan sebuah data. Untuk mengirimkan data ke
LCD, maka melalui program EN harus dibuat logika low “0” dan set ( high ) pada
dua jalur kontrol yang lain RS dan RW. Jalur RW adalah jalur kontrol Read/
Write. Ketika RW berlogika low (0), maka informasi pada bus data akan
dituliskan pada layar LCD. Ketika RW berlogika high ”1”, maka program akan
melakukan pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin
RW selalu diberi logika low ( 0 )

Berdasarkan keterangan di atas maka kita sudah dapat membuat progam
untuk menampilkan karaker pada display LCD. Adapun program yang diisikan ke
mikrokontroller untuk menampilkan karakter pada display LCD adalah sebagai
berikut:
#include
LiquidCrystal lcd(8, 7, 6, 4, 3, 2);
Void setup()
{lcd.begin(16, 2);}
Void loop()
{
Lcd.setCursor(0,0);
Lcd.putsf(“tes lcd”);
}
Program di atas akan menampilkan kata “Tes LCD” di baris pertama pada
display LCD 2x16. Pada alat dalam penelitian ini, Saat keseluruhan rangkaian
diaktifkan.
4.1.4 Pengujian Rangkaian Sensor Aliran (Flow)
Flow sensor diuji dengan cara menghubungkan water flow sensor pada
mikrokontroler, dan memasukkan program ke dalam mikrokontroler. Sehingga
dapat diketahui apakah sensor tersebut dapat berfungsidengan 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.

Universitas Sumatera Utara

25

Tabel 4.1 Pengujian data flow sensor
No.

Metode Gelas Ukur (L)

Output Sensor (ml)

Selisih (ml)

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

Percobaan

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 pengujian 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 lcd(8, 6, 5, A4, A5, 4);
#define pompa A0

#define up A1
#define down 11
#define righ 10
#define left 9

Universitas Sumatera Utara

26

#define ok 12
int state=0;
float volum=0;
char recev;
byte statusLed

= 13;

byte sensorInterrupt = 0;
byte sensorPin

= 2;

float calibrationFactor = 4.5;
volatile byte pulseCount;
float flowRate;
unsigned int flowMilliLitres;
float totalMilliLitres;
unsigned long oldTime;

void setup()
{
lcd.begin(16, 2);
pinMode(pompa,OUTPUT);
Serial.begin(9600);
pinMode(statusLed, OUTPUT);
digitalWrite(statusLed, HIGH);

Universitas Sumatera Utara

27

pinMode(sensorPin, INPUT);
digitalWrite(sensorPin, HIGH);
pinMode(up, INPUT);
pinMode(down, INPUT);
pinMode(left, INPUT);
pinMode(righ, INPUT);
pinMode(ok, INPUT);

digitalWrite(up, HIGH);
digitalWrite(down, HIGH);
digitalWrite(left, HIGH);
digitalWrite(righ, HIGH);
digitalWrite(ok, HIGH);

pulseCount
flowRate

= 0;
= 0.0;

flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime

= 0;

attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}

Universitas Sumatera Utara

28

void loop()
{
while (state==0)
{
digitalWrite(pompa,LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Android >>>");
lcd.setCursor(0,1);
lcd.print("Manual");
if (digitalRead(down)==0){state=1;}
if (digitalRead(ok)==0){state=2;delay(200)
delay(200);
}

while (state==1) {
digitalWrite(pompa,LOW);
pulseCount

= 0;

Universitas Sumatera Utara

29

flowRate

= 0.0;

flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime

= 0;

lcd.clear();
lcd.setCursor(0,0);
lcd.print("Android");
lcd.setCursor(0,1);
lcd.print("Manual >>>");
if (digitalRead(up)==0){state=0;}
if (digitalRead(ok)==0){state=3;delay(200);}
delay(300);
}

while (state==3)

{

digitalWrite(pompa,LOW);
if (digitalRead(righ)==0){volum+=0.1;}
if (digitalRead(left)==0){volum-=0.1;}
lcd.setCursor(0,0);
lcd.print("Set Volume");
lcd.setCursor(0,1);

Universitas Sumatera Utara

30

lcd.print(volum,1);
if (digitalRead(ok)==0){state=4;delay(200);}
delay(100);
lcd.clear();
}

while (state==4)
{

if (totalMilliLitres>=volum)
{
digitalWrite(pompa,LOW);
lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3);
lcd.print(" L/S");
lcd.setCursor(0,1);
lcd.print("Vol : ");
lcd.print(totalMilliLitres);
lcd.print(" L");
if (digitalRead(ok)==0){state=3;delay(300
}

Universitas Sumatera Utara

31

else{
digitalWrite(pompa,HIGH);
if (digitalRead(ok)==0){state=3;delay(300);
}

if((millis() - oldTime) > 200){
detachInterrupt(sensorInterrupt);
oldTime = millis();
flowRate = pulseCount;
flowRate=flowRate*0.0263/480/2.5*100;
totalMilliLitres+=flowRate;
unsigned int frac;

lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3);
lcd.print(" L/S");

lcd.setCursor(0,1);
lcd.print("Vol : ");
lcd.print(totalMilliLitres);

Universitas Sumatera Utara

32

lcd.print(" L");

pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
}
}

while (state==2){
digitalWrite(pompa,LOW);
pulseCount
flowRate

= 0;
= 0.0;

flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime

= 0;

lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set Volume");
lcd.setCursor(0,1);
lcd.print(volum,1);

Universitas Sumatera Utara

33

if (Serial.available()){recev= Serial.read();
if (recev=='A'){volum+=0.1;
}
else if (recev=='B'){volum-=0.1;}
else if (recev=='Z'){state=5;}
}
Serial.print("*F");
Serial.print(volum);
Serial.print("*");
Serial.print("*G");
Serial.print(totalMilliLitres);
Serial.print("*");

Serial.print("*H");
Serial.print(flowRate,3);
Serial.print("*");
delay(50);
}

while (state==5)
{

Universitas Sumatera Utara

34

if (totalMilliLitres>=volum)
{
digitalWrite(pompa,LOW);
lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3);
lcd.print(" L/S");

lcd.setCursor(0,1);
lcd.print("Vol : ");
lcd.print(volum);
lcd.print(" L");
if (Serial.available()){if (Serial.read()=='Z'){state=2;delay(200);}}
}

else{
digitalWrite(pompa,HIGH);
if (Serial.available()){if (Serial.read()=='Z'){state=2;delay(200);}}

if((millis() - oldTime) > 200){
detachInterrupt(sensorInterrupt);

Universitas Sumatera Utara

35

flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
oldTime = millis();
flowRate = pulseCount;
flowRate=flowRate*0.0263/480/2.5*100;
totalMilliLitres+=flowRate;
*

flowMilliLitres = ((flowRate / 60) * 1000)/8256;
totalMilliLitres += flowMilliLitres;
unsigned int frac;

lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3);
lcd.print(" L/S");

lcd.setCursor(0,1);
lcd.print("Vol : ");
lcd.print(totalMilliLitres);
lcd.print(" L");

pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}

Universitas Sumatera Utara

36

}

Serial.print("*F");
Serial.print(volum);
Serial.print("*");

Serial.print("*G");
Serial.print(totalMilliLitres);
Serial.print("*");

Serial.print("*H");
Serial.print(flowRate,3);
Serial.print("*");
}

}
void pulseCounter(){pulseCount++;}
4.2 Analisa Rangkaian
4.2.1 Analisa Rangkaian Regulator 7805

Universitas Sumatera Utara

37

Voltage regulator IC adalah IC yang digunakan untuk mengatur tegangan
.IC 7805 adalah Regulator 5V, Voltage yang membatasi output tegangan 5V dan
menarik 5V diatur power supply.Rangkaian regulator 7805 biasanya dianalisa
menggunakan volt meter, rangkaian ic7805 ini akan mengeluarkan tegangan 5
volt dengan inputan diatas 6 volt sampai dengan 35 Volt.
4.2.2 Analisa Rangkaian Mikrokontroler
Pemrograman menggunakan mode ISP (In System Programming)
mikrokontroler

harus dapat

diprogram langsung pada papan rangkaian dan

rangkaian mikrokontroler harus dapat dikenali oleh program downloader.
Pada Analisa ini berhasil dilakukan dengan dikenalinya jenis mikrokontroler oleh
program downloader yaitu Atmega8.

Gambar 4.2. Informasi Signature Mikrokontroler
Atmega8 menggunakan kristal dengan frekuensi 8 MHz, apabila Chip
Signature sudah dikenali dengan baik dan dalam waktu singkat, bisa dikatakan
rangkaian mikrokontroler bekerja dengan baik dengan mode ISP-nya.

4.2.3 Analisa Rangkaian LCD
LCD dihubungkan langsung ke Port B dari mikrokontroler yang berfungsi
mengirimkan data hasil pengolahan untuk ditampilkan dalam bentuk alfabet dan
numerik pada LCD.Display karakter pada LCD diatur oleh pin EN, RS dan RW:
Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu LCD bahwa
anda sedang mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka

Universitas Sumatera Utara

38

melalui program EN harus dibuat logika low “0” dan set ( high ) pada dua jalur
kontrol yang lain RS dan RW. Jalur RW adalah jalur kontrol Read/ Write. Ketika
RW berlogika low (0), maka informasi pada bus data akan dituliskan pada layar
LCD. Ketika RW berlogika high ”1”, maka program akan melakukan pembacaan
memori dari LCD. Sedangkan pada aplikasi umum pin RW selalu diberi logika
low ( 0 ).
Berdasarkan keterangan di atas maka kita sudah dapat membuat progam
untuk menampilkan karaker pada display LCD. Adapun program yang diisikan ke
mikrokontroller untuk menampilkan karakter pada display LCD adalah sebagai
berikut:
#include // memasukkan ke library
LiquidCrystal lcd(8, 7, 6, 4, 3, 2); // konfigurasi pinLCD
Void setup()
{lcd.begin(16, 2);}// Inisialisasi LCD
Void loop()
{
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
No.

Metode Gelas Ukur (l)

Output Sensor (ml)

Selisih (ml)

Universitas Sumatera Utara

39

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 // 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

Universitas Sumatera Utara

40

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

Universitas Sumatera Utara

41

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
flowRate

= 0; // memberikan 0 pada variabel pulseCount
= 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

Universitas Sumatera Utara

42

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
}

Universitas Sumatera Utara

43

while (state==1) // perulangan selama nilai state 1
{
digitalWrite(pompa,LOW); // pompa mati
pulseCount
flowRate

= 0; // memberikan 0 pada variabel pulseCount
= 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

Universitas Sumatera Utara

44

{
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

Universitas Sumatera Utara

45

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

Universitas Sumatera Utara

46

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
}
}
}

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

Universitas Sumatera Utara

47

digitalWrite(pompa,LOW); // pompa mati
pulseCount
flowRate

= 0; // memberikan 0 pada variabel pulseCount
= 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

Universitas Sumatera Utara

48

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

Universitas Sumatera Utara

49

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

Universitas Sumatera Utara

50

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
}
}

Universitas Sumatera Utara

51

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

Universitas Sumatera Utara

52

BAB 5 KESIMPULAN DAN SARAN

5.1 Kesimpulan
Setelah melakukan tahap perancangan dan pembuatan sistem yang
kemudian dilanjutkan dengan tahap pengujian dan analisa maka dapat diambil
kesimpulan sebagai berikut :
Tabel 4.1 Pengujian data flow sensor
No.

Metode Gelas Ukur (l)

Output Sensor (ml)

Selisih (ml)

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

Percobaan

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 pengujian data flow sensor
Persentase kesalahan % =

( 500 ml)

Persentase kesalahan % =

( 1000 ml)

Persentase kesalahan % =

( 1500 ml)

Persentase kesalahan % =

( 2000 ml

Universitas Sumatera Utara

53

5.2 Saran
Dari hasil Proyek Akhir ini masih terdapat beberapa kekurangan dan
dimungkinkan untuk pengembangan lebih lanjut.Oleh karenanya penulis merasa
perlu untuk memberi saran sebagai berikut:
1.Untuk penelitian kedepannya,perlu diperhatikan ukuran volume air yang akan
dialirkan
2.Memakai sensor yang lebih sensitif dan pompa yang yang tegangannya lebih
dari 12 volt dc agar hasil yang didapat lebih akurat.

Universitas Sumatera Utara