domingo, 28 de abril de 2013

Cinco termómetros a la vez con Arduino

Estaba preparando las prácticas para mis alumnos de física en calor y temperatura y sucede que más de una vez, llegamos al laboratorio de la escuela y hay un solo termómetro (con suerte) otras veces me pasó que el que estaba, tenía el bulbo roto :-(

Hay muy lindos experimentos que serán motivo de otra entrada en mi blog con calor y es necesario contar con varios termómetros que lean en forma simultanea, este es el tema que hoy abordaremos.

Materiales

5 diodos 1N4148 (valen menos de 1$ o podemos sacarlos de alguna plaqueta)

5 resistencias de ¼ W de 2K2 ohms (tres bandas rojas en el código de colores)

Cable de mouse

Spaguetti termocontraible

La placa arduino.

clip_image002

Circuito eléctrico

Esta imagen muestra como ejemplo la conexión de dos de ellas

termometro5sondas

Construcción de las sondas

Es conveniente usar para todas la misma longitud de cable, unos 50 cm esta bastante bien, podemos usar el cable de los Mouse que son muy flexibles, tienen varios cables dentro pero solo usaremos dos de ellos. En uno de los extremos soldamos el diodo cuidando siempre usar los mismos colores para ánodo y cátodo, para luego no confundirnos en la conexión. Una vez soldado le pondremos un trozo de termocontraible para dejarlo prolijo y resguardar las soldaduras.

clip_image006

Las cinco sondas

clip_image008

En la imagen se ve el protoboard con las cinco sondas y ya conectadas a la placa Arduino

Calibrado

Para calibrar es sumamente sencillo, una vez armado el dispositivo como se ve en la imagen anterior cargamos el siguiente código a Arduino
//Código para calibrar las sondas del termómetro
void setup() {
Serial.begin(9600);
analogReference(INTERNAL);// pone como referencia iterna 1.1V
}
void loop() {
Serial.print (" Term 1= ");
Serial.print (analogRead(0));
Serial.print (" Term 2= ");
Serial.print (analogRead(1));
Serial.print (" Term 3= ");
Serial.print (analogRead(2));
Serial.print (" Term 4= ");
Serial.print (analogRead(3));
Serial.print (" Term 5= ");
Serial.println (analogRead(4));
delay(1000);
}

Una vez hecho esto activamos el monitor, nos encontraremos con cinco columnas como estas:

clip_image010

Atamos las 5 sondas con una banda elástica y las colocamos en una copa con hielo y un poco de agua dejando unos minutos para que se estabilicen las lecturas.

clip_image012

Tomamos nota de las lecturas

Por ejemplo en mi caso fueron:



























Numero de sondaLectura a 0°
1632
2630
3629
4628
5641

Ahora hacemos lo mismo pero colocando las sondas en agua hirviendo

clip_image014

Igual que antes tomamos nota, como ejemplo doy los valores míos pero cada uno deberá hacer sus medidas para que los termómetros marquen bien.



























Número de sondaLectura a 100°
1452
2459
3450
4449
5473

Ahora vamos a cargar el código que dará las lecturas de los termómetros que es este:
// termometro múltiple fácil de calibrar
float termometro1= 0;// entrada A0
float termometro2= 0;// entrada A1
float termometro3= 0;// entrada A2
float termometro4= 0;// entrada A3, se pueden poner mas sondas en A4 y 5
float termometro5= 0;
int tiempo=0;
int cnt=0;
float t1=0;
float t2=0;
float t3=0;
float t4=0;
float t5=0;
void setup() {
Serial.begin(9600);
analogReference(INTERNAL);// pone como referencia iterna 1.1V
}
void loop() {
   t1 = map(analogRead(0),452,632,1000,0); // a 0°C la lectrura de analgRead es 140 y a 100°C es 99
   t2 = map(analogRead(1),459,630,1000,0);// calibrar cada sonda por separado y poner los valores correspondientes en map  
   t3 = map(analogRead(2),450,629,1000,0);
   t4 = map(analogRead(3),449,628,1000,0);
   t5 = map(analogRead(4),473,641,1000,0);
   termometro1= t1/10;
    termometro2= t2/10;
     termometro3= t3/10;
      termometro4= t4/10;
       termometro5= t5/10;
   tiempo =millis()/1000;
   // para ver en el monitor
Serial.print (tiempo);
Serial.print (" Term 1= ");  
Serial.print (termometro1,1);
Serial.print ("        Term 2= ");
Serial.print (termometro2,1);
Serial.print ("        Term 3= ");
Serial.print (termometro3,1);
Serial.print ("        Term 4= ");
Serial.print (termometro4,1);
Serial.print ("        Term 5= ");
Serial.println (termometro5,1);
delay(1000);
}

Antes de proceder a cargarlo vamos a colocar los datos de referencia

Donde dice:

t1 = map(analogRead(0),450,631,1000,0);

debemos reemplazar los valores en rojo por las lecturas que tomamos a 0° y a 100° para la sonda 1, asi:

t1 = map(analogRead(0),452,632,1000,0);

Luego igual con la sonda2, 3, 4 y 5

En mi caso quedaría asi:
t1 = map(analogRead(0),452,632,1000,0); // a 0°C la lectrura de analgRead es 140 y a 100°C es 99
t2 = map(analogRead(1),459,630,1000,0);// calibrar cada sonda por separado y poner los valores correspondientes en map
t3 = map(analogRead(2),450,629,1000,0);
t4 = map(analogRead(3),449,628,1000,0);
t5 = map(analogRead(4),473,641,1000,0);

Hecho esto grabamos y levantamos el código a arduino, activamos el monitor y tenemos que tener lectura igual +/- 1° en todas las sondas marcando temperatura ambiente

Así:

con1digito

Listo, ahora podemos usar nuestras sonda por separado, probamos si da el cero con agua con hielo, o la temperatura corporal etc.

Este dispositivo voy a usarlo en unas pruebas interesantes de calor y tempertura en una próxima entrada.