Arduino avec capteur TDS (capteur de qualité de l’eau)

Arduino avec capteur TDS (capteur de qualité de l'eau)

Dans ce guide, vous apprendrez à utiliser un compteur TDS (Total Dissolved Solids) avec une carte Arduino. Un compteur TDS indique le total des solides dissous comme les sels, les minéraux et les métaux, dans une solution. Ce paramètre peut être utilisé pour vous donner une idée de la qualité de l’eau et comparer l’eau de différentes sources. L’une des principales applications d’un compteur TDS est la surveillance de la qualité de l’eau de l’aquarium.

Arduino avec capteur TDS capteur de qualité de l'eau IDE

Nous utiliserons le compteur TDS de keystudio et vous montrerons un exemple simple pour mesurer le TDS en unités ppm à l’aide de l’IDE Arduino.

Table des matières

Dans ce didacticiel, nous aborderons les sujets suivants

Présentation du compteur TDS

Un compteur TDS mesure le nombre total de solides dissous comme les sels, les minéraux et les métaux dans l’eau. À mesure que le nombre de solides dissous dans l’eau augmente, la conductivité de l’eau augmente, ce qui nous permet de calculer le total des solides dissous en ppm (mg/L).

Compteur TDS de solides dissous totaux

Bien qu’il s’agisse d’un bon indicateur pour surveiller la qualité de l’eau, notez qu’il ne mesure pas les contaminants dans l’eau. Ainsi, vous ne pouvez pas vous fier uniquement à cet indicateur pour déterminer si l’eau est bonne à la consommation ou non.

Un compteur TDS peut être utile pour surveiller la qualité de l’eau dans de nombreuses applications telles que les piscines, les aquariums, les aquariums, la culture hydroponique, les purificateurs d’eau, etc.

Dans ce tutoriel, nous utiliserons le compteur TDS de keystudio qui est livré avec un module d’interface et une sonde à électrode (voir image ci-dessus).

Pour plus d’informations sur le compteur TDS, nous vous recommandons de consulter le documents officiels.

Caractéristiques et spécifications

Ce tutoriel fait référence au TDS Meter V1.0 de keystudio. Voici les paramètres du capteur :

Mètre TDS :

  • Tension d’entrée : cc 3,3 ~ 5,5 V.
  • Tension de sortie : 0 ~ 2,3 V
  • Courant de fonctionnement : 3 ~ 6 mA
  • Plage de mesure TDS : 0 ~ 1000 ppm
  • Précision de mesure TDS : ± 10 % FS (25 ℃)
  • Interface de modules : XH2.54-3P
  • Interface d’électrode : XH2.54-2P

Sonde TDS :

  • Nombre d’aiguilles : 2
  • Longueur totale : 60 cm
  • Interface de connexion : XH2.54-2P
  • Couleur blanche
  • Sonde étanche

Où acheter le capteur TDS ?

Capteur TDS

Vous pouvez vérifier le capteur TDS sur Maker Advisor pour trouver le meilleur prix :

Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

Arduino avec capteur TDS capteur de qualite de leau

Interfaçage du compteur TDS avec l’Arduino

Le compteur TDS émet un signal analogique qui peut être mesuré à l’aide des broches analogiques Arduino (A0 à A5).

Câblez le capteur comme dans le tableau suivant :

Capteur TDS Arduino
Terre Terre
VCC 3.3V
Données A0 (ou toute autre broche analogique Arduino)

Lecture TDS (qualité de l’eau) avec l’Arduino-Code

Comme nous l’avons mentionné précédemment, le capteur émet un signal analogique qui peut être converti en TDS en ppm. Nous utilisons le code fourni par le documentation du capteur avec quelques modifications.

arduino avec capteur TDS qualité de l'eau

Pour obtenir des résultats plus précis, vous devrez probablement calibrer votre capteur par rapport à une solution avec une valeur TDS connue. Cependant, cela peut ne pas être nécessaire si vous n’êtes pas préoccupé par des valeurs spécifiques mais par une valeur qualitative de TDS.

Téléchargez le code suivant sur votre Arduino.

// Original source code: https://wiki.keyestudio.com/KS0429_keyestudio_TDS_Meter_V1.0#Test_Code
// Project details: https://Raspberryme.com/arduino-tds-water-quality-sensor/

#define TdsSensorPin A0
#define VREF 5.0              // 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;
int copyIndex = 0;

float averageVoltage = 0;
float tdsValue = 0;
float temperature = 16;       // current temperature for compensation

// median filtering algorithm
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;
}

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];
      
      // read the analog value more stable by the median filtering algorithm, and convert to voltage value
      averageVoltage = getMedianNum(analogBufferTemp,SCOUNT) * (float)VREF / 1024.0;
      
      //temperature compensation formula: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0)); 
      float compensationCoefficient = 1.0+0.02*(temperature-25.0);
      //temperature compensation
      float compensationVoltage=averageVoltage/compensationCoefficient;
      
      //convert voltage value to tds value
      tdsValue=(133.42*compensationVoltage*compensationVoltage*compensationVoltage - 255.86*compensationVoltage*compensationVoltage + 857.39*compensationVoltage)*0.5;
      
      //Serial.print("voltage:");
      //Serial.print(averageVoltage,2);
      //Serial.print("V   ");
      Serial.print("TDS Value:");
      Serial.print(tdsValue,0);
      Serial.println("ppm");
    }
  }
}

Afficher le code brut

Comment fonctionne le code

Jetons un coup d’œil rapide au code. Vous pouvez également passer directement à la Manifestation section.

Le TdsSensorPin La variable enregistre le GPIO où vous souhaitez obtenir les lectures. L’ESP8266 n’a qu’une seule broche analogique, A0.

#define TdsSensorPin A0

Ensuite, insérez la référence de tension analogique pour l’ADC. Pour un Arduino, c’est 5V.

#define VREF 5.0            // analog reference voltage(Volt) of the ADC

Avant d’obtenir une valeur de mesure, nous appliquerons un algorithme de filtrage médian pour obtenir une valeur plus stable. Le COMPTER La variable fait référence au nombre d’échantillons que nous allons filtrer avant d’obtenir une valeur réelle.

#define SCOUNT  30            // sum of sample point

Ensuite, nous avons besoin de tableaux pour stocker les lectures ainsi que de certaines variables d’index qui nous permettront de parcourir les tableaux.

int analogBuffer[SCOUNT];     // store the analog value in the array, read from ADC
int analogBufferTemp[SCOUNT];
int analogBufferIndex = 0;
int copyIndex = 0;

Initialiser le tensionmoyenne variables et tsdValue comme variables flottantes.

float averageVoltage = 0;
float tdsValue = 0;

La variable de température enregistre la valeur de température actuelle. La température influence les lectures, il existe donc un algorithme qui compense les fluctuations de température. Dans cet exemple, la température de référence est de 25 °C, mais vous pouvez la modifier en fonction de votre environnement. Pour des résultats plus précis, vous pouvez ajouter un capteur de température et obtenir la température réelle au moment de la lecture du capteur.

float temperature = 25;       // current temperature for compensation

La fonction suivante sera utilisée pour obtenir une valeur TDS stable à partir d’un tableau de lectures.

// median filtering algorithm
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;
}

Dans le mettre en place()initialisez le moniteur série à un débit en bauds de 115 200.

Serial.begin(115200);

Définissez la broche du capteur TDS comme entrée.

pinMode(TdsSensorPin,INPUT);

Dans la boucle (), obtenez de nouvelles lectures TDS toutes les 40 millisecondes et enregistrez-les dans le tampon :

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;
  }
}   

Ensuite, toutes les 800 millisecondes, il obtient les dernières lectures et obtient la tension moyenne en utilisant l’algorithme de filtrage créé auparavant :

static unsigned long printTimepoint = millis();
if(millis()-printTimepoint > 800U){
  printTimepoint = millis();
  for(copyIndex=0; copyIndex<SCOUNT; copyIndex++){
    analogBufferTemp[copyIndex] = analogBuffer[copyIndex];
      
    // read the analog value more stable by the median filtering algorithm, and convert to voltage value
    averageVoltage = getMedianNum(analogBufferTemp,SCOUNT) * (float)VREF / 1024.0;

Ensuite, il calcule un coefficient de compensation de température et calcule la valeur TDS en tenant compte de cette valeur :

//temperature compensation formula: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0)); 
float compensationCoefficient = 1.0+0.02*(temperature-25.0);
//temperature compensation
float compensationVoltage=averageVoltage/compensationCoefficient;
      
//convert voltage value to tds value
tdsValue=(133.42*compensationVoltage*compensationVoltage*compensationVoltage- 255.86*compensationVoltage*compensationVoltage + 857.39*compensationVoltage)*0.5;

Enfin, il imprime la valeur TDS en ppm :

Serial.print("TDS Value:");
Serial.print(tdsValue,0);
Serial.println("ppm");

Manifestation

Après avoir copié le code sur l’IDE Arduino, téléchargez le code sur votre carte. N’oubliez pas de sélectionner le bon tableau dans Outils > Planche et le bon port COM dans Outils > Port.

Après le téléchargement, ouvrez le moniteur série à un débit en bauds de 115 200.

Test du compteur TDS ESP32 ESP8266 Arduino

Il affichera une valeur d’environ 0 si la sonde n’est pas immergée. Mettez la sonde sur une solution pour vérifier son TDS. Vous pouvez essayer avec de l’eau du robinet et ajouter du sel pour voir les valeurs augmenter.

Capteur TDS Moniteur série Arduino IDE

J’ai mesuré la valeur TDS de l’eau du robinet dans ma maison et j’ai obtenu une valeur d’environ 100 ppm, ce qui est une bonne valeur pour l’eau potable.

J’ai également testé le thé et la valeur TDS a augmenté à environ 230 ppm, ce qui semble une valeur raisonnable.

Enfin, j’ai également mesuré la valeur TDS de l’eau en bouteille et j’ai obtenu une valeur d’environ 25 ppm (la même valeur lors de l’utilisation d’un ESP8266).

Conclusion

Un compteur TDS peut mesurer le total des solides dissous dans une solution. Il peut être utilisé comme indicateur de la qualité de l’eau et permet de caractériser l’eau. Le compteur renvoie la valeur TDS en ppm (parties par million—mg/L). La valeur TDS a de nombreuses applications mais elle ne peut pas être utilisée seule pour déterminer si l’eau est potable ou non.

Une excellente application de ce type de capteur est un moniteur de qualité de l’eau d’aquarium. Vous pouvez utiliser ce capteur avec un capteur de température étanche DS18B20 pour surveiller votre aquarium, par exemple.

Nous avons des tutoriels pour d’autres capteurs populaires avec la carte Arduino que vous pourriez aimer :

En savoir plus sur l’Arduino avec nos ressources :

Merci d’avoir lu.

  • Capteur TDS analogique Compatible avec la Carte Arduino, kit de Test de qualité de l'eau de capteur de Compteur TDS (Total Dissolved Solids), pour l'eau Domestique/Laboratoire/Recherche Scientifique
    Le capteur TDS compatible Arduino est utilisé pour mesurer la valeur TDS de l'eau. Et la valeur TDS reflète la propreté de l'eau. En outre, il peut être utilisé pour les tests de qualité de l'eau dans le domaine de l'eau domestique et de la culture hydroponique. TDS Indique combien de milligrammes de solides dissous sont dissous dans 1 litre d'eau. Généralement, une valeur TDS plus élevée signifie que plus le lysat est contenu dans l'eau et moins la propreté de l'eau. Par conséquent, la taille du TDS peut être utilisée comme l'une des bases pour refléter la propreté de l'eau. Et le produit est plug and play et facile à utiliser. En outre, la large tension d'alimentation de 3,3 ~ 5,5 V et la sortie de signal analogique de 0 ~ 2,3 V font de ce produit Un testeur TDS couramment utilisé est un stylo TDS. Bien que peu coûteux et facile à utiliser, il ne transfère pas de données au système de contrôle, ce qui permet une surveillance et une analyse en ligne à long terme de la qualité de l'eau. À l'aide d'un instrument dédié, bien qu'il puisse transmettre des données
  • KEYESTUDIO TDS Sonde de surveillance de la qualité de l'eau V1 Module de capteur avec connecteur XH2.54-3Pin Jumper Wire pour Arduino
    Le kit de capteur KEYESTUDIO TDS est compatible avec les contrôleurs Arduino, plug and play, facile à utiliser. Il peut être appliqué pour mesurer la valeur TDS de l'eau, afin de refléter la propreté de l'eau Le TDS (Total Dissolved Solids) indique le nombre de milligrammes de solides solubles dissous dans un litre d'eau. En général, plus la valeur TDS est élevée, plus les solides solubles sont dissous dans l'eau et moins l'eau est propre. La valeur TDS peut être utilisée comme l'une des références pour refléter la propreté de l'eau La mesure de la valeur TDS dans l'eau consiste à mesurer la quantité totale de diverses substances organiques ou inorganiques dissoutes dans l'eau, dans l'unité de ppm ou milligrammes par litre (mg / l) Son électrode peut mesurer les matériaux conducteurs, tels que les solides en suspension, les métaux lourds et les ions conducteurs dans l'eau. Le module est livré avec quatre trous fixes de ,2 mm, faciles à monter sur tous les autres appareils.
  • SENSTREE Capteur de débit d'eau G1/2", capteur à effet Hall de qualité alimentaire, débitmètre compteur, compteur 1–30 l/min – Compatible Arduino, Raspberry Pi et filtre à osmose inverse
    Fonctionne avec Arduino, Raspberry Pi et filtre à osmose inverse. Petite taille, imperméable, facile à installer, résistance à la chaleur, résistance à la pression, résistance au froid. Matériau : qualité alimentaire, tous les matériaux sont conformes aux normes de test ROHS, peuvent être utilisés pour l'eau potable. Plage de débit : 1-30 l/min, plage de tension de fonctionnement : DC 5-18 V, permet la compression : pression de l'eau 1,75 Mpa en dessous. ☺Capteur à effet Hall. Type de connecteur de fil: SM2.54 3P Se connecte au filetage mâle G1/2" BSPT, si utilisé pour NPT, nécessite un ruban d'étanchéité fileté. Forme d'onde de sortie : onde carrée, signal d'impulsion de sortie. ☺ Large application : il est principalement utilisé dans le chauffe-eau, la machine à café, le purificateur d'eau, la fontaine à boissons, le matériel de carte à puce de campus, etc.