Autre: sonde étanche
Le forfait comprend:
1 x carte adaptateur de signal TDS
1 x sonde TDS étanche
1 x ligne de capteur analogique
code source:
#define TdsSensorPin A1
#define kValue 1.8 // kValue = valeur de TDS du calibrateur / mesure pour obtenir une TDS
#define VREF 5.0 // tension de référence analogique (volt) de l’ADC
#define SCOUNT 30 // somme du point d'échantillon
Int analogBuffer [SCOUNT]; // stocke la valeur analogique dans le tableau, lue depuis ADC
Int analogBufferTemp [SCOUNT];
Int analogBufferIndex = 0, copyIndex = 0;
Float averageVoltage = 0, tdsValue = 0, temperature = 25;
Void setup()
{
Serial.begin (115200);
pinMode (TdsSensorPin, INPUT);
}
Boucle vide ()
{
Static unsigned long analogSampleTimepoint = millis ();
If (millis () - analogSampleTimepoint> 40U) // toutes les 40 millisecondes, lisez la valeur analogique du CAN
{
analogSampleTimepoint = millis ();
analogBuffer [analogBufferIndex] = analogRead (TdsSensorPin); // lit la valeur analogique et la stocke dans le tampon
analogBufferIndex ++;
Si (analogBufferIndex == SCOUNT)
analogBufferIndex = 0;
}
Static unsigned long printTimepoint = millis ();
If (millis () - printTimepoint> 800U)
{
printTimepoint = millis ();
Pour (copyIndex = 0; copyIndex
analogBufferTemp [copyIndex] = analogBuffer [copyIndex];
averageVoltage = getMedianNum (analogBufferTemp, SCOUNT) * (float) VREF / 1024.0; // lit la valeur analogique plus stable avec l'algorithme de filtrage médian et convertit en valeur de tension
Compensation de flottementCoefficient = 1,0 + 0,02 * (température-25,0); // formule de compensation de température: fFinalResult (25 ^ C) = fFinalResult (actuel) / (1.0 + 0.02 * (fTP-25.0));
Float compensationVolatge = moyenneVoltage / compensationCoefficient; //compensation de température
tdsValue = (133,42 * compensationVolatge * compensationVolatge * compensationVolatge - 255,86 * compensationVolatge * compensationVolatge + 857,39 * compensationVolatge) * 0,5 * kValue; // convertit la valeur de tension en valeur tds
//Serial.print("voltage: ");
//Serial.print(averageVoltage,2);
//Serial.print("V ");
Serial.print ("Valeur TDS:");
Serial.print (tdsValue, 0);
Serial.println ("ppm");
}
}
Int getMedianNum (int bArray [], int iFilterLen)
{
Int bTab [iFilterLen];
Pour (octet i = 0; i
bTab [i] = bArray [i];
Int i, j, bTemp;
Pour (j = 0; j <iFilterLen - 1; j ++)
{
Pour (i = 0; i <iFilterLen - j - 1; i ++)
{
Si (bTab [i]> bTab [i + 1])
{
bTemp = bTab [i];
bTab [i] = bTab [i + 1];
bTab [i + 1] = bTemp;
}
}
}
Si ((iFilterLen & 1)> 0)
bTemp = bTab [(iFilterLen-1) / 2];
Autre
bTemp = (bTab [iFilterLen / 2] + bTab [iFilterLen / 2 - 1]) / 2;
Retour bTemp;
}