TDS sensor is affecting pH sensor, how to fix it?

Hello everyone, I am an esp32 newbie working on a smart water tank project. Let me introduce:

Hardware:
ESP32 DEVKIT V1
ESP32S 30P EXPANSION BOARD
TDS Sensor
SEN0161 PH meter

The ph sensor valve jumps when I put the TDS sensor into the soapy water.

This is the circuit diagram.
Circuit Diagram

Source Code

#define BLYNK_PRINT Serial

#define BLYNK_TEMPLATE_ID "TMPL6v9JuHYAV"
#define BLYNK_TEMPLATE_NAME "Smart Water Tank"
#define BLYNK_AUTH_TOKEN "VRd-62sso0mg1tDc214HyxoMrXbvr8Og"

#define ONE_WIRE_BUS 32  //temperautre
#define SERIAL Serial

#include <OneWire.h>
#include <DallasTemperature.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 20, 4);

BlynkTimer timer;

char auth[] = "VRd-62sso0mg1tDc214HyxoMrXbvr8Og";
char ssid[] = "Lab_N208";
char pass[] = "12345678";

unsigned long int avgValue;
float b;
int buf[10], temp;
double avg[10];
float ec_Val = 0;
float ecCal = 1;
float Aref = 3.3;
unsigned int tdsValue = 0;

int count = 0;
int number = 0;

void setup() {
  pinMode(14, OUTPUT);  //buzzer
  pinMode(36, INPUT);   //levelmeter
  pinMode(39, INPUT);   //levelmeter
  pinMode(34, INPUT);   //ph
  pinMode(33, INPUT);   //tds

  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
  sensors.begin();
  lcd.init();
  lcd.backlight();

  timer.setInterval(1000L, levelmeter);
  timer.setInterval(1000L, ph);
  timer.setInterval(1000L, temperature);
  timer.setInterval(1000L, tds);
}

void levelmeter() {
  int watermeter1 = digitalRead(36);
  int watermeter2 = digitalRead(39);

  if (watermeter1 == HIGH && watermeter2 == HIGH) {
    Blynk.logEvent("low_water_level", "Low Water Level!!");
    Serial.println("LowWaterLevel!");
    digitalWrite(14, LOW);
    lcd.setCursor(0, 3);
    lcdReprint("Low Water Level!!", 3);
  } else if (watermeter1 == LOW && watermeter2 == HIGH) {
    Serial.println("NormalWaterLevel!");
    digitalWrite(14, HIGH);
    lcd.setCursor(0, 3);
    lcdReprint("Normal Water Level", 3);
  } else {
    Blynk.logEvent("high_water_level", "High Water Level!!");
    Serial.println("HighWaterLevel!");
    lcd.setCursor(0, 3);
    lcdReprint("High Water Level!!", 3);
    digitalWrite(14, LOW);
  }
}

void ph() {
  for (int i = 0; i < 10; i++) {
    buf[i] = analogRead(34);
    delay(10);
  }
  for (int i = 0; i < 9; i++) {
    for (int j = i + 1; j < 10; j++) {
      if (buf[i] > buf[j]) {
        temp = buf[i];
        buf[i] = buf[j];
        buf[j] = temp;
      }
    }
  }
  avgValue = 0;
  for (int i = 2; i < 8; i++)
    avgValue += buf[i];
  avgValue = avgValue / 6;
  float phValue = (float)avgValue * 3.3 / 4095;
  phValue = 5.70 * phValue + 1.7;
  Blynk.virtualWrite(V4, phValue);
  Serial.print("pH: ");
  Serial.print(phValue, 2);
  Serial.println(" ");
  lcd.setCursor(0, 0);
  lcd.print("Water Tank Monitor");
  lcd.setCursor(12, 1);
  lcd.print("pH:");
  lcdClearCell(1, 16, 19);
  lcd.setCursor(16, 1);
  lcd.print(phValue);
  if (phValue > 9) {
    Blynk.logEvent("high_ph", "High pH!!");
  }
  if (phValue < 5) {
    Blynk.logEvent("low_ph", "Low pH!!");
  }
}

void temperature() {
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);

  Blynk.virtualWrite(V2, tempC);
  Serial.print("Temp: ");
  Serial.print(tempC);
  Serial.println("ºC");
  lcd.setCursor(0, 2);
  lcd.print("Temp:");
  lcdClearCell(2, 5, 11);
  lcd.setCursor(6, 2);
  lcd.print(tempC);
}

void tds() {
  number = number + 1;
  if (number > 99999) {
    number = 10;
  }
  if (count >= 10) {
    count = 1;
  } else {
    count = count + 1;
  }

  double wTemp = 27;
  float V_level = Aref / 1024.0;
  float rawEc = analogRead(33) * V_level;
  float T_Cof = 1.0 + 0.02 * (wTemp - 25.0);

  ec_Val = (rawEc / T_Cof) * ecCal;
  double tdsValue = (133.42 * pow(ec_Val, 3) - 255.86 * ec_Val * ec_Val + 857.39 * ec_Val) * 0.5;

  avg[count - 1] = tdsValue;
  double sum = 0;
  for (int n = 0; n < 10; n++) {
    sum = sum + avg[n];
  }
  double avger = 0;
  if (number < 10) {
    avger = sum / number;
  } else {
    avger = sum / 10;
  }
  Blynk.virtualWrite(V3, avger);
  Serial.print("TDS: ");
  Serial.print(avger);
  Serial.println("PPM");
  lcd.setCursor(0, 1);
  lcd.print("TDS:");
  lcdClearCell(1, 5, 11);
  lcd.setCursor(5, 1);
  lcd.print(avger);
  if (avger > 100) {
    Blynk.logEvent("high_tds", "TDS over 100ppm!!");
  }
}

void lcdClearLine(int line) {
  for (int n = 0; n < 20; n++) {
    lcd.setCursor(n, line);
    lcd.print(" ");
  }
  lcd.setCursor(0, 0);
}

void lcdClearCell(int line, int x, int t) {
  for (int n = x; n < t + 1; n++) {
    lcd.setCursor(n, line);
    lcd.print(" ");
  }
  lcd.setCursor(0, 0);
}

void lcdReprint(String txt, int line) {
  lcdClearLine(line);
  lcd.setCursor(0, line);
  lcd.print(txt);
}

void loop() {
  Blynk.run();
  timer.run();
}

Thank you for your help.

Why have you created a second topic that appears identical to the one you made yesterday?

Pete.

Because I thought the previous post was not sent

Okay, in that case I’ve now deleted your previous topic.

Pete.

Thank you, sir