Go Down

Topic: (SOLUCIONADO) analog.Read con lm35 y potenciometro al mismo tiempo (Read 16635 times) previous topic - next topic

orutra17

Jan 30, 2014, 07:35 pm Last Edit: Feb 27, 2014, 05:21 pm by orutra17 Reason: 1
Buenas tardes compañeros, bueno soy nuevo en este foto he googleado bastante y revisado varios post de este foro pero no logro encontrar una solucion para mi problema. el asunto es el siguiente:

Estoy haciendo un pequeño proyecto con un lm35, mi idea es realizar un termostato acompañado de una lcd. Tengo mi sensor y tengo un potenciometro que utilizo en otra entrada analogica de mi arduino uno para colocar un "set point" de temperatura y en base a esto realizar las comparaciones y determinar el estado de mi salida. Hasta alli todo va bien, ya tengo el programa listo pero me doy cuenta que al variar el valor de mi pot llega un punto donde el valor que obtengo de la lectura analogica del lm35 se vuelve loca y me da valores erroneos de temperatura. Dice un dicho, divide y venceras asi que hice algo ma sencillo solo con mi lm35 el pot y el monitor serial de arduino.
El problema persiste, decidi probar primero el pot y luego el sensor y por separados cada uno funciona a la perfeccion pero juntos el los valores de la lectura analogica comienzan a variar (comprobe midiendo el voltaje del lm35 en su salid y se mantiene en  aprox. 288 mV lo que es29 ºC ) en los resultados que obtiene de la lectura analoga, pro ejemplo me muestra 29 ºC  (temperatura de mi habitacion) y luego me muestra 38ºC, luego 21 ºC y asi sucesivamente, intente cambiando entre las diferentes entradas analogas, cambiando el pot por otro, mido el voltaje que manda el lm35 y esta ok. lo curioso es que me di cuenta por el monitor serial que cuando el valor que se lee del potenciometro esta al rededor de 350  a 500 es cuando el valor de la temperatura sufre el averio.

les dejo el codigo que estoy utilizando por si es algun error en el programa. les agradezco de verdad su ayuda amigos.
Saludos.

int temperatura;
long milivoltios;
int sensor=0;
int pot = 5;
int val;

void setup ()
{
 Serial.begin (9600);
 pinMode(pot, INPUT);
 
}

void temp ()
{
  milivoltios= (analogRead(A0)*5000L/1023);
  delay(100);
 temperatura = milivoltios/10;
 Serial.print("temperatura =");
 Serial.print(temperatura);
 Serial.println();
 delay(500);
}

void valor ()
{
val = analogRead(A5);
 delay(100);
 Serial.print("val = ");
 Serial.print(val);
 Serial.println();
 delay(650);
}
void loop () {

 temp();
 delay(250);
 valor();
 
}
PD: los delay tan raros fue que probaba si es que necesitaba mas tiempo entre una lectura y otra.

EDITO:

Siguiendo en mi busqueda encontre algo acerca de la fuente de alimentacion que tal vez deje pasar por alto. Yo utilizo la alimentacion por usb de PC, lei algo este topico http://forum.arduino.cc/index.php?topic=32421.0 acerca de la impedancia de la fuente pero la verdad no entendi mucho y que preferiblemente no utilizara fuentes conmutadas. Ahora bien tengo un adaptador de corriente que facilmente se lo puedo colocar pero si necesito el monitor serial no existe ningun inconveniente si tengo las dos fuentes conectadas ( USB, externa del adaptador de corriente)

Jopapa

#1
Jan 30, 2014, 09:18 pm Last Edit: Jan 30, 2014, 09:22 pm by Jopapa Reason: 1
Bueno, no se lo que pasa, pero podrias explicarme el porque de esta linea

milivoltios= (analogRead(A0)*5000L/1023);

y lo de la L

Jopapa
www.jopapa.me

P.D. No tengo un LM35 para hacer pruebas, pero creo que es así
float temp;
int tempPin = 0;

  temp = analogRead(tempPin);
  temp = temp * 0.48828125;


orutra17

#2
Jan 30, 2014, 09:59 pm Last Edit: Jan 30, 2014, 10:01 pm by orutra17 Reason: 1
Primero gracias por tu respuesta.
Bueno yo nunca he trabajado con variables de coma flotante, lo que yo hice fue pues diviendo 5000/1023 te da 4.887..., eso lo multiplico por el valor de la entrada analogica del sensor que va de 0 a 1023 y de esa manera consigo los milivoltios que entran a mi placa, como sabras el lm35 viene graduaco para grados celcius y tiene variaciones del orden de los 10 mV po grado centigrado, de esa manera saco yo la temperatura aunque se que seria mas exacto de la forma que tu me comentas, o eso creo.

Por otro lado sigo investigando por la web acerca de cual puede ser el problema, existe la posibilidad que tenga alguan especie de interferencia entre las entradas y la señal de una se mezcle con la otra? :smiley-roll:

PD: la L es porque la variable es de tipo Long y bueno en el tuto comentaban que se tenia que colocar xD

Luti

Hola, buenas tardes!

Soy nuevo en este foro y me he decidido a escribir pq me encuentro con el mismo problema.

Estoy realizando un termostato con el sensor de temperatura lm35 medir temperatura real, y con el potenciometro (1kohm) con el que quiero simular la temperatura deseada. he realizado el codigo sin problema y el programa me funciona bien, pero me he fijado que cuando realizo movimientos con el potenciometro(sobretodo cuando subo resistencia) me varia la analogica dentrada de temperatura. no entiendo pq me hace esto si tengo la alimentación del sensor y del potenciometro en paralelo.

También me he dado cuenta que si realizo la lectura del sensor de temperatura solo, pero con todo el sistema conectado ,solo variando el programa de arduino, el cableado sigue igual sensor + potenciometro no me da ningún problema aún variando la resistencia del potenciometro. Pero en el momento en que empiezo a leer la analogica del potenciometro con el programa me vuelve a variar el sensor de temperatura.

Alguna idea por favor??

Jopapa

He realizado un pequeño montaje con un potenciometro y un LM335 (no tenia el LM35) que lee en grados Kelvin
Con este sketch funciona perfecto, sin interferencias

float tempK=0, tempC=0;
int val;
void setup(){
  Serial.begin(9600);    //Setup serial a 9600 bps
}

void loop(){
tempK = analogRead(A0) * 0.4882812;    //Lee temperatura en grados Kelvins primero
tempC = tempK - 273.15;    //Convertir de Kelvin a Celsius
Serial.print("Celsius: "); Serial.print(tempC);
Serial.println(); 

val = analogRead(A5);
Serial.print("val = "); Serial.print(val);
Serial.println(); Serial.println();
delay(1000);
}

Jopapa
www.jopapa.me

Luti

Hola! Muchas Gracias por contestar,
Voy a provar tu codigo, entiendo que la analogica 5 es el potenciometro.
Hoy no Voy a poder pero mañana Voy a colgar mi codigo.

Saldos y gracias

Luti

No me va ni con tu código...  :~
cuando empiezo a mover el potenciometro de 1kohm me oscila la temperatura de la entrada conectada al sensor lm35.
¿alguna idea de que puede pasar?

Jopapa

¿Porque no pones el esquema de conexiones que tienes?

Jopapa

orutra17

Amigos gracias por sus respuestas bueno en el transcurso de esta semana decidi probar con otro arduino uno diferente al mio y el problema persiste, por lo que descarto que sea la placa o el micro, hoy compre un sensor nuevo y un par de pot tambien para probar mañana haber que sucede. Ahora por otro lado la alimentacion puede tener algun tipo de insidencia en la la lectura? yo uso la alimentacion del puerto USB de mi laptop.

Mañana pruebo y les digo como me fue

orutra17

Amigos he probado con un sensor nuevo, un pot nuevo, he probado incluso con dos arduinos diferentes (el mio y uno de mi novia),los dos son arduino uno y  con los dos presento aun el mismo problema, incluso me guie del programa de nuestro amigo jopapa y nada. aca les dejo el programa que hice, como veran es relativamente sencillo.
float temp_c=0;
int val;
void setup ()
{
  Serial.begin(9600);
 
}

void loop()
{
  temp_c = analogRead(A0)*0.4882812;
  Serial.println();
  Serial.print(temp_c);
  Serial.println();
  delay(300);
 
  val=analogRead(A5);
  Serial.print(val);
  }

jopapa, que arduino posee usted?

Gracias

orutra17

aca les monto una imagen

Jopapa

Tengo Arduino Uno. Pero eso no tiene nada que ver.
Por agotar todas las opciones, prueba a conectar una resistencia de 100K entre la salida (Vout) y masa.
Si no funciona, me rindo.

Jopapa

rusohm5

hola, tengo el mismo problema, no tengo idea porque sucede eso, quizas tenga un capacitor en la entrada de los pines analogicos y queda cargado, pero la solución fue usar para el potenciometro la salida de 3,3V y tambien colocar una resistencia en serie al potenciometro... o sea la solución fue no usar mas del rango que no necesitas.

rusohm5

PONIENDO UNA RESISTENCIA DE 5k DESDE LA PATA DE DATO DEL LM35 A GND SE SOLUCIONA.

Luti

Te refieres a Colocar una resistència entre gnd i la entrada analògica proviniente del sensor de temperatura??
Gracias!! Lo Voy a probar.
Saludooos

Go Up