Problema con lectura analogica LM35

Hola buenas, tengo un problema de software al que no le encuentro solución, quizá alguien me pueda ayudar... Tengo conectado a un pin análogico un sensor de temperatura LM35, al realizar la lectura funciona bien hasta que llega hasta 31,7 grados, a partir de aquí empieza a bajar con un signo menos delante, por ejemplo lo que tendría que ser 33 grados sale -29 grados. Os copio lo que me da:

Tiempo transcurrido desde el inicio de la medicion 0:1:18
Posiciones sobre 1024 Bits: T1, 57 ;T2, 544 ;LUZ, 57
T1 28.32 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:25
Posiciones sobre 1024 Bits: T1, 61 ;T2, 544 ;LUZ, 56
T1 29.79 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:32
Posiciones sobre 1024 Bits: T1, 63 ;T2, 544 ;LUZ, 57
T1 31.25 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:39
Posiciones sobre 1024 Bits: T1, 65 ;T2, 544 ;LUZ, 57
T1 31.74 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:46
Posiciones sobre 1024 Bits: T1, 68 ;T2, 544 ;LUZ, 57
T1 -30.31 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:53
Posiciones sobre 1024 Bits: T1, 71 ;T2, 545 ;LUZ, 57
T1 -29.33 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:2:0
Posiciones sobre 1024 Bits: T1, 73 ;T2, 545 ;LUZ, 57
T1 -28.36 Grados Celsius

Como se puede ver la temperatura se hace negativa pero la posición sobre 1024 Bits que da el pin análogico sigue subiendo hacia arriba, a continuación muestro la formula que tengo en el código para transformar la posición en temperatura:

Serial.print ("T1");
Serial.print (" ");
Serial.print (float(analogRead(0)5100)/1024);
Serial.print (" ");
Serial.print ("Grados Celsius");

Siendo la posición (analogRead(0)) siempre positiva (0 para 0v y 1024 para 5v) y todos los valores de la formula tambíen positivos no entiendo como puede salir un float negativo. Si alguien puede saber alguna solución se lo agradeceria.

mmm interesante. Puedes subir el sketch completo y la versión de arduino que estas usando, por favor? :slight_smile:

Son 1024 puntos partiendo de 0, debes dividir en 1023

Solucionado, solo habia que ponerle el ".0" a los float y no hacerlo todo tan a la vez, por partes al principio del programa e fragmentado la formula en partes para darle tiempo y funciona perfectamente, lo de 1023 lo pongo aora mismo. Gracias.

para esto se usa la funcion map

void loop()
{
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}

te mapea tu lectura a un valor entre ciertos valores que tu defines.

yo tengo la tarjeta arduino due y este es mi sketch completo
float sensor=0.0;
float c.0;
void setup(){
Serial.begin(9600);}
void loop(){
c=analogRead(sensor)*(500/1023);

Serial.print (c);
Serial.println("la temperatura de la sala 2 es de");
Serial.println("°C");
delay (2000);
}
mi problema se presenta a la hora de subir el sketch me marca en el monitor serial como si no estuviese conectado me dice "la temperatura de la sala 2 es de " una A con un circulo pequeño arriba y luego " ºC"

Bueno, les comento que corrigiendo el codigo me quedo algo como esto
float sensor=A0;
float c;
float mV;

void setup(){
Serial.begin(9600);}
void loop(){
mV=(analogRead(sensor) * 5000L)/1023;
c=mV/10;
Serial.println("la temperatura de la sala 2 es de ");
Serial.print (c);
Serial.println(" grados Celcius");
delay (2000);
}
y si corre ya pero el monitor serial me dice que sensa arriba de los 40 ºC hasta 49ºC, en una habitacion de 35ºC

usa la funcion map, te está truncando la divicion con enteros.

map(mv,0,1023,0,50)
te va a escalar entre 0 y 50 gradas la lectura del ADC que te de entre 0 y 1023.

Te pongo el enlace a un proyecto que utiliza un sensor LM35 y está bien comentado por lo que no tendrás problemas a la hora de interpretar la parte del sensor y utilizarla en tu proyecto: