MSES - Water Sanitation

Water sanitation project implemented using Arduino and various sensors, such as pH, turbidity, and TDS sensors, aimed to address the goal.

IntermediateWork in progress10 hours86
MSES - Water Sanitation

Things used in this project

Story

Read more

Schematics

Overall Block Diagram

Code

Turbidity Sensor

Arduino
#include <LiquidCrystal.h> // Importing the LCD library

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Initialize the LCD object with the pins connected to the LCD screen

int turbidityPin = A1; // Assign turbidity sensor pin to analog pin A1

void setup() {
  Serial.begin(9600); // Initialize serial communication
  lcd.begin(16, 2); // Initialize the LCD screen
  lcd.clear(); // Clear the LCD screen
}

void loop() {

int sensorReading = analogRead(turbidityPin); // Read turbidity sensor value
float relative = 660.00 - sensorReading;// Find relative value
float turbidityValue = (relative/660.00) * 100.00; // Convert to percentage


  if (turbidityValue < 310%) {
    lcd.setCursor(0, 0);
    lcd.print("Turbidity:");
    lcd.print(turbidityValue);
    lcd.print("%");
    lcd.setCursor(0, 1);
    lcd.print("Water is ideal");
    Serial.println("Water is ideal for consumption");
    delay(5000);
    lcd.clear();
    delay(5000);

  }
  else if (turbidityValue >= 10 && turbidityValue < 25) {
    lcd.setCursor(0, 0);
    lcd.print("Turbidity:");
    lcd.print(turbidityValue);
    lcd.print("%");
    lcd.setCursor(0, 1);
    lcd.print("Water is contaminated");
    Serial.println("Contaminated");
    delay(5000);
    lcd.clear();
    delay(5000);

  }
  else {
    lcd.setCursor(0, 0);
    lcd.print("Turbidity:");
    lcd.print(turbidityValue);
    lcd.print("%");
    lcd.setCursor(0, 1);
    lcd.print("Water is very contaminated");
    Serial.println("V.Contaminated");
    delay(5000);
    lcd.clear();
    delay(5000);

  }

  delay(1000); // Wait for 1 second
}

PH sensor 1

Arduino
#include "DFRobot_PH.h"
#include <EEPROM.h>

#define PH_PIN A0
float voltage,phValue,temperature = 25;
DFRobot_PH ph;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Initialize the LCD object with the pins connected to the LCD screen

void setup()
{
    Serial.begin(9600);  
    ph.begin();
    lcd.begin(16, 2); // Initialize the LCD screen
    lcd.clear(); // Clear the LCD screen
}

void loop()
{
    static unsigned long timepoint = millis();
    if(millis()-timepoint>1000U){                  //time interval: 1s
        timepoint = millis();
        voltage = analogRead(PH_PIN)/1024.0*5000;  // read the voltage
        phValue = ph.readPH(voltage);  // convert voltage to pH with temperature compensation
        if(phValue >= 7.00 && phValue <= 8.50){
          lcd.setCursor(0,0);
          lcd.print("pH:"); // display the sensor value
          lcd.print(phValue);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.println("Water is ideal for consumption");
          lcd.setCursor(0,1);
          lcd.print("Water is ideal");
          delay(5000);
          lcd.clear();
          delay(5000);


        }
        else if(phValue > 8.50){
          lcd.setCursor(0,0);
          lcd.print("pH:"); // display the sensor value
          lcd.print(phValue);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.println("Water is contaminated by alkaline component");
          lcd.setCursor(0,1);
          lcd.print("Water is alkaline");
          delay(5000);
          lcd.clear();
          delay(5000);


        }
        else if(phValue < 7.00 && phValue > 4.50){
          lcd.setCursor(0,0);
          lcd.print("pH:"); // display the sensor value
          lcd.print(phValue);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.println("Water is contaminated by acidic component");
          lcd.setCursor(0,1);
          lcd.print("Water is acidic");
          delay(5000);
          lcd.clear();
          delay(5000);


        }
        else if(phValue <= 4.50){
          lcd.setCursor(0,0);
          lcd.print("pH:"); // display the sensor value
          lcd.print(phValue);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.println("Water likely has carbonic acid from organic matter/bacteria");
          lcd.setCursor(0,1);
          lcd.print("Do Not Drink!");
          delay(5000);
          lcd.clear();
          delay(5000);


        }
        
        delay(2000);
    }
    ph.calibration(voltage,temperature);           // calibration process by Serail CMD
    
}

PH sensor 2

Arduino
#include "DFRobot_PH.h"
#include <EEPROM.h>

#define PH_PIN A0
float voltage,phValue,temperature = 25;
DFRobot_PH ph;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Initialize the LCD object with the pins connected to the LCD screen

void setup()
{
    Serial.begin(9600);  
    ph.begin();
    lcd.begin(16, 2); // Initialize the LCD screen
    lcd.clear(); // Clear the LCD screen
}

void loop()
{
    static unsigned long timepoint = millis();
    if(millis()-timepoint>1000U){                  //time interval: 1s
        timepoint = millis();
        voltage = analogRead(PH_PIN)/1024.0*5000;  // read the voltage
        phValue = ph.readPH(voltage);  // convert voltage to pH with temperature compensation
        if(phValue >= 7.00 && phValue <= 8.50){
          lcd.setCursor(0,0);
          lcd.print("pH:"); // display the sensor value
          lcd.print(phValue);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.println("Water is ideal for consumption");
          lcd.setCursor(0,1);
          lcd.print("Water is ideal");
          delay(5000);
          lcd.clear();
          delay(5000);


        }
        else if(phValue > 8.50){
          lcd.setCursor(0,0);
          lcd.print("pH:"); // display the sensor value
          lcd.print(phValue);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.println("Water is contaminated by alkaline detergent");
          lcd.setCursor(0,1);
          lcd.print("Detergent");
          delay(5000);
          lcd.clear();
          delay(5000);


        }
        else if(phValue >= 2.00 && phValue <= 4.50){
          lcd.setCursor(0,0);
          lcd.print("pH:"); // display the sensor value
          lcd.print(phValue);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.println("Water is contaminated by acetic or citric acid");
          lcd.setCursor(0,1);
          lcd.print("Acetic / Citric");
          delay(5000);
          lcd.clear();
          delay(5000);


        }
        else {
          lcd.setCursor(0,0);
          lcd.print("pH:"); // display the sensor value
          lcd.print(phValue);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.println("Water is contaminated by other acid");
          lcd.setCursor(0,1);
          lcd.print("Water is acidic");
          delay(5000);
          lcd.clear();
          delay(5000);

        }
        delay(2000);
    }
    ph.calibration(voltage,temperature); // calibration process by Serail CMD
    
}

TDS sensor

Arduino
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Initialize the LCD object with the pins connected to the LCD screen

int TDSsensorPin = A1; // Assign TDS sensor pin to analog pin A0

void setup() {
  Serial.begin(9600); // Initialize serial communication
  lcd.begin(16, 2); // Initialize the LCD screen
  lcd.clear(); // Clear the LCD screen
}

void loop() {
  int TDSsensorValue = analogRead(TDSsensorPin); // Read TDS sensor value
  float voltage = TDSsensorValue * (5.0 / 1023.0); // Convert sensor value to voltage
  float tdsValue = voltage / 0.005; // Convert voltage to TDS value

  if (tdsValue < 500){
     lcd.setCursor(0,0);
     lcd.print("TDS Value:"); // display the sensor value
     lcd.print(tdsValue);
     lcd.print("ppm");
     Serial.print("TDS Value: "); // Print the sensor value
     Serial.print(tdsValue);
     Serial.println(" ppm");
     Serial.println("Water is ideal for consumption");
     lcd.setCursor(0,1);
     lcd.print("Water is ideal");
     delay(5000);
     lcd.clear();
     delay(5000);
  }
  else {
     lcd.setCursor(0,0);
     lcd.print("TDS Value:"); // display the sensor value
     lcd.print(tdsValue);
     lcd.print("ppm");
     Serial.print("TDS Value: "); // Print the sensor value
     Serial.print(tdsValue);
     Serial.println(" ppm");
     Serial.println("Water is contaminated");
     lcd.setCursor(0,1);
     lcd.print("Contaminated");
     delay(5000);
     lcd.clear();
     delay(5000);
  }
  delay(1000); // Wait for 1 second
}

Overall Code

Arduino
#include "DFRobot_PH.h"
#include <EEPROM.h>
#include <LiquidCrystal.h>

int TDSsensorPin = A0; // Assign TDS sensor pin to analog pin A0
#define PH_PIN A1 // Assign turbidity sensor pin to analog pin A1
int turbidityPin = A2; // Assign turbidity sensor pin to analog pin A2


float voltage,phValue,temperature = 25;
DFRobot_PH ph;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Initialize the LCD object with the pins connected to the LCD screen

const int filterValve = 6;
const int acidValve = 7;
const int baseValve = 8;
const int heater = 9;
const int UV = 13;


 
void setup() {
  Serial.begin(9600); // Initialize serial communication
  ph.begin(); // Initialize pH object
  lcd.begin(16, 2); // Initialize the LCD screen
  lcd.clear(); // Clear the LCD screen

  pinMode(filterValve, OUTPUT);
  pinMode(acidValve, OUTPUT);
  pinMode(baseValve, OUTPUT);
  pinMode(heater, OUTPUT);
  pinMode(UV, OUTPUT);
  
}

void loop() {
  int TDSsensorValue = analogRead(TDSsensorPin); // Read TDS sensor value
  float voltage = TDSsensorValue * (5.0 / 1023.0); // Convert sensor value to voltage
  float tdsValue = voltage / 0.005; // Convert voltage to TDS value

  int sensorReading = analogRead(turbidityPin); // Read turbidity sensor value
  float relative = 385 - sensorReading;// Find relative value
  float turbidityValue = (relative/385.00) * 100.00; // Convert to percentage

  static unsigned long timepoint = millis();
    if(millis()-timepoint>1000U){                  //time interval: 1s
        timepoint = millis();
        voltage = analogRead(PH_PIN)/1024.0*5000;  // read the voltage
        phValue = ph.readPH(voltage, temperature);  // convert voltage to pH with temperature compensation
        
        if(phValue >= 6.00 && phValue <= 8.50 && tdsValue < 200 && turbidityValue < 5.00){
          digitalWrite(acidValve, HIGH);
          digitalWrite(baseValve, HIGH);
          digitalWrite(filterValve, HIGH);
          digitalWrite(heater, HIGH);
          digitalWrite(UV, LOW);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.print("TDS Value: ");
          Serial.print(tdsValue);
          Serial.println("ppm");
          Serial.print("Turbidity Value: ");
          Serial.print(turbidityValue);
          Serial.println("%");
          Serial.println("Water is ideal for consumption");
          lcd.setCursor(0,0);
          lcd.print("Water is ideal");
          delay(2000);
          lcd.clear();
          delay(2000);
        }
        
        else if(phValue > 8.50 && tdsValue < 200 && turbidityValue < 5.00){
          digitalWrite(acidValve, LOW);
          digitalWrite(baseValve, HIGH);
          digitalWrite(filterValve, HIGH);
          digitalWrite(heater, HIGH);
          digitalWrite(UV, LOW);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.print("TDS Value: ");
          Serial.print(tdsValue);
          Serial.println("ppm");
          Serial.print("Turbidity Value: ");
          Serial.print(turbidityValue);
          Serial.println("%");
          Serial.println("Water is contaminated by alkaline detergent");
          lcd.setCursor(0,0);
          lcd.print("Alkaline");
          delay(2000);
          lcd.clear();
          delay(2000);
        }
        
        else if(phValue < 4.00 && tdsValue < 200 && turbidityValue < 5.00){
          digitalWrite(acidValve, HIGH);
          digitalWrite(baseValve, LOW);
          digitalWrite(filterValve, HIGH);
          digitalWrite(heater, HIGH);
          digitalWrite(UV, LOW);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.print("TDS Value: ");
          Serial.print(tdsValue);
          Serial.println("ppm");
          Serial.print("Turbidity Value: ");
          Serial.print(turbidityValue);
          Serial.println("%");
          Serial.println("Water is contaminated by acetic/citric acid");
          lcd.setCursor(0,0);
          lcd.print("Acetic/Citric");
          delay(2000);
          lcd.clear();
          delay(2000);
        }

        else if(phValue >= 4.00 && tdsValue < 200 && turbidityValue < 5.00){
          digitalWrite(acidValve, HIGH);
          digitalWrite(baseValve, HIGH);
          digitalWrite(filterValve, HIGH);
          digitalWrite(heater, HIGH);
          digitalWrite(UV, HIGH);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.print("TDS Value: ");
          Serial.print(tdsValue);
          Serial.println("ppm");
          Serial.print("Turbidity Value: ");
          Serial.print(turbidityValue);
          Serial.println("%");
          Serial.println("Water is contaminated by carbonic acid. Might have bacteria");
          lcd.setCursor(0,0);
          lcd.print("Carbonic");
          delay(2000);
          lcd.clear();
          delay(2000);
        }

        else if(phValue >= 6.00 && phValue <= 8.50 && turbidityValue >= 5.00){
          digitalWrite(acidValve, HIGH);
          digitalWrite(baseValve, HIGH);
          digitalWrite(filterValve, LOW);
          digitalWrite(heater, HIGH);
          digitalWrite(UV, LOW);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.print("TDS Value: ");
          Serial.print(tdsValue);
          Serial.println("ppm");
          Serial.print("Turbidity Value: ");
          Serial.print(turbidityValue);
          Serial.println("%");
          Serial.println("Water is contaminated by insoluble foreign particles");
          lcd.setCursor(0,0);
          lcd.print("High Turbidity");
          delay(2000);
          lcd.clear();
          delay(2000);
        }

        
        else if(phValue >= 6.00 && phValue <= 8.50 && tdsValue >= 200.00 ){
          digitalWrite(acidValve, HIGH);
          digitalWrite(baseValve, HIGH);
          digitalWrite(filterValve, HIGH);
          digitalWrite(heater, LOW);
          digitalWrite(UV, LOW);
          Serial.print("pH:");
          Serial.println(phValue);
          Serial.print("TDS Value: ");
          Serial.print(tdsValue);
          Serial.println("ppm");
          Serial.print("Turbidity Value: ");
          Serial.print(turbidityValue);
          Serial.println("%");
          Serial.println("Water has high dissolved salts consentration");
          lcd.setCursor(0,0);
          lcd.print("High TDS");
          delay(2000);
          lcd.clear();
          delay(2000);
        }
        delay(2000);
    }
    ph.calibration(voltage,temperature); // calibration process by Serail CMD
    
}

Credits

Saqib Ahmed
1 project • 0 followers
Contact
Wesley Andrew Muchilwa Manani
1 project • 0 followers
Contact
NARENDRAN
20 projects • 22 followers
Contact
Nasser Mohsen
1 project • 0 followers
Contact
Abdullah Mostafa
0 projects • 0 followers
Contact

Comments

Please log in or sign up to comment.