Sensor lm35 y lecturas erráticas

Hola:

He intentado configurar el sensor lm35dz siguiendo todo tipo de pasos que he ido encontrado y ninguno me ha funcionado. Incluso he seguido las indicaciones de Surbyte en este hilo en lo referente a utilizar una potencial de referencia de 1,1 V (lo aplico en el código de más abajo):

y nada. Sólo obtengo valores de lectura erráticos. Lo he probado en un arduino UNO y en un Arduino UNO clon.
Las conexiones creo que son correctas.

El código es el siguiente:

float tempC;
int reading;
int tempPin = A5;

void setup()
{
Serial.begin(9600);

}

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

También adjunto lecturas hechas en Arduino UNO. En el Arduino CLON era curioso que la primera línea sí que me daba el valor real de temperatura. Las siguientes eran valores alternados entre un valor de 0 V y uno máximo de 1,1 V (0,00 ºC y 109,88 ºC).

Y no sólo me he comprado uno, sino tres. Los tres sensores tienen el mismo problema. ¿Estarán estropeados? Empieza a desesperarme el tema.
Agradezco cualquier sugerencia.

Lo que sí he leído y no he probado es a utilizar una fuente de alimentación diferente al USB porque esta no es estable. No lo he hecho porque, se supone, que los LM35 les funcionan a mucha gente. ¿Por qué no a mí?

Este está más ue pobrado, checalo.

float tempC;    //Aqui se van a guardar los datos de la temperatura del sensor
int lectura;    //Se agina el valor que sea leido por el sensor
int Sensor = A5;  //se declara el pin en el que estara el sensor, refiriendose en ocaciones futuras como variable "sensor"


void setup()
{
analogReference(INTERNAL);  //usando la referencia interna del arduino, configuramos a este para que opere con 1,1V, limitando la temp. a solo de 0 a 110°C de los 150 que puede medir el LM35
                            //pero sino se hace esto, no se puede obtener la resolucion de 0.1 °C si es que te interesa el dato.                

}

void loop()
{
lectura = analogRead(Sensor);  //asignacion de lo que se mida en la variable sensor, a la variable lectura
tempC = lectura / 9.31;        //ATENCION, al cambiar la ref analogica del arduino de 5v a 1.1v se tiene que reformular la ec. para obtener la temperatura de tal forma que
                               // se divide 1./1024 = 0.001074V = 1.0742 mV. Si 10mV es igual a 1 grado Celsius, 10 / 1.0742 = ~ 9,31.
                              // Así, por cada cambio de 9,31 en la lectura analógica, hay un grado de cambio de temperatura.

}

Suerte.

Hiciste lo mas simple, pusiste le multímetro entre gnd y su salida a ver que tensión entrega? Mala foto, no tiene buen contraste pero te vuelvo a pedir que mires con un multímetro. Asegura que ese conector hace buen contacto con el protoboard. En particular asegurate que GND esta bien. Bueno con el multímetro te sacas las dudas. Otra, lee las normas del foro e inserta las fotos usando un sitio para subirlas, usando las etiquetas. Esta bien explicado en las normas.

Gracias.

Tienes malos contactos. Los protoboard son lindos pero son traicioneros.

Gracias mike_117 y Surbyte. Voy a probar ambas soluciones y os cuento.

Muchas gracias.

Hola de nuevo:

Tres cosas:

1) Creo que no sé utilizar el analogReference(INTERNAL). He probado muchos códigos, incluido el de mike_117 ¿Debe ir la alimentación (cable rojo) a los 5 V? Así lo hago. Los valores que obtengo suelen ser de 109,88 ºC. He medido el voltaje (no sé si lo he hecho bien) entre GND y el pin A0 y era de 0,063 V. En definitiva, sigo sin saber configurarlo de esta forma.

2) En cuanto al mal contacto, he probado diferentes cables, protoboards e incluso con conexiones directas macho hembra. Parece que no es el problema.

3) Si no utilizo lo anterior, si no un código del tipo

float tempC;
int tempPin = 0; // Definimos la entrada en pin A0
void setup()
{
    Serial.begin(9600);
}
void loop()
{

    tempC = analogRead(tempPin); 
    tempC = (5.0 * tempC * 10.0)/1024.0; 
    Serial.print(tempC);
    Serial.print(" grados Celsius\n");   
    delay(1000);
}

Obtengo un comportamiento del sensor errático. Aunque la temperatura que me da es similar a la real, al calentarlo con los dedos o echando vaho sobre el mismo, no responde como lo hace el sensor TMP35, incluso a veces al echar vaho sobre el sensor, la temperatura baja 10 ºC ¿? ¿Por qué? Vuelvo a repetir que tengo tres sensores LM35DZ y se comportan de forma parecida. ¿Estarán defectuosos? ¿Los 3?

Gracias.

No puedes usar la referencia interna de 1.1V y luego alimentarlo con 5V. 1.1V es para que lo alimentes con 1.1V o para esperar una salida tal que este restringida a ese valor máximo. Asi que en esas condiciones puedo esperar cualquier salida que será errónea. Aliméntalo con 5V y usa todo standard y verifiquemos que funcione bien, siemplemente conectando el multímetro a la salida y viendo que los valores son estables. Hasta que no compruebes eso no vayas con el Arduino. Cuando lo hayas comprobado, prueba con el Arduino y debería dar buenos resultados.

surbyte: No puedes usar la referencia interna de 1.1V y luego alimentarlo con 5V. 1.1V es para que lo alimentes con 1.1V o para esperar una salida tal que este restringida a ese valor máximo. Asi que en esas condiciones puedo esperar cualquier salida que será errónea. Aliméntalo con 5V y usa todo standard y verifiquemos que funcione bien, siemplemente conectando el multímetro a la salida y viendo que los valores son estables. Hasta que no compruebes eso no vayas con el Arduino. Cuando lo hayas comprobado, prueba con el Arduino y debería dar buenos resultados.

Surb, Claro que se puede usar la ref. interna del adc y alimentar el sensor con 5v yo lo he hecho así y nunca eh tenido problemas ya que lo que hace es rebajar el voltaje de comparación del adc a 1.1 y no ah 5 como esta por deafult.

Ahora, por lo que dice rafasumol es probable que tu sensor ya este dañado, haz intentado cambiar el sensor por otro? y esto lo digo porque el código que yo te pase está más que probado como te lo dije en el primer post y el lm35 no es un sensor "muy" complicado de conectar(osea solo son 3 pines .-.) así que no me queda más que pensar que tu sensor está dañado.

Surb, Claro que se puede usar la ref. interna del adc y alimentar el sensor con 5v yo lo he hecho así y nunca eh tenido problemas ya que lo que hace es rebajar el voltaje de comparación del adc a 1.1 y no ah 5 como esta por deafult.

Tu crees que el 90% de los que preguntan acá, lo van a alimentar con 5V y luego van a poner un divisor de tensión? perdoname que no lo crea, por eso digo terminantemente que no lo hagan. Tienes razón, si lo usas debes acomodar el rango de mediciones para no superar 1.1V pero no creo que hayan hecho eso.

Dijo tener 3 sensores y los 3 le daban falsas mediciones.

Igual me meto sin saber, puesto que nunca he usado esa referencia, pero en el primer código veo que el analogReference está en el loop, mientras que en el código que veo después está en el setup, cosa que me parece más lógica.

Leyendo en la documentación de analogReference, encuentro que tras declarar la referencia, las primeras medidas pueden ser algo erráticas. Si se ejecuta en cada pasada de loop, podría provocar que la lectura posterior fuera mala ¿¿??

analogReference no puede estar en el loop, de ningún modo.

Obvio analogreference nunca podría estar en loop, quien te dijo semejante cosa!!! .-.

Ahora si los 3 sensores que tenia le dan falses mediciones y el código ya está más que testeado pues no se que más podría ser, no es un sensor que tenga gran ciencia para ser utilizado: SON SOLO 3 PINES! así que... o ya quemo los 3 sensores o simplemente no esta haciendo un buen cableado, puede ser su proto, puede ser el, pero si de algo estoy seguro es que ese es el fallo.