TKK_E32210977/FixAnnaArd/FixAnnaArd.ino

118 lines
2.8 KiB
C++

#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);
}