Aquarium water quality TDS sensor

Hi.

Why did you use ADS1115 instead of ESP ADC? I’m trying to read ESP ADC input voltage but it jumps randomly from 0,300V TO 0,450V. The ADC input voltage is stable (0,438V) according to my multimeter and osciloscope.

Is this ESP32 ADC issue as suggested on link bellow?

Thank you

I have the same problem, if the sensor is not in any liquid then the ESP shows me 0.1 volts at the input, although this should actually be 0 V. Otherwise everything works as expected. I would now suspect that the TDS value is not being measured quite correctly. I use it for my aquarium.

This is my code:

Does anyone have a solution for this?

substitutions:
  name: esphome-web-9e0310
  friendly_name: Aquarium

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  min_version: 2024.6.0
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: dev

esp32:
  board: esp32dev
  framework:
    type: arduino

one_wire:
  - platform: gpio
    pin:
        number: GPIO23
        mode:
          input: true
          pullup: true
sensor:
  - platform: dallas_temp
    address: 0x6d1d11d446eec628
    name: "Temperatur Aquarium"
    unit_of_measurement: "°C"
    id: temp
    icon: "mdi:thermometer-plus"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 2

  # https://esphome.io/components/sensor/adc.html
  - platform: adc
    pin: GPIO35
    id: ph
    name: "pH Sensor"
    attenuation: auto 
    update_interval: 1s
    unit_of_measurement: pH

  # https://esphome.io/components/sensor/index.html#sensor-filters
    filters:
      - median:
          window_size: 15
          send_every: 8
      # Measured voltage -> Actual pH (buffer solution)
      - calibrate_polynomial:
          degree: 2
          datapoints:
            
            #- 3.435 -> 7.4
            - 2.02 -> 4.0
            - 1.68 -> 7.0
            - 1.33 -> 10.0
            #- 0 -> 14
            #- 5 -> 0
      # Enable logging

  # Raw TDS Reading
  - platform: adc
    pin: GPIO34
    name: "TDS 01 Raw"
    attenuation: 6db # only for ESP32
    id: tds01_raw
    update_interval: 10s
    unit_of_measurement: "v"
    accuracy_decimals: 3
    internal: False
  
# Temperature Compensated Voltage
  - platform: template
    name: "TDS 01 TCV"
    id: temp01_comp_v
    unit_of_measurement: 'v'
    accuracy_decimals: 3
    lambda: 'return ((id(tds01_raw).state) / (1 + (0.02 * ((id(temp).state) - 25.0))));'
    update_interval: 10s
    internal: False

# Temperature Compensated TDS
  - platform: template
    name: "TDS-01"
    id: tds01_55g
    icon: "hass:water-opacity"
    unit_of_measurement: 'PPM'
    accuracy_decimals: 0    
    lambda: return (133.42*(id(temp01_comp_v).state)*(id(temp01_comp_v).state)*(id(temp01_comp_v).state) - 255.86*(id(temp01_comp_v).state)*(id(temp01_comp_v).state) + 857.39*(id(temp01_comp_v).state))*0.5;

  - platform: template
    name: "EC Reading"
    id: ec
    unit_of_measurement: 'EC'
    accuracy_decimals: 2
    update_interval: 5s
    lambda: return (((id(tds01_55g).state) * 2) / 1000);

logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

# Allow provisioning Wi-Fi via serial
improv_serial:

wifi:
  # Set up a wifi access point
  ap: {}

# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:

dashboard_import:
  package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
  import_full_config: true

# Sets up Bluetooth LE (Only on ESP32) to allow the user
# to provision wifi credentials to the device.
esp32_improv:
  authorizer: none

# To have a "next url" for improv serial
web_server:



Hallo Damian, also hat es schlußendlich nicht zusammen funktioniert ? Also pH Messung und TDS Messung oder bist du doch noch zu einer Lösung gekommen ?

In einem anderen Forum habe ich folgenden Hinweis, wie es funktionieren soll, gelesen:

An unserem Flusswasserqualitätsmonitor schalten wir zwischen den Messungen alle Sensoren aus. Wenn es Zeit ist, Daten zu erfassen, gehen wir wie folgt vor.

  1. Temperatursensor einschalten und Temperatur ablesen. Temperatursensor ausschalten.
  2. PH-Sensor einschalten und ablesen. PH-Sensor ausschalten.
  3. Schalten Sie den Sensor für gelösten Sauerstoff ein und lesen Sie den Wert ab. Schalten Sie den Sensor für gelösten Sauerstoff aus.
  4. Leitfähigkeitssensor einschalten und ablesen. Leitfähigkeitssensor ausschalten.
  5. Erstellen Sie Protokolldaten aus Abtastzeit und Sensordaten.
  6. Protokolldaten auf die SD-Karte schreiben.

Wir verwenden diese Reihenfolge, da der Temperatursensor am wenigsten störend und am wenigsten empfindlich gegenüber äußeren elektrischen Einflüssen und Störungen ist. Außerdem kann die Temperaturkorrektur für andere Sensoren erforderlich sein.
Der PH-Sensor ist am empfindlichsten gegenüber elektrischen Störungen und verursacht keine elektrischen Störungen.
Der Sensor für gelösten Sauerstoff ist der nächstempfindlichste.
Der Leitfähigkeitssensor sendet elektrische Impulse durch das Wasser und verursacht bei empfindlichen Sensoren großes Chaos. Wenn der Leitfähigkeitssensor zuletzt verwendet wird, können sich die anderen Sensoren zwischen den Proben erholen.
aus dem Forum Interference between PH sensor and TDS sensor - #3 by gilshultz - Sensors - Arduino Forum

Hallo Damian, also hat es schlußendlich nicht zusammen funktioniert ? Also pH Messung und TDS Messung oder bist du doch noch zu einer Lösung gekommen ?

In einem anderen Forum habe ich folgenden Hinweis, wie es funktionieren soll, gelesen:

An unserem Flusswasserqualitätsmonitor schalten wir zwischen den Messungen alle Sensoren aus. Wenn es Zeit ist, Daten zu erfassen, gehen wir wie folgt vor.

  1. Temperatursensor einschalten und Temperatur ablesen. Temperatursensor ausschalten.
  2. PH-Sensor einschalten und ablesen. PH-Sensor ausschalten.
  3. Schalten Sie den Sensor für gelösten Sauerstoff ein und lesen Sie den Wert ab. Schalten Sie den Sensor für gelösten Sauerstoff aus.
  4. Leitfähigkeitssensor einschalten und ablesen. Leitfähigkeitssensor ausschalten.
  5. Erstellen Sie Protokolldaten aus Abtastzeit und Sensordaten.
  6. Protokolldaten auf die SD-Karte schreiben.

Wir verwenden diese Reihenfolge, da der Temperatursensor am wenigsten störend und am wenigsten empfindlich gegenüber äußeren elektrischen Einflüssen und Störungen ist. Außerdem kann die Temperaturkorrektur für andere Sensoren erforderlich sein.
Der PH-Sensor ist am empfindlichsten gegenüber elektrischen Störungen und verursacht keine elektrischen Störungen.
Der Sensor für gelösten Sauerstoff ist der nächstempfindlichste.
Der Leitfähigkeitssensor sendet elektrische Impulse durch das Wasser und verursacht bei empfindlichen Sensoren großes Chaos. Wenn der Leitfähigkeitssensor zuletzt verwendet wird, können sich die anderen Sensoren zwischen den Proben erholen.

Hello,

finally I gave up for TDS meter since as mentioned:

even if was powered by esp every half hour, pH meter readings were constantly distorted

In thread about pH sensor someone mentioned:

A TDS will alter the PH values without having an isolator if in the same liquid system

I agree. Didn’t check if TDS measured by another ESP will not distort pH readings.