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.
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.
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?
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.
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.