Go Down

Topic: Problema con lectura analogica LM35 (Read 1 time) previous topic - next topic

atomix

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)*5*100)/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.

Tato

mmm interesante. Puedes subir el sketch completo y la versión de arduino que estas usando, por favor?  :)
e-mail: 1315cesarm@gmail.com
Twitter: @1315cesarm

maxid

Son 1024 puntos partiendo de 0, debes dividir en 1023
El que pregunta aprende, el que responde aprende a responder.

atomix

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.

maxid

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.
El que pregunta aprende, el que responde aprende a responder.

Go Up