LAMPIRAN
#include <Adafruit_INA219.h>
#include <LiquidCrystal_I2C.h>
#define BLYNK_TEMPLATE_ID "TMPLBs3Q31P9"
#define BLYNK_DEVICE_NAME "IrigasiOtomatis"
#define BLYNK_AUTH_TOKEN "NIeeY81BVfAm1hjgDaxysIlETIuhBCLj"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
#define APP_DEBUG
#define USE_NODE_MCU_BOARD
#include "BlynkEdgent.h"
#define flowsensor D0
#define soil A0
#define waterPump D7
#define Buzzer D8
#define ledhijau D4
#define ledmerah D5
LiquidCrystal_I2C lcd(0x27,16,2);
int X;
int Y;
float TIME = 0;
float FREQUENCY = 0;
float WATER = 0;
float TOTAL = 0;
float LS = 0;
float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float loadvoltage = 0;
float power_mW = 0;
int soilLevel = 0;
int soilR = 0;
WidgetLCD vLcd(V2);
unsigned long waktuflow = 0;
unsigned long waktusoil = 0;
unsigned long waktubuzzer = 0;
unsigned long waktuarus = 0;
bool statebuzzer = LOW;
bool eventTrigger = false;
BlynkTimer timer;
Adafruit_INA219 ina219;
sendSensor() { readSoil();
readflow();
readarus();
vLcd.print(0,0,"Status Pompa Air");
if(soilLevel>=40) {
digitalWrite(ledhijau, HIGH);
digitalWrite(ledmerah, LOW);
digitalWrite(Buzzer, LOW);
digitalWrite(waterPump, HIGH);
vLcd.print(6,1,"OFF");
}
if(soilLevel<30) {
Blynk.logEvent("sensor_soil", "Kelembaban Tanah di bawah 30%");
digitalWrite(ledmerah, HIGH);
digitalWrite(ledhijau, LOW);
digitalWrite(waterPump, LOW);
if (millis() - waktubuzzer >= 500) { statebuzzer = !statebuzzer;
digitalWrite (Buzzer, statebuzzer);
waktubuzzer = millis();
}
vLcd.print(6,1, "ON ");
} }
readflow() {
if (millis() - waktuflow >= 500) { X = pulseIn(flowsensor, HIGH);
Y = pulseIn(flowsensor, LOW);
TIME = X + Y;
FREQUENCY = 1000000/TIME;
WATER = FREQUENCY/4.5;
LS = WATER/60;
lcd.setCursor(7,0);
lcd.print(F("F="));
if(FREQUENCY >= 0) { if(isinf(FREQUENCY)) { Serial.print(WATER);
Serial.println(" L/Min");
Blynk.virtualWrite(V1, 0);
lcd.setCursor(10,0);
lcd.print(F("0"));
} else {
Serial.print(WATER);
Serial.println(" L/Min");
Blynk.virtualWrite(V1, WATER);
lcd.setCursor(10,0);
lcd.print(WATER);
} }
lcd.setCursor(11,0);
lcd.print(F("L/Min"));
waktuflow = millis();
} }
readSoil() {
if (millis() - waktusoil >= 2000) { soilR = analogRead(soil);
Serial.println(soilR);
soilLevel = map(soilR, 1023, 0, 0, 100); // adjust soil level here Serial.print(soilLevel);
Serial.println(" %");
Blynk.virtualWrite(V0, soilLevel);
lcd.setCursor(0,0);
lcd.print(F("S="));
if (soilLevel > 100) {
// digitalWrite(ledhijau, HIGH);
// digitalWrite(ledmerah, LOW);
lcd.setCursor(2,0);
lcd.print(F("100%"));
}
else if (soilLevel < 0) {
// digitalWrite(ledmerah, HIGH);
// digitalWrite(ledhijau, LOW);
lcd.setCursor(2,0);
lcd.print(F(" 0%"));
} else {
// lcd.clear();
lcd.setCursor(2,0);
lcd.print(soilLevel);
lcd.setCursor(4,0);
lcd.print(F(" %"));
}
// lcd.setCursor(2,0);
// lcd.print(soilLevel);
// lcd.setCursor(5,0);
// lcd.print(F("%"));
// lcd.clear();
waktusoil = millis();
} }
readarus() {
if (millis() - waktuarus >= 1500) {
shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
power_mW = ina219.getPower_mW();
loadvoltage = busvoltage + (shuntvoltage / 1000);
Serial.println();
Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
// Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V");
Serial.print("Current: "); Serial.print(current_mA); Serial.println(" mA");
Serial.print("Power: "); Serial.print(power_mW); Serial.println(" mW");
Serial.println("");
Blynk.virtualWrite(V3, current_mA);
Blynk.virtualWrite(V4, power_mW);
lcd.setCursor(0,1);
lcd.print(F("mA="));
// double ampere = current_mA * 1000;
lcd.setCursor(3,1);
lcd.print(current_mA);
lcd.setCursor(9,1);
lcd.print(F("mW="));
// double watt = power_mW * 1000;
lcd.setCursor(12,1);
lcd.print(power_mW);
waktuarus = millis();
} }
setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600);
pinMode(flowsensor, INPUT);
pinMode(waterPump, OUTPUT);
pinMode(ledmerah, OUTPUT);
pinMode(ledhijau, OUTPUT);
pinMode(Buzzer, OUTPUT);
digitalWrite(Buzzer, LOW);
digitalWrite(waterPump, HIGH);
digitalWrite(ledhijau, LOW);
digitalWrite(ledmerah, LOW);
delay(1000);
lcd.setCursor (0,0);
lcd.print(F(" Sistem Irigasi "));
lcd.setCursor (0,1);
lcd.print(F(" BY IVO JENI A "));
delay(2000);
if (! ina219.begin()) {
Serial.println("Failed to find INA219 chip");
lcd.setCursor(0,0);
lcd.print(F("Fail Find INA219"));
lcd.setCursor(0,1);
lcd.print(F("Check Wiring NOW"));
while (1) { delay(10);
} }
delay(100);
lcd.clear();
Blynk.logEvent("System Start");
lcd.setCursor(0,0);
lcd.print(F(" System Starting "));
delay(500);
BlynkEdgent.begin();
timer.setInterval(2000L, sendSensor);
lcd.clear();
}
void loop() { timer.run();
BlynkEdgent.run();
sendSensor();
}