#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define LCD_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define DHT_PIN 7
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLUMNS, LCD_ROWS);
const int pHSensorPin = A1; // Analog pin connected to the pH sensor
const int turbiditySensorPin = A2; // Analog pin connected to the turbidity 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();
dht.begin();
}
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;
float temperature = dht.readTemperature();
Serial.print("Temp: ");
Serial.print(temperature);
Serial.println("C");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(6, 0);
lcd.print(temperature, 1);
lcd.print(0xDF);
lcd.print("C");
if (temperature > 27.0) {
lcd.setCursor(0, 1);
lcd.print("Initiate cooling");
Serial.println("Initiate cooling");
} else if (temperature < 20.0) {
lcd.setCursor(0, 1);
lcd.print("Initiate heating");
Serial.println("Initiate heating");
} else {
lcd.setCursor(0, 1);
lcd.print("Normal temp");
Serial.println("Normal temp");
}
delay(2000); // Delay between readings (adjust as needed)
// 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(2000);
// dht22
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(2000);
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(2000);
}