Arduino Forum

International => Español => Software => Topic started by: gcapelo on Jul 04, 2013, 04:08 pm

Title: Problema con lectura analogica LM35
Post by: gcapelo on Jul 04, 2013, 04:08 pm
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.
Title: Re: Problema con lectura analogica LM35
Post by: Tato on Jul 07, 2013, 01:58 am
mmm interesante. Puedes subir el sketch completo y la versión de arduino que estas usando, por favor?  :)
Title: Re: Problema con lectura analogica LM35
Post by: maxid on Jul 07, 2013, 04:42 pm
Son 1024 puntos partiendo de 0, debes dividir en 1023
Title: Re: Problema con lectura analogica LM35
Post by: gcapelo on Jul 08, 2013, 02:18 pm
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.
Title: Re: Problema con lectura analogica LM35
Post by: maxid on Jul 08, 2013, 02:29 pm
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.
Title: Re: Problema con lectura analogica LM35
Post by: allnighter69 on May 15, 2014, 01:31 am
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"
Title: Re: Problema con lectura analogica LM35
Post by: allnighter69 on May 15, 2014, 03:02 am
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
Title: Re: Problema con lectura analogica LM35
Post by: maxid on May 15, 2014, 03:45 am
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.
Title: Re: Problema con lectura analogica LM35
Post by: josemanu on May 20, 2014, 03:36 pm
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/termometro-con-lcd-grafico-y-lm35d/)