Buenos días !
Me ha surgido una duda con un proyecto relacionado con un lector de pH. El lector en concreto es este, el caso es que con él viene un programa de testeo y calibración, que no me funcionava para nada. inicialmente pensaba que estaba estropeado, pero después de dar vueltas me dió por leer las tensiones de salida del lector de pH y sí, havía respuesta, es mas conseguí sin problemas calibrar el pH a partir de las tensiones y obtener una recta. Volviendo al sketch, me propuse reacer el código partiendo de la lectura em mV, pero cuando saco por el puerto serie la lectura directa poniendo un Serial.print(analogInPin) no obtengo el mismo valor que en el tester (de hecho siempre da un vaor constante de 17...), tampoco el valor en el sketch de avgValue coincide con el leído en el tester...y aquí la pregunta, ¿qué se lee realmente? con el valor de avgValue he podido encontrar un valor de conversión para passar la lectura a los mV leídos en el tester... pero no me parece muy elegante... o si, no sé.
Los resultados experimentales son:
pH | Average | mV |
---|---|---|
4 | 1390 | 0.69 |
7 | 3240 | 1.59 |
9.21 | 4614 | 2.28 |
Adjunto el sketch, los valores de pendiente y intersec son los valores experimentales encontrados despues de generar la recta de calibración.
const int analogInPin = A0;
int sensorValue = 0;
unsigned long int avgValue;
float b;
float pendiente = 3.48;
float intersec = 1.98;
int buf[10],temp;
void setup() {
Serial.begin(9600);
}
void loop() {
//float pHVol=(float)avgValue*5.0/1024/6;
for(int i=0;i<10;i++)
{
buf[i]=analogRead(analogInPin);
Serial.println(analogInPin);
delay(10);
}
for(int i=0;i<9;i++)
{
for(int j=i+1;j<10;j++)
{
if(buf[i]>buf[j])
{
temp=buf[i];
buf[i]=buf[j];
buf[j]=temp;
}
}
}
avgValue=0;
for(int i=2;i<8;i++)
avgValue+=buf[i];
float pHVol=(float)avgValue/2230.14;
float phValue = pendiente * pHVol + intersec;
Serial.print("avgValue = ");
Serial.println(avgValue);
Serial.print("pH = ");
Serial.print(phValue);
Serial.print(" ( ");
Serial.print(pHVol);
Serial.print(" mV) - ( ");
Serial.print(avgValue);
Serial.println(" )");
Serial.println("----------------------");
delay(3000);
}
Graicas por escuchar !! Un saludo.