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.

allnighter69

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"

allnighter69

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

maxid

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

josemanu

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:

http://www.ardumania.es/termometro-con-lcd-grafico-y-lm35d/
http://www.ardumania.es/

Iniciación

Go Up