first commit
This commit is contained in:
commit
a943c61387
|
@ -0,0 +1,117 @@
|
|||
#include <Wire.h>
|
||||
#include <LiquidCrystal_I2C.h>
|
||||
#include "GravityTDS.h"
|
||||
|
||||
// Set the LCD number of columns and rows
|
||||
int lcdColumns = 16;
|
||||
int lcdRows = 2;
|
||||
|
||||
// Initialize LCD
|
||||
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
|
||||
|
||||
// Sensor turbidity
|
||||
int pinTurb = A0;
|
||||
float V;
|
||||
float kekeruhan;
|
||||
float VRata2;
|
||||
float VHasil;
|
||||
float ParameterKekeruhan = 5; // Sesuaikan dengan parameter kekeruhan yang diinginkan
|
||||
|
||||
// Sensor TDS
|
||||
#define TdsSensorPin A1
|
||||
GravityTDS gravityTds;
|
||||
float temperature = 500, tdsValue = 0;
|
||||
float ParameterPPM = 500; // Sesuaikan dengan parameter ppm yang diinginkan
|
||||
|
||||
// LED
|
||||
const int ledMerah = 8; // Pin untuk LED merah
|
||||
const int ledHijau = 9; // Pin untuk LED hijau
|
||||
|
||||
void setup() {
|
||||
// Initialize LCD
|
||||
lcd.init();
|
||||
// Turn on LCD backlight
|
||||
lcd.backlight();
|
||||
|
||||
Serial.begin(9600);
|
||||
Serial.println("SENSOR KEKERUHAN AIR");
|
||||
delay(2000);
|
||||
|
||||
pinMode(ledMerah, OUTPUT);
|
||||
pinMode(ledHijau, OUTPUT);
|
||||
|
||||
// Initialize turbidity sensor
|
||||
gravityTds.setPin(TdsSensorPin);
|
||||
gravityTds.setAref(5.0); //reference voltage on ADC, default 5.0V on Arduino UNO
|
||||
gravityTds.setAdcRange(1024); //1024 for 10bit ADC;4096 for 12bit ADC
|
||||
gravityTds.begin(); //initialization
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Read turbidity sensor
|
||||
V = 0;
|
||||
for (int i = 0; i < 800; i++) {
|
||||
V += ((float)analogRead(pinTurb) / 1023) * 5;
|
||||
}
|
||||
|
||||
VRata2 = V / 800;
|
||||
VHasil = roundf(VRata2 * 10.0f) / 10.0f;
|
||||
|
||||
if (VHasil < 2.5) {
|
||||
kekeruhan = 5;
|
||||
} else {
|
||||
kekeruhan = -1120.4 * square(VHasil) + 5742.3 * VHasil - 4353.8;
|
||||
}
|
||||
|
||||
// Read TDS sensor
|
||||
gravityTds.setTemperature(temperature); // set the temperature and execute temperature compensation
|
||||
gravityTds.update(); //sample and calculate
|
||||
tdsValue = gravityTds.getTdsValue(); // then get the value
|
||||
|
||||
// Print to LCD
|
||||
lcd.clear();
|
||||
if (tdsValue > ParameterPPM) {
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Kaporit Berlebih");
|
||||
} else {
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Kaporit Normal");
|
||||
}
|
||||
lcd.print("TDS: ");
|
||||
lcd.print(tdsValue);
|
||||
lcd.print(" ppm");
|
||||
|
||||
// lcd.setCursor(0, 1);
|
||||
// lcd.print("Turbidity: ");
|
||||
// lcd.print(kekeruhan);
|
||||
|
||||
// Control LED based on ppm and turbidity
|
||||
if (tdsValue > ParameterPPM || kekeruhan > ParameterKekeruhan) {
|
||||
digitalWrite(ledMerah, HIGH); // LED merah menyala
|
||||
digitalWrite(ledHijau, LOW); // LED hijau mati
|
||||
} else {
|
||||
digitalWrite(ledMerah, LOW); // LED merah mati
|
||||
digitalWrite(ledHijau, HIGH); // LED hijau menyala
|
||||
}
|
||||
|
||||
if (kekeruhan > ParameterKekeruhan) {
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Air Keruh");
|
||||
} else {
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Air Tidak Keruh");
|
||||
}
|
||||
|
||||
// Print to serial monitor
|
||||
Serial.print("TDS: ");
|
||||
Serial.print(tdsValue);
|
||||
Serial.print(" ppm");
|
||||
|
||||
Serial.print("\tTurbidity: ");
|
||||
Serial.println(kekeruhan);
|
||||
// Send data to ESP32
|
||||
Serial.print(kekeruhan);
|
||||
Serial.print(",");
|
||||
Serial.println(tdsValue);
|
||||
delay(200);
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
/**
|
||||
* Upload Code Versi Arduino
|
||||
*
|
||||
*/
|
Binary file not shown.
After Width: | Height: | Size: 705 KiB |
Binary file not shown.
|
@ -0,0 +1,64 @@
|
|||
#define BLYNK_TEMPLATE_ID "TMPL6wIKYMxbe"
|
||||
#define BLYNK_TEMPLATE_NAME "WaterTester"
|
||||
#define BLYNK_AUTH_TOKEN "v-1Offttn2hvVofsSGHiiz1jDcSTrfUm"
|
||||
|
||||
#define BLYNK_PRINT Serial
|
||||
|
||||
#include <WiFi.h>
|
||||
#include <BlynkSimpleEsp32.h>
|
||||
|
||||
char auth[] = BLYNK_AUTH_TOKEN; // Auth Token
|
||||
char ssid[] = "yuhu";
|
||||
char pass[] = "AnnaSalsabila";
|
||||
|
||||
float ParameterKekeruhan = 0-5; // Parameter kekeruhan
|
||||
float ParameterTDS = 0.2-0.5; // Parameter TDS
|
||||
|
||||
float lastKekeruhan = 0; // Nilai terakhir kekeruhan
|
||||
float lastTDS = 0; // Nilai terakhir TDS
|
||||
|
||||
BlynkTimer timer;
|
||||
|
||||
// Callback function untuk pengiriman data sensor ke Blynk
|
||||
void sendSensor() {
|
||||
if (Serial.available()) { // Jika data tersedia di buffer serial
|
||||
String dataReceived = Serial.readStringUntil('\n'); // Baca data hingga karakter newline
|
||||
float kekeruhan = dataReceived.substring(0, dataReceived.indexOf(',')).toFloat(); // Parse data kekeruhan
|
||||
float tdsValue = dataReceived.substring(dataReceived.indexOf(',') + 1).toFloat(); // Parse data TDS
|
||||
|
||||
// Jika data yang diterima valid (bukan 0)
|
||||
if (kekeruhan != 0 && tdsValue != 0) {
|
||||
lastKekeruhan = kekeruhan; // Simpan nilai terakhir kekeruhan
|
||||
lastTDS = tdsValue; // Simpan nilai terakhir TDS
|
||||
}
|
||||
}
|
||||
|
||||
// Kirim data terakhir ke Blynk
|
||||
Blynk.virtualWrite(V0, lastKekeruhan); // Kirim data kekeruhan terakhir ke Virtual pin V0 di Blynk
|
||||
Blynk.virtualWrite(V1, lastTDS); // Kirim data TDS terakhir ke Virtual pin V1 di Blynk
|
||||
|
||||
// Kirim status kekeruhan terakhir ke Blynk
|
||||
if (lastKekeruhan > ParameterKekeruhan) {
|
||||
Blynk.virtualWrite(V2, "Air Keruh");
|
||||
} else {
|
||||
Blynk.virtualWrite(V2, "Air Tidak Keruh");
|
||||
}
|
||||
|
||||
// Kirim status TDS terakhir ke Blynk
|
||||
if (lastTDS > ParameterTDS) {
|
||||
Blynk.virtualWrite(V3, "Kaporit Tinggi");
|
||||
} else {
|
||||
Blynk.virtualWrite(V3, "Kaporit Normal");
|
||||
}
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600); // Baud rate serial monitor
|
||||
Blynk.begin(auth, ssid, pass); // Mulai Blynk
|
||||
timer.setInterval(20L, sendSensor); // Set interval timer untuk pengiriman data 20ms
|
||||
}
|
||||
|
||||
void loop() {
|
||||
Blynk.run(); // Menjalankan Blynk
|
||||
timer.run(); // Menjalankan timer
|
||||
}
|
Loading…
Reference in New Issue