Termómetro múltiple de 5 sondas con Arduino

Esta tarde terminé este sencillo instrumento que usaré con fines didácticos y creo merece la pena colgar porque puede usarse para muchos aplicaciones prácticas, si alguien tiene que tomarse la temperatura bucal y rectal es bueno tener dos termómetros :LOL:

Se usan como sondas los conocidos (de pié todos, si no Fogonazo se cabrea) diodos 1N4148 que son muy económicos y muy nobles, (nada de pedorros diodos).
Circuito eléctrico
Esta imagen muestra como ejemplo la conexión de dos sondas
clip_image004_thumb.jpg

clip_image008.jpg

Con este código se hace la calibración
Código:
//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); 
}
clip_image012.jpg

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.
Y tomamos nota de las lecturas de cada sonda a 0°
Igual hacemos a 100°
Luego volcamos esos datos en el codigo de uso que es este
Código:
// termometro múltiple fácil de calibrar
int termometro1= 0;// entrada A0
int termometro2= 0;// entrada A1
int termometro3= 0;// entrada A2
int termometro4= 0;// entrada A3, se pueden poner mas sondas en A4 y 5
int termometro5= 0;
void setup() {
Serial.begin(9600); 
analogReference(INTERNAL);// pone como referencia iterna 1.1V
}
void loop() {
termometro1 = map(analogRead(0),450,631,100,0); // a 0°C la lectrura de analgRead es 140 y a 100°C es 99
termometro2 = map(analogRead(1),460,630,100,0);// calibrar cada sonda por separado y poner los valores correspondientes en map
termometro3 = map(analogRead(2),450,630,100,0);
termometro4 = map(analogRead(3),449,630,100,0);
termometro5 = map(analogRead(4),449,630,100,0);
// para ver en el monitor
Serial.print (" Term 1= ");
Serial.print (termometro1);
Serial.print (" Term 2= ");
Serial.print (termometro2);
Serial.print (" Term 3= ");
Serial.print (termometro3);
Serial.print (" Term 4= ");
Serial.print (termometro4);
Serial.print (" Term 5= ");
Serial.println (termometro5);
delay(1000); 
}
Donde dice:

termometro1 = map(analogRead(0),450,631,100,0);

debemos reemplazar los valores en rojo por las lecturas que tomamos a 0° y a 100° para la sonda 1,
Luego igual con la sonda2, 3, 4 y 5
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í:
clip_image016.jpg

Eso ya podemos usar una sonda para la boca y otra para las partes mas íntimas je.
Como siempre en mi blog esta todo mas detallado
http://anajesusa.wordpress.com/2013/04/28/cinco-termmetros-a-la-vez-con-arduino/
 
Con las indicaciones de un amigo y un pequeño truco ya tenemos las temperaturas con un dígito decimal
Dejo el código
Código:
// 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); 
}
Como se ve en el monitor:
con1digito.jpg

Saludos
 
Atrás
Arriba