Untitled

 avatar
unknown
plain_text
13 days ago
2.1 kB
4
Indexable
#include <Wire.h>
#include <NewPing.h>
#include <LiquidCrystal_I2C.h>

#define TdsSensorPin A0  // Analog pin for TDS sensor
#define VREF 5.0         // Reference voltage (5V for Arduino Uno)
#define SCOUNT 30        // Number of samples for averaging
#define TRIG_PIN 9       // Ultrasonic sensor trigger pin
#define ECHO_PIN 10      // Ultrasonic sensor echo pin

LiquidCrystal_I2C lcd(0x27, 16, 2);

int analogBuffer[SCOUNT]; // Store analog readings
int analogBufferIndex = 0;
float averageVoltage = 0;
float tdsValue = 0;
float distance = 0;

void setup() {
    Serial.begin(9600);
    lcd.init();         
    lcd.backlight();
    
    pinMode(TRIG_PIN, OUTPUT);
    pinMode(ECHO_PIN, INPUT);
    pinMode(TdsSensorPin, INPUT);
}

void loop() {
    // Read and store multiple samples for better accuracy
    long sum = 0;
    for (int i = 0; i < SCOUNT; i++) {
        analogBuffer[i] = analogRead(TdsSensorPin);
        sum += analogBuffer[i];
        delay(10);  // Small delay between readings
    }

    // Calculate average voltage
    averageVoltage = (sum / SCOUNT) * (VREF / 1024.0);  // Convert to voltage
    
    // Convert voltage to TDS value
    tdsValue = (averageVoltage - 0.5) * 500;
    if (tdsValue < 0) tdsValue = 0;  // Avoid negative values

    // Ultrasonic sensor distance measurement
    digitalWrite(TRIG_PIN, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIG_PIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIG_PIN, LOW);
    distance = pulseIn(ECHO_PIN, HIGH) * 0.034 / 2; // Convert to cm

    // Display values on LCD
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("TDS: ");
    lcd.print(tdsValue);
    lcd.print(" ppm");
    
    lcd.setCursor(0, 1);
    lcd.print("Water Lvl: ");
    lcd.print(distance);
    lcd.print(" cm");
    
    // Debugging Output in Serial Monitor
    Serial.print("TDS Value: ");
    Serial.print(tdsValue);
    Serial.println(" ppm");
    
    Serial.print("Water Level: ");
    Serial.print(distance);
    Serial.println(" cm");

    delay(1000);  // Wait before next reading
}
Editor is loading...
Leave a Comment