Con el codigo que pongo seguidamente hago 100 lecturas de un sensor LM35DT y las guardo en un array para hacer una media.
Mi problema es que si muestro las mediciones por Serial.print todas ellas varian.
Las mediciones se hacen seguidas, una tras otra, y hay variaciones desde decimas de grado hasta 2 grados de diferencia. Como puede ser?
GRACIAS.
#define VALOR 100
#include "Wire.h"
#include "BlinkM_funcs.h"
#define blinkm_addr 0
int lm35 = 0;
int pinLED = 13;
int sensorPin = 0;
float valor_temp = 0;
float calcular_temperatura()
{
float temp=0;
float array_temp[VALOR];
float temp_total = 0;
for(int n=0;n<VALOR;n++)
{
temp = ((5 * analogRead(lm35)*100.0)/1023.0);
delay(10);
array_temp[n] = temp;
}
for(int n=0;n<VALOR;n++)
{
temp_total = temp_total + array_temp[n];
}
temp = temp_total / VALOR;
return(temp);
}
void setup()
{
Serial.begin(9600);
pinMode(pinLED, OUTPUT);
BlinkM_beginWithPower();
BlinkM_stopScript( blinkm_addr ); // turn off startup script
}
void temperatura(int pausa)
{
valor_temp = calcular_temperatura();
Serial.print("Valor: ");
Serial.println(valor_temp);
if (valor_temp >= 30){VERMELL(pausa);}
else if (valor_temp >= 28 && valor_temp < 30){LILA(pausa);}
else if (valor_temp >= 24 && valor_temp < 28){TARONJA(pausa);}
else if (valor_temp >= 22 && valor_temp < 24){GROC(pausa);}
else if (valor_temp >= 21 && valor_temp < 22){PISTATXO(pausa);}
else if (valor_temp >= 20 && valor_temp < 21){VERD(pausa);}
else if (valor_temp >= 19 && valor_temp < 20){CYAN(pausa);}
else if (valor_temp >= 18 && valor_temp < 19){BLAVOS(pausa);}
else if (valor_temp < 18){BLAU(pausa);}
else{BLANC(500);NEGRE(500);BLANC(500);NEGRE(500);BLANC(500);NEGRE(500);}
digitalWrite(pinLED, HIGH);
delay(pausa);
digitalWrite(pinLED, LOW);
}
void loop()
{
temperatura(1);
}
void VERMELL(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 255, 0, 0 ); delay(pausa);}
void VERD(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 0, 255, 0 ); delay(pausa);}
void BLAU(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 0, 0, 255 ); delay(pausa);}
void BLANC(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 255, 255, 255 ); delay(pausa);}
void NEGRE(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 0, 0, 0 ); delay(pausa);}
void GROC(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 255, 255, 0 ); delay(pausa);}
void LILA(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 255, 0, 255 ); delay(pausa);}
void TARONJA(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 255, 128, 0 ); delay(pausa);}
void MORAT(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 255, 0, 128 ); delay(pausa);}
void CYAN(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 0, 255, 255 ); delay(pausa);}
void BLAVOS(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 0, 128, 255 ); delay(pausa);}
void PISTATXO(int pausa){
BlinkM_fadeToRGB( blinkm_addr, 128, 255, 0 ); delay(pausa);}