#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP32Servo.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 4
#define LCD_ADDRESS 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define ONE_WIRE_BUS 34
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define BLYNK_TEMPLATE_ID "TMPL6zmK6t3qI"
#define BLYNK_TEMPLATE_NAME "PROJEK GEDEN"
#define BLYNK_AUTH_TOKEN "SNg6mGdNbKacGu4L_RsOsaKgJE8Fh-Sv"
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
int relayPin1 = 23; // pin untuk relay 1 = Pompa 1 : Pengisian
int relayPin2 = 18; // pin untuk relay 2 = Pompa 2 : Pengurasan
int relayPin3 = 5; // pin untuk relay 3 = Lampu
int relayPin4 = 19; // pin untuk relay 4 = Kipas
Servo feeder;
int servoPin = 13;
int openAngle = 180;
int closeAngle = 0;
bool feederOpen = false;
void setup()
{
feeder.attach(servoPin);
feeder.write(closeAngle);
delay(1000);
Serial.begin(115200);
sensors.begin();
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
lcd.init();
lcd.backlight();
Blynk.begin(auth, ssid, pass);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
pinMode(relayPin4, OUTPUT);
}
BLYNK_WRITE(V1) // fungsi untuk mengontrol relay 1
{
int value = param.asInt();
digitalWrite(relayPin1, value);
}
BLYNK_WRITE(V2) // fungsi untuk mengontrol relay 2
{
int value = param.asInt();
digitalWrite(relayPin2, value);
}
BLYNK_WRITE(V3) // fungsi untuk mengontrol relay 3
{
int value = param.asInt();
digitalWrite(relayPin3, value);
}
BLYNK_WRITE(V4) // fungsi untuk mengontrol relay 4
{
int value = param.asInt();
digitalWrite(relayPin4, value);
}
BLYNK_WRITE(V6)
{
int buttonState = param.asInt();
if (buttonState == 1 && !feederOpen)
{
feeder.write(openAngle);
feederOpen = true;
}
else if (buttonState == 0 && feederOpen)
{
feeder.write(closeAngle);
feederOpen = false;
}
}
void loop()
{
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tinggi: ");
lcd.print(distance);
lcd.print(" cm");
Blynk.virtualWrite(V0, distance);
if (distance <=10){// ketika ketinggian air kurang dari 10 cm, nyalakan relay 1
digitalWrite(relayPin1, HIGH);
}
else if (distance >= 20) { // ketika air mencapai ketinggian 20 cm, matikan relay 1 dan nyalakan relay 2
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin2, HIGH);
}
else {
digitalWrite(relayPin1, HIGH);
digitalWrite(relayPin2, LOW);
}
delay(2000);
/// Program Suhu
sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Suhu: ");
lcd.print(temp);
lcd.print("C");
Blynk.virtualWrite(V5, temp);
if (temp >= 25) {
digitalWrite(relayPin3, HIGH);
} else {
digitalWrite(relayPin3, LOW);
}
delay(2000);
Blynk.run();
}
Loading
ds18b20
ds18b20