#include <LiquidCrystal_I2C.h>
#define LCD_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLUMNS, LCD_ROWS);
const float BETA = 3950; // Beta Coefficient of thermistor
const int pHSensorPin = A1; // Analog pin connected to the pH sensor
const int turbiditySensorPin = A2; // Analog pin connected to the turbidity sensor
const int temperatureSensorPin = A0; // Analog pin connected to the temperature sensor
const float pHOffset = 7.0;
const float voltageNeutral = 2.5;
const float sensitivity = 0.59;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.backlight();
}
void loop() {
int sensorValue_pH = analogRead(pHSensorPin);
float voltage_pH = sensorValue_pH * (5.0 / 1023.0);
int sensorValue_turbidity = analogRead(turbiditySensorPin);
float actual_pH = pHOffset - (voltage_pH - voltageNeutral) / sensitivity;
// Check turbidity value, pH value, and water level to determine water condition
if (sensorValue_turbidity > 500 || actual_pH < 6.5 || actual_pH > 7.5) {
// If turbidity is high or pH is outside the safe range
Serial.println("Water condition: Not clean");
// Check pH level to determine acidity, neutrality, or alkalinity
if (actual_pH < 6.5) {
Serial.println("Water pH is acidic");
} else if (actual_pH > 7.5) {
Serial.println("Water pH is alkaline");
} else {
Serial.println("Water pH is neutral");
}
// Add code here for the filtering process or any actions for not clean water
} else {
// If turbidity is low and pH is within the safe range
Serial.println("Water is clean");
}
delay(1000);
int analogValue = analogRead(temperatureSensorPin);
float celcius = 1 / (log(1 / (1023.0 / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
Serial.print("Temperature: ");
Serial.print(celcius);
Serial.println(" ℃");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(celcius, 2); // Show temperature with two decimal places
lcd.print(" ");
lcd.write(0xDF);
lcd.print("C");
lcd.setCursor(0, 1);
if (celcius < 18) {
lcd.print("Initiate heating");
} else if (celcius > 40) {
lcd.print("Initiate cooling");
} else {
lcd.print("Normal condition");
}
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Turbid: ");
lcd.print(sensorValue_turbidity);
lcd.setCursor(0, 1);
lcd.print("pH: ");
lcd.print(actual_pH, 2); // Show pH with two decimal places
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
if (sensorValue_turbidity > 500 || actual_pH < 6.5 || actual_pH > 7.5) {
// If turbidity is high or pH is outside the safe range
lcd.print("Not clean");
// Check pH level to determine acidity, neutrality, or alkalinity
lcd.setCursor(0, 1);
if (actual_pH < 6.5) {
lcd.print("Water pH is acidic");
} else if (actual_pH > 7.5) {
lcd.print("Water pH is alkaline");
} else {
lcd.print("Water pH is neutral");
}
} else {
lcd.print("Water is clean");
}
delay(1000);
}