Untitled
unknown
plain_text
9 months ago
2.1 kB
9
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