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