Analog TDS Sensor Meter

Analog TDS Sensor Meter

¿Qué son los Sólidos Disueltos Totales (TDS)?

Los TDS indican la cantidad de miligramos de sólidos solubles disueltos en un litro de agua. En general, a mayor valor de TDS, más impura es el agua. Por lo tanto, el valor de TDS es un buen indicador de la limpieza del agua.

Un medidor de TDS es comúnmente usado para medir este valor, pero los sistemas de monitoreo en tiempo real son costosos. Este kit de sensor de TDS proporciona una salida analógica compatible con la mayoría de los microcontroladores, como Arduino. Con controladores Arduino, es fácil construir un detector de TDS con un presupuesto limitado.

Este producto acepta una entrada de voltaje amplio de 3.3 a 5.5V y ofrece una salida de voltaje analógico de 0 a 2.3V, lo que lo hace compatible con sistemas de control de 5V o 3.3V como Arduino, ESP32, Raspberry Pi, micro:bit y LattePanda. La fuente de excitación es una señal de CA, que previene la polarización de la sonda y prolonga su vida útil, además de aumentar la estabilidad de la señal de salida. La sonda TDS es impermeable y puede sumergirse en agua para mediciones a largo plazo.

Especificaciones de PCB

  • Voltaje de entrada: 3.3 ~ 5.5V
  • Voltaje de salida: 0 ~ 2.3V
  • Corriente : 3 ~ 6mA
  • Rango de medición de TDS: 0 ~ 1000ppm
  • Precisión de medición de TDS: ± 10% F.S. (25 ℃)
  • Tamaño del módulo: 42 * 32mm
  • Interfaz del módulo: PH2.0-3P
  • Interfaz del electrodo: XH2.54-2P

Componentes necesarios para el proyecto

Hardware:

Software:

Simple Code TDS Meter

  • Definir el pin ADS #define TdsSensorPin = PIN QUE VAMOS A USAR
  • Definir #define VREF 5 (Si usamos Arduino es 5V en caso de ESP32 es 3.3V, pero siempre y cuando depende de la Protoboard).
  • Definir (float)VREF / 4095.0; acorde al Microcontyrolador que vamos usar en caso de Arduino es 10 bit 1023 o en caso de ESP32 es de 12 bit 4095. Mas sobre ADS se puede leer aquí.
#define TdsSensorPin 34 //ESP32
#define VREF 5      // analog reference voltage(Volt) of the ADC
#define SCOUNT  30           // sum of sample point
int analogBuffer[SCOUNT];    // store the analog value in the array, read from ADC
int analogBufferTemp[SCOUNT];
int analogBufferIndex = 0,copyIndex = 0;
float averageVoltage = 0,tdsValue = 0,temperature = 25;

void setup()
{
    Serial.begin(115200);
    pinMode(TdsSensorPin,INPUT);
}

void loop()
{
   static unsigned long analogSampleTimepoint = millis();
   if(millis()-analogSampleTimepoint > 40U)     //every 40 milliseconds,read the analog value from the ADC
   {
     analogSampleTimepoint = millis();
     analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin);    //read the analog value and store into the buffer
     analogBufferIndex++;
     if(analogBufferIndex == SCOUNT) 
         analogBufferIndex = 0;
   }   
   static unsigned long printTimepoint = millis();
   if(millis()-printTimepoint > 800U)
   {
      printTimepoint = millis();
      for(copyIndex=0;copyIndex<SCOUNT;copyIndex++)
        analogBufferTemp[copyIndex]= analogBuffer[copyIndex];
      averageVoltage = getMedianNum(analogBufferTemp,SCOUNT) * (float)VREF / 4095.0; // read the analog value more stable by the median filtering algorithm, and convert to voltage value
      float compensationCoefficient=1.0+0.02*(temperature-25.0);    //temperature compensation formula: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0));
      float compensationVolatge=averageVoltage/compensationCoefficient;  //temperature compensation
      tdsValue=(133.42*compensationVolatge*compensationVolatge*compensationVolatge - 255.86*compensationVolatge*compensationVolatge + 857.39*compensationVolatge)*0.5; //convert voltage value to tds value
      //Serial.print("voltage:");
      //Serial.print(averageVoltage,2);
      //Serial.print("V   ");
      Serial.print("TDS Value:");
      Serial.print(tdsValue,0);
      Serial.println("ppm");
   }
}
int getMedianNum(int bArray[], int iFilterLen) 
{
      int bTab[iFilterLen];
      for (byte i = 0; i<iFilterLen; i++)
      bTab[i] = bArray[i];
      int i, j, bTemp;
      for (j = 0; j < iFilterLen - 1; j++) 
      {
      for (i = 0; i < iFilterLen - j - 1; i++) 
          {
        if (bTab[i] > bTab[i + 1]) 
            {
        bTemp = bTab[i];
            bTab[i] = bTab[i + 1];
        bTab[i + 1] = bTemp;
         }
      }
      }
      if ((iFilterLen & 1) > 0)
    bTemp = bTab[(iFilterLen - 1) / 2];
      else
    bTemp = (bTab[iFilterLen / 2] + bTab[iFilterLen / 2 - 1]) / 2;
      return bTemp;
}

Después de cargar el código de muestra, abra el monitor serie del IDE de Arduino. A continuación, inserte la sonda TDS en el agua que desea analizar y agítela suavemente para asegurarse de que se mezclen bien los sólidos disueltos. Espere unos momentos para que la lectura se estabilice. Una vez que la lectura sea constante, podrá obtener un valor preciso del TDS del agua. Este valor reflejará la cantidad de sólidos disueltos presentes en el agua, lo cual es un buen indicador de su limpieza y calidad.

Analog TDS Sensor Meter

TDS Meter usando Libraries GravityTDS.h

#include <EEPROM.h>
#include "GravityTDS.h"

#define TdsSensorPin 34
GravityTDS gravityTds;

float temperature = 25,tdsValue = 0;

void setup()
{
    Serial.begin(115200);
    gravityTds.setPin(TdsSensorPin);
    gravityTds.setAref(3.3);  //reference voltage on ADC, default 5.0V on Arduino UNO // ESP32 3.3V
    gravityTds.setAdcRange(4096;  //1024 for 10bit ADC;4096 for 12bit ADC
    gravityTds.begin();  //initialization
}

void loop()
{
    //temperature = readTemperature();  //add your temperature sensor and read it
    gravityTds.setTemperature(temperature);  // set the temperature and execute temperature compensation
    gravityTds.update();  //sample and calculate
    tdsValue = gravityTds.getTdsValue();  // then get the value
    Serial.print(tdsValue,0);
    Serial.println("ppm");
    delay(1000);
}

Calibración

  • Carge el código de muestra en su placa controladora, luego abra el monitor serie.
  • Limpie la sonda TDS y luego séquela con papel absorbente. Inserte la sonda en la solución tampón de conductividad eléctrica o valor TDS conocido, luego revuelva suavemente y espere lecturas estables. Si no tiene la solución tampón estándar, un medidor que puedes encontrar aquí (ENLACE) TDS también puede medir el valor TDS de la solución líquida.
  • Ingrese el comando «enter» para ingresar al modo de calibración.
Analog TDS Sensor Meter

Ingrese el comando «CAL: tds value» para calibrar el sensor. En este ejemplo, uso la solución tampón de 707 ppm, por lo que necesito ingresar el comando «cal:707»

Analog TDS Sensor Meter

Ingrese el comando «EXIT» para guardar y salir.

Analog TDS Sensor Meter

Después de la calibración, ahora puede utilizar el sensor TDS en su aplicación.

Gravity Analog Tds Sensor Meter Arduino Schematic 

Analog TDS Sensor Meter

Schematic Connection Diagram

Analog TDS Sensor Meter
Analog TDS Sensor Meter
Índice