LM35DZ mide mal la temperatura

Buenas noches, estoy aprendiendo a utilizar el sensor de temperatura LM35DZ y después de buscar en internet encuentro que tengo que conertar el vcc a 5v, tierra y una entrada digital. Luego al valor de la entrada le aplico la fórmula Temperatura=(VAlOR*((5/1024)*100)), pero esto me da unos 19 grados cuando la temperatura es de unos 23 aprox (utilizo un termómetro digital de ambiente)

La pregunta, puede ser que esté funcionando mal el sensor? Estoy utilizando una placa Arduino genérica.

Muchas gracias

Se mide en una entrada analógica, yo para estabilizar medidas hago 100 lecturas para hacer media.

Ante todo el LM35Z (hoja de datos) tiene un esquema sugerido que no es el simple VCC GND y leer el dato, sino este

Ver página 16 de la hoja de datos.

La página 15 dice que debes esperar para este sensor, ­±1 °C -50°C a 150°C y ±0.5°C para 25°C

Si tienes un termómetro de presión lo mejor es hacer una table de calibración y corregir sus lecturas de ese modo.
Entras con lo que lees y sales con lo que debería indicar.

surbyte:
Ante todo el LM35Z (hoja de datos) tiene un esquema sugerido que no es el simple VCC GND y leer el dato, sino este

Ver página 16 de la hoja de datos.

La página 15 dice que debes esperar para este sensor, ­±1 °C -50°C a 150°C y ±0.5°C para 25°C

Si tienes un termómetro de presión lo mejor es hacer una table de calibración y corregir sus lecturas de ese modo.
Entras con lo que lees y sales con lo que debería indicar.

Muchas gracias por la info, siendo que es para medir temperatura ambiente y para ir conociendo cómo funciona voy a seguir con este diagrama y aplicar la tabla como tú dices.

Saludos

krnlpanic:
Se mide en una entrada analógica, yo para estabilizar medidas hago 100 lecturas para hacer media.

Fue un error, estoy utilizando la entrada analógica y estaba leyendo cada 2 segundos, voy a probar lo que tú me dices. Si no es mucho pedir, podrías darme un ejemplo de código?

Muchas gracias

Hi,
Una cosa que puedes hacer es medir el voltaje con un voltimetro y compara la lectrua con la del micro. Deben de leer los mismo.

Llamo a la función poniendo la entrada a leer

leerSensor(A1)

Y la función

float leerSensor(char ent) {
  int y = 1;
  float z;
  while (y < 101) {
    z = z + analogRead(ent);
    y++;
  }
  z = z * 5 / 1024;
  return z;
}

No multiplico por 100 porque ya tengo 100 lecturas, esto no te va a ayudar a corregir el desvío tan grande de grados que tenías, pero si a estabilizar entre lecturas.

Porque para leer un entero sin signo usas un float, @krnlpanic? Es un error hacerlo
Y además no lo inicializas a 0 cuando será justamente una suma acumulativa. Puede que el compilador haga bien las cosas pero para que arriesgarse.

100 valores de 1024 dan como resultado 100*1024 = 102400 lo que te dice que z deberia ser un long como mínimo

si solo

float leerSensor(char ent) {
  float tmp;
  long z = 0;
  for (int i=0; i;100; i++) 
       z += analogRead(ent);
  tmp = (float) z * 5.0 / 1024.0;
  return tmp;
}

Excactamente lo mismo, solo algo mas eficiente.

Igualmente para mi 100 valores son una exageración.
Yo usaría menos y también un promedio móvil como el de Luis Llamas que muchas veces se ha explicado en este foro, pero son puntos de vista y enfoques que cada uno le damos.

Tomo todas las recomendaciones.

Por otro lado, muchas gracias por las respuestas tan claras y rápidas, da gusto.

Saludos

Tienes toda la razón, fue un código que hice para probar los sensores y al darme valores de temperatura correctos no pensé en el desbordamiento, utilice el float por el resultado y en mi código lo tengo inicializado a 0 pero por alguna extraña razón pensé en borrarlo antes de postear.