Descripción
Sensor del valor total de sólidos disueltos (TDS, Total Dissolved Solids) en agua, modelo KS0429 (KS-0429), como parámetro relacionado con la limpieza del agua. En general, un mayor nivel de TDS implica un mayor nivel de sólidos disueltos en agua y, por lo tanto, menos nivel de limpieza.
Especificaciones:
- Tensión de alimentación: 3,3V / 5V
- Consumo de corriente: 3-6mA
- Rango de detección: 0-1000ppm (salida 0-2,3V)
- Error: +/-10% FS
- Sensor: tipo agua, 60cm de cable, impermeable
Más información: Hoja de datos KS0429
Código de ejemplo:
#define TdsSensorPin A1 #define VREF 5.0 // Referencia del ADC int analogBuffer[SCOUNT]; Almacenamiento de datos en buffer int analogBufferTemp[SCOUNT]; int analogBufferIndex = 0,copyIndex = 0; float averageVoltage = 0,tdsValue = 0,temperature = 25; // *** CONFIGURACIÓN *** void setup() { Serial.begin(9600); // Monitor serie a 9600bps pinMode(TdsSensorPin,INPUT); } // *** CÓDIGO PRINCIPAL *** void loop() { static unsigned long analogSampleTimepoint = millis(); if(millis()-analogSampleTimepoint > 40U) { //Cada 40 ms, lee el ADC analogSampleTimepoint = millis(); analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin); //Lee ADC y lo guarda en el 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/ 1024.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"); } } // *** FUNCIONES *** 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; }
Valoraciones
No hay valoraciones aún.