/* monitoring GH Budidaya tomat
kendali atap :
- Sensor cahaya
- push button
cara kerja :
saat cahaya (Lux) di atas 50 dan tidak ada hujan maka atap terbuka
selain itu atap tertutup
kendali pompa :
- sensor DHT22 (kelembapan tanah) pengganti soil moisture
- saat kelembapan di bawah 49 maka pompa hidup
- saat kelembapan di atas 50 maka pompa mati
monitoring selain menggunakan Led juga di tampilkan di LCD */
#include <DHTesp.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include "ThingsBoard.h"
#include <LiquidCrystal_I2C.h>
#define Lpompa 2
#define Latap 12
#define DHT 18
#define Thujan 32
#define LDR 35
int jumlahTekanan;
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "MAmEeGMxkAiM1hplN4Vn"
#define THINGSBOARD_SERVER "thingsboard.cloud"
#define CURRENT_FIRMWARE_TITLE "Tugas Akhir iot4-22 Kelompok 1"
#define CURRENT_FIRMWARE_VERSION "1.0.0"
LiquidCrystal_I2C lcd(0x27, 20, 4);
DHTesp dhtSensor;
Servo atap, pompa ;
WiFiClient espClient;
ThingsBoard tb(espClient);
int status = WL_IDLE_STATUS;
const float GAMMA = 0.7;
const float RL10 = 50;
void InitWiFi()
{
Serial.println("Connecting to Kebun Tomat WIFI...!");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to Kebun Tomat WIFI");
}
void reconnect() {
status = WiFi.status();
if ( status != WL_CONNECTED) {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to Kebun Tomat WIFI");
}
}
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT, DHTesp::DHT22);
pinMode(Latap, OUTPUT);
pinMode(Lpompa, OUTPUT);
pinMode(Thujan, INPUT);
pinMode(LDR, INPUT);
pompa.attach(15);
atap.attach(13);
InitWiFi();
lcd.init();
lcd.backlight();
}
void loop() {
int analogValue = analogRead(LDR);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
delay(1000);
if (WiFi.status() != WL_CONNECTED) {
reconnect();
}
if (!tb.connected()) {
// Connect to the ThingsBoard
Serial.print("Connecting to Kebun Tomat Server: ");
Serial.println(THINGSBOARD_SERVER);
Serial.print(" With token ");
Serial.println(TOKEN);
if (!tb.connect(THINGSBOARD_SERVER, TOKEN)) {
Serial.println("Failed to connect Kebun Tomat");
return;
}
}
//Buka atap dengan tombol dan sensor Cahaya
int statusTombol = digitalRead(Thujan);
if (statusTombol==HIGH || lux >= 50){
jumlahTekanan ++;
delay(200);
if(jumlahTekanan==1){
digitalWrite(Latap, HIGH);
atap.write(180);
lcd.setCursor(0,0);
lcd.print("Monitoring GH Tomat");
lcd.setCursor(0,2);
lcd.print("Status Atap :Tutup");
Serial.println("Cuaca : Hujan");
Serial.println("Status Atap : Tutup");
tb.sendTelemetryString("Status Atap", "Tutup");
}
else if(jumlahTekanan==2 || lux <= 50){
digitalWrite(Latap, LOW);
jumlahTekanan = 0;
atap.write(90);
lcd.setCursor(0,0);
lcd.print("Monitoring GH Tomat");
lcd.setCursor(0,2);
lcd.print("Status Atap : Buka");
Serial.println("Cuaca : Cerah");
Serial.println("Status Atap : Buka");
tb.sendTelemetryString("Status Atap", "Buka");
}
}
//mengendalikan pompa menggunakan DHT22 pengganti soil moisture
TempAndHumidity data = dhtSensor.getTempAndHumidity();
if (data.humidity <= 49){
digitalWrite(Lpompa, HIGH);
Serial.println("Status Pompa : On");
lcd.setCursor(0,0);
lcd.print("Monitoring GH Tomat");
lcd.setCursor(0,3);
lcd.print("Status Pompa : On");
pompa.write(180);
tb.sendTelemetryString("Status Pompa", "Hidup");
}
else if (data.humidity >= 50){
digitalWrite(Lpompa, LOW);
Serial.println("Status Pompa : Off");
lcd.setCursor(0,0);
lcd.print("Monitoring GH Tomat");
lcd.setCursor(0,3);
lcd.print("Status Pompa : Off");
pompa.write(90);
tb.sendTelemetryString("Status Pompa", "Mati");
}
Serial.print("Kelembapan Tanah: ");
Serial.println(data.humidity);
Serial.print("Luxmeter: ");
Serial.println(lux);
Serial.println("------------------");
tb.sendTelemetryFloat("Kelembaman Tanah", data.humidity);
tb.sendTelemetryFloat("Luxmeter", lux);
delay(2000);
}