Project Tugas Akhir
This commit is contained in:
commit
defa056637
|
@ -0,0 +1,223 @@
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <PubSubClient.h>
|
||||||
|
#include <EEPROM.h>
|
||||||
|
#include "GravityTDS.h"
|
||||||
|
|
||||||
|
#define PIN_KURAS 32 // relay kuras
|
||||||
|
#define PIN_PUMP 33 // relay pengisian
|
||||||
|
#define TRIG 2
|
||||||
|
#define ECHO 4
|
||||||
|
#define PIN_PH 34
|
||||||
|
#define PIN_TDS 35
|
||||||
|
#define EEPROM_SIZE 512
|
||||||
|
|
||||||
|
// Wi-Fi credentials
|
||||||
|
const char* ssid = "1234";
|
||||||
|
const char* password = "11111111";
|
||||||
|
const char* mqtt_server = "habibigarden.com";
|
||||||
|
const int mqtt_port = 1883;
|
||||||
|
|
||||||
|
// MQTT topics
|
||||||
|
const char* kuras_topic = "dashboard/kuras";
|
||||||
|
const char* refill_topic = "dashboard/refill";
|
||||||
|
const char* mode_topic = "dashboard/mode";
|
||||||
|
|
||||||
|
WiFiClient espClient;
|
||||||
|
PubSubClient client(espClient);
|
||||||
|
|
||||||
|
bool autoMode = true;
|
||||||
|
|
||||||
|
// Data pH
|
||||||
|
int nilai_analog_PH;
|
||||||
|
float Po = 0;
|
||||||
|
float PH_step;
|
||||||
|
double TeganganPh;
|
||||||
|
float PH4 = 3.30;
|
||||||
|
float PH7 = 2.80;
|
||||||
|
|
||||||
|
// Data ketinggian
|
||||||
|
int duration;
|
||||||
|
int jarak;
|
||||||
|
int ketinggian;
|
||||||
|
int tinggikolam = 7;
|
||||||
|
|
||||||
|
// Data sensor TDS
|
||||||
|
GravityTDS gravityTds;
|
||||||
|
float temperature = 25, tdsValue = 0;
|
||||||
|
|
||||||
|
void setup_wifi() {
|
||||||
|
delay(10);
|
||||||
|
Serial.println();
|
||||||
|
Serial.print("Menghubungkan ke ");
|
||||||
|
Serial.println(ssid);
|
||||||
|
|
||||||
|
WiFi.begin(ssid, password);
|
||||||
|
|
||||||
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
|
delay(500);
|
||||||
|
Serial.print(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("");
|
||||||
|
Serial.println("WiFi terhubung");
|
||||||
|
Serial.print("Alamat IP: ");
|
||||||
|
Serial.println(WiFi.localIP());
|
||||||
|
}
|
||||||
|
|
||||||
|
void callback(char* topic, byte* payload, unsigned int length) {
|
||||||
|
Serial.print("Pesan diterima di topic [");
|
||||||
|
Serial.print(topic);
|
||||||
|
Serial.print("]: ");
|
||||||
|
String message;
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
message += (char)payload[i];
|
||||||
|
Serial.print((char)payload[i]);
|
||||||
|
}
|
||||||
|
Serial.println();
|
||||||
|
|
||||||
|
if (String(topic) == kuras_topic) {
|
||||||
|
if (!autoMode) {
|
||||||
|
if (message == "1") {
|
||||||
|
digitalWrite(PIN_KURAS, LOW);
|
||||||
|
Serial.println("Kuras ON");
|
||||||
|
} else if (message == "0") {
|
||||||
|
digitalWrite(PIN_KURAS, HIGH);
|
||||||
|
Serial.println("Kuras OFF");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (String(topic) == refill_topic) {
|
||||||
|
if (!autoMode) {
|
||||||
|
if (message == "1") {
|
||||||
|
digitalWrite(PIN_PUMP, LOW);
|
||||||
|
Serial.println("Refill ON");
|
||||||
|
} else if (message == "0") {
|
||||||
|
digitalWrite(PIN_PUMP, HIGH);
|
||||||
|
Serial.println("Refill OFF");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (String(topic) == mode_topic) {
|
||||||
|
if (message == "autoON") {
|
||||||
|
autoMode = true;
|
||||||
|
Serial.println("Auto mode ON");
|
||||||
|
} else if (message == "autoOFF") {
|
||||||
|
autoMode = false;
|
||||||
|
Serial.println("Manual mode ON");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void reconnect() {
|
||||||
|
while (!client.connected()) {
|
||||||
|
Serial.print("Menghubungkan ke MQTT... ");
|
||||||
|
if (client.connect("ESP32Client")) {
|
||||||
|
Serial.println("terhubung");
|
||||||
|
client.subscribe(kuras_topic);
|
||||||
|
client.subscribe(refill_topic);
|
||||||
|
client.subscribe(mode_topic);
|
||||||
|
} else {
|
||||||
|
Serial.print("gagal, rc=");
|
||||||
|
Serial.print(client.state());
|
||||||
|
Serial.println(" coba lagi dalam 5 detik");
|
||||||
|
delay(5000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sensor(int trigPin, int echoPin) {
|
||||||
|
digitalWrite(trigPin, LOW);
|
||||||
|
delayMicroseconds(2);
|
||||||
|
digitalWrite(trigPin, HIGH);
|
||||||
|
delayMicroseconds(10);
|
||||||
|
digitalWrite(trigPin, LOW);
|
||||||
|
duration = pulseIn(echoPin, HIGH);
|
||||||
|
jarak = duration * 0.034 / 2;
|
||||||
|
ketinggian = tinggikolam - jarak;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
setup_wifi();
|
||||||
|
client.setServer(mqtt_server, mqtt_port);
|
||||||
|
client.setCallback(callback);
|
||||||
|
|
||||||
|
pinMode(PIN_KURAS, OUTPUT);
|
||||||
|
pinMode(PIN_PUMP, OUTPUT);
|
||||||
|
pinMode(ECHO, INPUT);
|
||||||
|
pinMode(TRIG, OUTPUT);
|
||||||
|
|
||||||
|
digitalWrite(PIN_KURAS, HIGH);
|
||||||
|
digitalWrite(PIN_PUMP, HIGH);
|
||||||
|
|
||||||
|
EEPROM.begin(EEPROM_SIZE); // Initialize EEPROM
|
||||||
|
|
||||||
|
gravityTds.setPin(PIN_TDS);
|
||||||
|
gravityTds.setAref(3.3); // Reference voltage on ADC, default 5.0V on Arduino UNO
|
||||||
|
gravityTds.setAdcRange(4096); // 1024 for 10bit ADC; 4096 for 12bit ADC
|
||||||
|
gravityTds.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
if (!client.connected()) {
|
||||||
|
Serial.println("Koneksi terputus, mencoba menghubungkan kembali...");
|
||||||
|
reconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Debug: Cek status koneksi
|
||||||
|
Serial.print("Status koneksi MQTT: ");
|
||||||
|
Serial.println(client.state());
|
||||||
|
|
||||||
|
client.loop();
|
||||||
|
|
||||||
|
if (autoMode) {
|
||||||
|
gravityTds.setTemperature(temperature); // Set the temperature and execute temperature compensation
|
||||||
|
gravityTds.update(); // Sample and calculate
|
||||||
|
tdsValue = gravityTds.getTdsValue(); // Get the value
|
||||||
|
Serial.print("Nilai tds: ");
|
||||||
|
Serial.print(tdsValue, 0);
|
||||||
|
Serial.println("ppm");
|
||||||
|
delay(1000);
|
||||||
|
|
||||||
|
nilai_analog_PH = analogRead(PIN_PH);
|
||||||
|
TeganganPh = 3.3 / 4096.0 * nilai_analog_PH;
|
||||||
|
PH_step = (PH4 - PH7) / 3;
|
||||||
|
Po = 7.00 + ((PH7 - TeganganPh) / PH_step);
|
||||||
|
Serial.print("Nilai PH cairan: ");
|
||||||
|
Serial.println(Po, 2);
|
||||||
|
delay(1000);
|
||||||
|
|
||||||
|
Sensor(TRIG, ECHO);
|
||||||
|
Serial.print("Ketinggian = ");
|
||||||
|
Serial.print(ketinggian);
|
||||||
|
Serial.println("cm");
|
||||||
|
|
||||||
|
// Publish data ke tiga topik
|
||||||
|
String payload1 = String(Po);
|
||||||
|
client.publish("dashboard/ph", payload1.c_str());
|
||||||
|
|
||||||
|
String payload2 = String(tdsValue);
|
||||||
|
client.publish("dashboard/tds", payload2.c_str());
|
||||||
|
|
||||||
|
String payload3 = String(ketinggian);
|
||||||
|
client.publish("dashboard/ketinggian", payload3.c_str());
|
||||||
|
|
||||||
|
if (tdsValue > 500) {
|
||||||
|
Serial.println("KURAS ON");
|
||||||
|
digitalWrite(PIN_KURAS, LOW); // Nyala
|
||||||
|
digitalWrite(PIN_PUMP, HIGH); // Mati
|
||||||
|
} else if (tdsValue < 500 && ketinggian < 3) {
|
||||||
|
Serial.println("REFILL ON");
|
||||||
|
digitalWrite(PIN_PUMP, LOW);
|
||||||
|
digitalWrite(PIN_KURAS, HIGH);
|
||||||
|
} else if (tdsValue < 500 && ketinggian < 5) {
|
||||||
|
Serial.println("REFILL ON");
|
||||||
|
digitalWrite(PIN_PUMP, LOW);
|
||||||
|
digitalWrite(PIN_KURAS, HIGH);
|
||||||
|
} else {
|
||||||
|
digitalWrite(PIN_PUMP, HIGH);
|
||||||
|
digitalWrite(PIN_KURAS, HIGH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(1000);
|
||||||
|
}
|
Loading…
Reference in New Issue