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 sonda Lectura a 0°
1 632
2 630
3 629
4 628
5 641

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 sonda Lectura a 100°
1 452
2 459
3 450
4 449
5 473

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.

About these ads
Esta entrada fue publicada en Instrumentos y etiquetada . Guarda el enlace permanente.

28 respuestas a Cinco termómetros a la vez con Arduino

  1. Leo Galanko dijo:

    Hola cesar buen día! Una consulta, hasta cuantos metros se podría extender la cables con los sensores? Gracias Saludos

    • César dijo:

      Hola Leo, no hice pruebas pero yo no lo extendería a mas de 1 metro, cuando haces la calibración igual se compensa pero son tan pocos los mV de variación que temo no sea muy bueno poner cables muy largos.

  2. Luis A. de Prado dijo:

    Sensacional trabajo, César. Un saludo.
    Luis.

  3. Silvana Pennacchioni dijo:

    Excelente!! adelante con todo!

  4. intente replicarlo y por agluna razon no me funciono

    • César dijo:

      No tiene secretos, lo único que hayas puesto los diodos al revés, empezá con una sonda hasta que mida, después seguís con las demás. No se que placa arduino tenés, hay algunas viejitas que no soportan el analogRead, pero igual debería leer.

  5. Dampirzero dijo:

    Muy bueno. Mis felicitaciones por el proyecto.

  6. arduino 1, donde te puedo mandar una foto del montaje o algo

  7. por otro lado me gustaria charlar con usted por el skype o cuenta de correo , para intercambiar experiencias(que me enseñe alguito)

  8. domingo dijo:

    Hola cesar , un proyecto muy bonito ,,,, ¿hasta que temperatura se puede medir con esos diodos ?

    • César dijo:

      Hola Domingo, parece que la máxima temperatura a medir es la máxima que soporta la juntura del diodo, según el datasheet, son 200°C, anuque primero petara el plástico y el termocontraible.
      Saludos

  9. cesar el recubrimiento con cinta negra termocontraible es nesesaria, que tal si sumerjo los diodos sin ese recubrimiento

    • César dijo:

      No creo haya problemas en ponerlos sin el termocontraíble, lo que deberás cuidar es que no se toquen los dos terminales, estaba pensando en hacer una sonda con un tubo de bronce de 3 o 5 cm de unos 2,5 mm de diámetro creo que quedaría mas “presentable” si lo hago pondré detalles.

  10. Hola, estoy en un proyecto donde tengo que leer 16 termocuplas (estoy pensando multiplexarlas 16-1) y solo leer un valor analogico, ya que tambien llevan un circuito de acondicionamiento para punto frio (Ad594, AD595) y seria muy costoso utilizar 16 de estos (20 dolares aprox), en esta parte a veces se utilizan termopares tipo J o K, tendria que utilizar otro Demultiplexor para cuando detecte union tipo J o K la senal pase por uno o por otro acondicionador.

    Mi duda es que tiempo tarda en leer una señal analogica y procesarla, ya que me recomiendan tomar 100 lecturas por cada termopar para tener una lectura confiable. Serian 1600 lecturas analogicas para las 16 entradas.

    Despues tendre que implementar un PID para controlar 16 salidas, (utilizare 15 pwm por hardware del arduino mega y necesitaria otra salida mas por software.)

  11. Juan Pascual dijo:

    Hola Cesar.
    Yo para calibrar las sondas de temperatura, tanto con temperaturas positivas como negativas utilizo una célula peltier acoplado a un disipador grande para tener una buena inercia termica, en este caso es aconsejable que sea lenta.
    También se puede controlar la célula peltier con un sistema PID y situar todo el conjunto de calibración en un recinto aislado térmicamente, cuanto mas parecido a un termo mejor (la sonda de temperatura de toma de datos para ajustar el PID ha de estar calibrada y tener la resolución necesaria).

    Para ajustar las sondad de medida como las que tu usas, se puede realizar un montaje en un recinto como el que he descrito o uno similar y utilizar junto con el arduino una sonda calibrada.
    en un programa que mide la temperatura de la sonda calibrada y la de las que deseamos calibrar establecemos unos puntos de medida y vemos las diferencias con nuestras sondas.

    De este modo podemos establecer la calibración en modo casi automático.

    Un factor importante: Una buena unión térmica entre las sondas a calibrar y el sistema de calibración , se puede usar silicona como la que se utiliza para colocar los transistores de potencia en los disipadores o los procesadores de nuestros ordenadores al disipador.

    No me extiendo más.

    Saludos.

    Juan

    • César dijo:

      Muchas gracias Juan, efectivamente las sondas no quedan apareadas ciento por ciento, hay diferencias de +/- 0.5 °C, Creo que sería conveniente colocar el diodo dentro de un tubo de bronce con jalea siliconada.

  12. NårXEh dijo:

    Excelente proyecto! Mis felicitaciones César!
    siga así :D
    saludos!

  13. Pingback: Diez pruebas con Calor y Temperatura | Espacio de César

  14. alexander marquez dijo:

    saludos profesor es un excelente trabajo, disculpe soy estudiante de ing forestal en Venezuela y estoy tratando de hacer los mismo con 6 sensores de temperatura lm35 pero meha sido imposible hacer que arraque mi codigo solo me muestra en la lcd 16×2 las casillas donde deben ir los valores en blanco, sera posible que me ayude a revisar mi codigo, tengo una tarjeta arduino uno r3, 6 sensores lm 35, y una pantalla lcd 16×2

    • César dijo:

      Mandame el código en un e-mail y veré si puedo ayudarte. No soy muy bueno en programación pero intentaré ver cual es el problema

      • alexander neil araque dijo:

        Saludos profesor, el problema es que no me sale ningn resultado en la pantalla solo muestra inicio temp1 temp2 temp3 temp4 temp5 temp6 , pero no resultados de las mediciones, muchas gracias profesor, no sabe cuanto le agradezco me pueda ayudar, saludos desde Venezuela

        #include /* The circuit: * LCD RS pin to digital pin 8 * LCD Enable pin to digital pin 9 * LCD D4 pin to digital pin 4 * LCD D5 pin to digital pin 5 * LCD D6 pin to digital pin 6 * LCD D7 pin to digital pin 7 * LCD R/W pin to ground */

        LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

        int temp1; int temp2; int temp3; int temp4; int temp5; int temp6;

        int temp1_analogPin = A0; int temp2_analogPin = A1; int temp3_analogPin = A2; int temp4_analogPin = A3; int temp5_analogPin = A4; int temp6_analogPin = A5;

        void setup () { lcd.begin(16, 2); lcd.clear();

        lcd.print(“INICIO”); delay(6000); lcd.clear(); lcd.setCursor(0,1);

        lcd.setCursor(0,0); lcd.print(“temp1: tem2:”); delay(10000); lcd.clear();

        lcd.setCursor(0,1); lcd.print(“temp3: temp4:”); delay(10000); lcd.clear();

        lcd.setCursor(0,0); lcd.print(“temp5: temp6:”); delay(10000); lcd.clear();

        }

        void loop()

        { Temp1 = analogRead(temp1_analogPin);

        delay(10000); temp1_value_clear();

        temp2 = analogRead(temp2_analogPin); delay(10000); temp_value_clear();

        temp3 = analogRead(temp3_analogPin); delay(10000); temp3_value_clear();

        temp4 = analogRead(temp4_analogPin); delay(10000); temp4_value_clear();

        temp5 = analogRead(temp5_analogPin); delay(10000); temp5_value_clear();

        temp6 = analogRead(temp6_analogPin); delay(10000); temp6_value_clear();

        tempagua = analogRead(tempagua_analogPin); delay(10000);

        }

        void temp1_value_clear(void) { unsigned char i; for(i=0 ; i<2 ; i++) { lcd.setCursor(2,i); // set cursor position lcd.print(" "); }

        for(i=0 ; i<2 ; i++) { lcd.setCursor(10,i); // set cursor position lcd.print(" "); } } void temp2_value_clear(void) { unsigned char i ; for(i=0 ; i<2 ; i++) { lcd.setCursor(2,i); // set cursor position lcd.print(" "); }

        for(i=0 ; i<2 ; i++) { lcd.setCursor(10,i); // set cursor position lcd.print(" "); } } void temp3_value_clear(void) { unsigned char i ; for(i=0 ; i<2 ; i++) { lcd.setCursor(2,i); // set cursor position lcd.print(" "); }

        for(i=0 ; i<2 ; i++) { lcd.setCursor(10,i); // set cursor position lcd.print(" "); } } void temp4_value_clear(void) { unsigned char i ; for(i=0 ; i<2 ; i++) { lcd.setCursor(2,i); // set cursor position lcd.print(" "); }

        for(i=0 ; i<2 ; i++) { lcd.setCursor(10,i); // set cursor position lcd.print(" "); } } void temp5_value_clear(void) { unsigned char i ; for(i=0 ; i<2 ; i++) { lcd.setCursor(2,i); // set cursor position lcd.print(" "); }

        for(i=0 ; i<2 ; i++) { lcd.setCursor(10,i); // set cursor position lcd.print(" "); } } void temp6_value_clear(void) { unsigned char i ; for(i=0 ; i<2 ; i++) { lcd.setCursor(2,i); // set cursor position lcd.print(" "); }

        for(i=0 ; i<2 ; i++) { lcd.setCursor(10,i); // set cursor position lcd.print(" "); } }

  15. jovani dijo:

    gracias por el aporte lo voy a probar

  16. Edgar dijo:

    Tendra el archivo en formato *.ino ya que me sale un error….

    • César dijo:

      el código esta en texto de la entrada, algunos comandos responden solo a ciertas placas, fijate el comando de la linea que da el error y como debe escribirse para la placa que vos tenes.

  17. Luis Estrada dijo:

    Buen dia Cesar, estoy contruyendo un termopar y parece ser que pueda utilizar tu metodologia, crees que funcione??? o que me recomiendas??

  18. German padilla dijo:

    profesor buenas tardes, necesito controlar la temperatura de un horno que debe estar entre 800 a 1200 grados centígrados, que me recomienda usar para hacerlo con un arduino. gracias

    • César dijo:

      Hola German, esto que te voy a decir no lo hice nunca pero creo que puede funcionar, con un soplete de autógena solda dos alambres uno de acero y otro de otro metal puede ser constantan o algún otro alambre de resistencia, eso forma un par seebeck cuando esa unión se somete a temperaturas se genera una tensión entre ambas puntas de los alambres eso va a aguantar perfectamente esa temperatura, en el lugar de los diodos pones el par, aca podes encontrar mas info en la prueba numero 7 http://espaciodecesar.com/2013/06/08/diez-pruebas-con-calor-y-temperatura/

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s