Sistem Pengatur Pengisian Tangki Air 2 L Menggunakan Sensor Flow Meter Berbasis Android

LAMPIRAN PROGRAM

#include
LiquidCrystallcd(8, 6, 5, A4, A5, 4);
#define pompa A0
#define up A1
#define down 11
#define righ 10
#define left 9
#define ok 12
int state=0;
floatvolum=0;
charrecev;
bytestatusLed

= 13;

bytesensorInterrupt = 0;
bytesensorPin

= 2;


floatcalibrationFactor = 4.5;
volatile byte pulseCount;
floatflowRate;
unsignedintflowMilliLitres;
floattotalMilliLitres;
unsigned long oldTime;
void setup()
{
lcd.begin(16, 2);
pinMode(pompa,OUTPUT);
Serial.begin(9600);
pinMode(statusLed, OUTPUT);
digitalWrite(statusLed, HIGH);
pinMode(sensorPin, INPUT);
digitalWrite(sensorPin, HIGH);

Universitas Sumatera Utara

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

Universitas Sumatera Utara


{
digitalWrite(pompa,LOW);
pulseCount
flowRate

= 0;
= 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) //set nilai volume
{
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);
lcd.print(volum,1);
if (digitalRead(ok)==0){state=4;delay(200);}
delay(100);
lcd.clear();
}
while (state==4)
{
if (totalMilliLitres>=volum)


Universitas Sumatera Utara

{
digitalWrite(pompa,LOW);
lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3); // Print the integer part of the variable
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);}
}
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;
unsignedintfrac;
lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3); // Print the integer part of the variable
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

}
}

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

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


{
if (totalMilliLitres>=volum)
{
digitalWrite(pompa,LOW);
lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3); // Print the integer part of the variable
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);
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;*/
unsignedintfrac;
lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3); // Print the integer part of the variable
lcd.print(" L/S");
lcd.setCursor(0,1);

Universitas Sumatera Utara

lcd.print("Vol : ");
lcd.print(totalMilliLitres);
lcd.print(" L");
pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
}
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("*");
}
}
voidpulseCounter(){pulseCount++;}

Universitas Sumatera Utara

LAMPIRAN RANGKAIAN LENGKAP

Universitas Sumatera Utara