viernes, 15 de mayo de 2015

Calefacción solar de bajo coste. Empezando a programar el Arduino (II). Leyendo los sensores.

Hoy vamos a ver cómo realizar las lecturas de los sensores de temperatura.

La lectura de los sensores la realiza la función denominada "read_sensors()" que os muestro a continuación. Como parámetro de entrada admite el número de veces que se va a realizar la lectura. Yo suelo leer cada sensor 2000 veces y hago la media.

Como hay 6 sensores, tiene un bucle con ese valor que a su vez ejecutará otros dos bucles: uno que realiza 10 lecturas que se desechan para estabilizar la adaptación de impedancias entre los sensores y el conversor AD (Analógico-Digital) del procesador del Arduino, y otro bucle que realiza la lectura de cada sensor tantas veces como le hayamos indicado en el parámetro de entrada.

Estas lecturas se van sumando para después realizar una media. Se podría además desechar el mayor y el menor valor de las lecturas, para eliminar picos, pero en mi caso parece que los datos salen muy pero que muy aceptables.

La fórmula que se aplica para convertir el valor en voltios del sensor a un valor digital es la proporcionada por el fabricante de los sensores MCP9700.



void read_sensors (int n) {   // n= number of readings.   // It takes about 100 microseconds (0.0001 s) to read an analog input,   // so the maximum reading rate is about 10,000 times a second.   float lectura;   DEBUG_PRINT("Reading sensors...");   // Calculate Temperature in Celcius   // Ltemp1=((analogRead(Ptemp1)*5000.0)/1024.0-500.0)/10.0;   // Previous analogRead and delay to stabilize reading (not sure)   for (int j = 0; j < 6; j++)   {      for (int k = 0; k < 10; k++)      {       //dummy reads for stabilization       analogRead(j);       delay(10);      }     lectura=0;     for (int i = 0; i < n; i++)     {       lectura = (((analogRead(j)*5000.0)/1024.0)-500.0)/10.0;       TempInCelciusf[j] += lectura;       delay(1);     }     TempInCelciusf[j] = TempInCelciusf[j]/n;   }   DEBUG_PRINTLN("Ok");   //Total delay (n=6): 6*(1000 +10+1) = 6066 msec = 6,06 sec }
Venga, os animo a hacer alguna prueba y que me comenteis...
Hasta la próxima.

No hay comentarios:

Publicar un comentario