Que está leyendo realmente un sensor análogico de pH?

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.

No se si has analizado el código.

Toma diez valores, los ordena y luego descarta los dos mas chicos y los dos mayores y promedia sobre los 8 restantes
Razones? no lo se.
Debe haber alguna justificación estadística.

Mas allá de eso luego sobre 8 valores promediados, que hasta ahi coinciden digamos con tu lectura en mV

Tenemos estas dos ecuaciones

 float pHVol   = (float)avgValue/2230.14; 
 float phValue = pendiente * pHVol + intersec;

La primera convierte el valor RAW a phVol que no se que es.
Y la segunda con el valor de PhVol va a una recta dada por pendiente e intersec y da un valor Y que se corresponde con el valor de PH.

Bien... entendido todo esto.. es lógico que nada coincida con lo que lees porque en ningun momento da valores en mV
Quieres ver los valores en mV

Simplemente a avgValue * 5000.0 / 1023.0 te dara en mV.

Eso que surbyte dice no esta comentado justo debajo del inicio del loop()????