Pages: [1]   Go Down
Author Topic: Problema con lectura analogica LM35  (Read 1237 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Oviedo, Spain
Offline Offline
Newbie
*
Karma: 1
Posts: 20
¡A cacharrear!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

e-mail: 1315cesarm@gmail.com
Twitter: @1315cesarm

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 688
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Son 1024 puntos partiendo de 0, debes dividir en 1023
Logged

El que pregunta aprende, el que responde aprende a responder.

Offline Offline
Newbie
*
Karma: 1
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 688
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

El que pregunta aprende, el que responde aprende a responder.

Offline Offline
Newbie
*
Karma: 1
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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"
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 688
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

El que pregunta aprende, el que responde aprende a responder.

Castellon, España
Offline Offline
Sr. Member
****
Karma: 7
Posts: 341
OR ganizando
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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/
Logged


Pages: [1]   Go Up
Jump to: