LM35 - Sensor de temperatura

Estimados buenas noches!

Quiero medir la temperatura con un LM35.
Los pines conectados de izquierda a derecha son : 5v- pin analogico 5 - GND

El codigo es el siguiente:

int lm35Pin=5;
float reading;

void setup()

{
Serial.begin(19200);
}

void loop()

{
reading=analogRead(lm35Pin);
reading=(5.0 * reading * 100.0)/1024.0;
Serial.print( "\t temp lm35 deg C:"); Serial.println(reading)

}

La salida me de un valor de:

temp lm35 deg C:41.50
temp lm35 deg C:41.02
temp lm35 deg C:41.02

Es ilogico que me den 41 grados centigrados!!!
Deberia darme alrededor de 20 grados!!

Alguien sabe poruqe??

Gracias

void setup()

{
Serial.begin(19200);
}

void loop()

{
  float lm35 =analogRead(A5);
  float reading=5.0 * lm35 * 100.0 /1024.0;
  Serial.print( "\t temp lm35 deg C:"); 
  Serial.println(reading);
  delay(1000);
}

temp lm35 deg C:28.81
temp lm35 deg C:29.79
temp lm35 deg C:29.30
temp lm35 deg C:29.79

pin1---arduino 5v middle pin ----arduino A5 pin3 -------arduino ground

siutoejai:

void setup()

{
Serial.begin(19200);
}

void loop()

{
 float lm35 =analogRead(A5);
 float reading=5.0 * lm35 * 100.0 /1024.0;
 Serial.print( "\t temp lm35 deg C:");
 Serial.println(reading);
 delay(1000);
}





pin1---arduino 5v middle pin ----arduino A5 pin3 -------arduino ground

cual es la diferencia respecto a mi codigo???

Ante todo se divide por 1023 no 1024.

Vigila la tensión de Vref en tu arduino. Si es diferente de 5V podría estar dando datos erróneos como el que recibes.

Veamos tu fórmula es
temp = 500.0 * lm35 /1023.0;

Pq 1023 y no 1024. Si miras lo anterior, cuando el AD convierte entrega entre 0 y 1023. De modo que cuando llegas al fondo de la escala, lees 1023 y entonces 500 * 1023/1023 = 500 mV o 5V.

Ahora tu sensor entrega 10mV/C y mide entre 150 y -55 grados pero seguramente lo usas entre 0 y 100 por dar un rango o sea 0 a 100mV

Tu lees 41.02 y crees que deberías leer 20.00 eso es mucha diferencia!!!

41.02 = 500 * temp35 / 1023 => 83 o 84 cuentas

asi que de 83/84 a tus 40 que justificarían 20.0 grados yo diria que el problema puede ser que no es apropiado medir contra 5V de Vref.

existe un comando que cambia la tensión de Referencia del AD a 1.10 Volts.
debes poner en el setup()
analogReference(INTERNAL);

float tempC;
int reading;
int tempPin = A5;

void setup()
{
analogReference(INTERNAL);
}

void loop()
{
     reading = analogRead(tempPin);
     tempC = reading / 9.31;   // 1.10 * 100/1023 = 1/9.3
     Serial.print( "\t temp lm35 deg C:"); 
     Serial.println(tempC);
}

@surbyte Gracias por tu gran ayuda!!

tengo un par de dudas:

  1. 500* temp35........ en este caso el 500 se debe a los 5v de alimentacion al lm35, no?
    Si mido con tester y la tension es de 4,5v... deberia multiplicarlo por 450?

  2. No comprendo bien el rol de la tension de referencia .

  3. Al agregar la linea de comando analogReference(INTERNAL); me dice ¨INTERNAL was not declared in this scope¨... hay que agregar alguna libreria? (poseo arduino duo)

Y una vez mas se cumple lo que siempre digo. Para el 4to o 5to post del autor comienza a contar toda la verdad.
Porque (y te lo digo fuerte) no dijiste que usas un DUE.
Un DUE usa conversor analogico digital de 12Bits y ahi esta tu error giganteeeeeeeeeeeeeee, por dios.
No puedes usar códigos de UNO/MEGA sin modificarlos.
Ya no son 1023 sino 4095 y ahi la diferencia.
Si ademas tienes 4.5V no importa porque el DUE trabaja con 3.3V asi que miles de errores.

la cuenta para el DUE es valor = 3.3100temp35/4095.0;
Mide Vref

tambien en el due puedes usar analogReference pero en este caso tienes dos posibles, por eso no te funcionó.
uNa de 1.1 y otra de 2.56 si mal recuerdo.

INTERNAL1V1: a built-in 1.1V reference (Arduino Mega only)
INTERNAL2V56: a built-in 2.56V reference (Arduino Mega only)

Usa
For Arduino Mega boards, use:

1

analogReference(INTERNAL1V1);

in void setup() and you’re off. If you have an Arduino Mega there is also a 2.56V reference voltage available which is activated with:

1

analogReference(INTERNAL2V56);

Gracias!! Me lo solucionaste.... al final tenia q multiplicar por 330......
respecto a los 4095 en realidad una de las tantas pruebas que hice fue cambiar la resolucion a 1023 con un comando para que trabaje en 10 bits.

Gracias nuevamente!!

Hay una leve diferencia menor a 1 grado entre la temperatura que mido del MPU6050 Y el LM35...

Supongo que hay una leve temperatura demás en el MPU ya que la temperatura que da es interna!

Saludos

El MPU tiene que calentar, nada es gratis en este planeta.

Fersical, medio grado tampoco es tan malo, siempre que monto el lm35 no consigo que mida exactamente igual a unos termómetros que tengo, lo raro es que entre ellos van casi iguales, termino haciendo trampa, le sumo o resto para que vaya como los demás.

El lm35 es caprichoso, encima no se pueden exagerar la longitud del cable, en mi caso más de 20cm hace cualquier cosa, investigare que onda el DS1820....

La imagen es uno de esos montajes, tiene el truco del diodo y dos lecturas AN, para que mida temperaturas por debajo del cero.

Gracias por la data!! Por tema de espacio voy a usar el MPU6050 y voy a realizar una correcion por soft :stuck_out_tongue:

Adios

Arma una curva de calibración contra el elemento que mida temperatura que mejor satisfaga tu criterio, o si tienes alguno de precisión, tomas ese.

O bien si puedes hervir agua espera a que burbujee y mides 100 grados y luego el cero no es tan facil pero agua y hielo luego de un buen tiempo se estima en 4 grados.
Entonces tienes un punto cerca de 0, otro arriba si es que puedes medirlo y/o sumergir el LM35.

Luego con el Lm35 mas o menos calibrado, mira en el rango de trabajo del MPU cuanto error lees y si es parejo ya sabes y sino armas una tabla.
supongamos que 35.0 son 35.8
y asi

32 son 32.4

puedes hasta poner los datos en un excel y sacar alguna ecuación que transforme una en otra.

si quieres puedes realizar esta actividad que hize...

si et interesa me contactas para pasarte el codigo

Alex1138:
Fersical, medio grado tampoco es tan malo, siempre que monto el lm35 no consigo que mida exactamente igual a unos termómetros que tengo, lo raro es que entre ellos van casi iguales, termino haciendo trampa, le sumo o resto para que vaya como los demás.

El lm35 es caprichoso, encima no se pueden exagerar la longitud del cable, en mi caso más de 20cm hace cualquier cosa, investigare que onda el DS1820....

La imagen es uno de esos montajes, tiene el truco del diodo y dos lecturas AN, para que mida temperaturas por debajo del cero.

En la hoja de datos del LM35 tiene unos ejemplos de como conectarlo para lectura remota a dos cables, par trenzado, pata positiva queda igual, pata lectura conectada a pata masa con una R de 200, pata de masa (es la de la lectura ahora) con una R de 200 a masa y en paralelo un pot de 10K para regulacion o una R de 6,8 y tratar de calibrar por formula.
Yo lo hice, despues de leer varios post sobre lectura de temperatura con diferentes metodos, y fijo (sin potenciometro) tengo 2 grados de diferencia en una distancia de 13 metros. No tube tiempo ayer, pero lo que me queda probar es si la diferencia es constante, si fuera asi o por lo menos dentro del rango que necesito, no seria gran problema y es muy barato, luego esta usar la imaginacion para encapsularlo estanco.
Saludos.

Pero para que le pones tanto tiempo a un sensor que en para aplicaciones generales y nada mas, me refiero al LM35.
El DS18B20 al menos esta trimeado o me corrigen si estoy equivocado.
Hay buenos hilos donde se comparan todos los sensores y el DS18B20 asegura 0.5 grados.

Lo que pasa es que como fue el primero que experimente por que venia en el kit o algo asi y cuando compre un monton de cosas en China vendian 10 por 7 € ahora tengo un monton.
Aparte como de una instalacion que desarme tenia varias PT100, compre unos MCP3551 que lei en otro post en el que colaboraste, pero fui incapaz de tener alguna lectura por el momento, asi que adelante con el LM hasta que tenga que comprar otro.

Y que encontraste en el LM35. Dice algo que muestre que es CHINO, seguro que lo es.
El tema que conectarlo al revés no se hasta que puento no lo quema.
Acabo de poner LM35 en google y luego imagenes y mira esto.

Por un lado veo esta distribución

La de arriba es la indicación de pines que mas se ve, pero esta tmb está en 1 caso y no se si YO la malinterpreto pero... aunque los números de los pines coinciden la forma de mirar el LM35 es la misma y entonces parecieran estar al revéz.
Será tu problema? No se si inviertiendo los pines no quemas el sensor asi que si pruebas esto es bajo tu riesgo, Yo te lo advertí.
Comprúebalo en Google.

Evidentemente no son la misma. Pero puede ser? Yo he leído un caso de alguien que lo dió vuelta y funcionaba.
Ahora

No, no nos entendemos me parece, como yo lo conecto si me funciona, debo verificar con un termometro patron la medida, pero creo que tengo 2 grados de error, que es salvable.
Te adjunto la hoja de datos y yo lo tengo montado como la figura 6.
Y te digo “creo” por que antes media en la superficie ahora lo tengo a 12 metros dentro de una vaina, asi que hasta puede ser buena.
Saludos.

LM35.pdf (307 KB)

Ahh ya veo porque, respondiste un hilo del mes 29-05-2015, 18:44:07 y yo no vi tu consulta sino la general, porque ya te había leído y pensé que sabías que no se debe responder hilos viejos, sino crear nuevos y poner la referencia a éste.
Cuando pasa eso hay que remitirse a la hoja de datos.
Desde la figura 12 en adelante tenés diferentes formas de atacar el problema del posible ruido ambiente y de la capacidad parásita del cable. Incluso usando un LM317 para volverlo 4-20mA.

Ver hoja de datos

Sinceramente pido disculpas, no le preste atencion al mes, vi 2015 y me tire, como me servia el aporte.
Aparte les queria comentar que a mas de 20 cm tambien se podia medir. Bueno con este y con tu aporte del promedio movil de este post http://forum.arduino.cc/index.php?topic=296355.0
Me conforma mucho la medicion es bastante poco histerica, sobre todo para no tener ningun delay.
Gracias.