Show Posts
Pages: [1] 2 3 ... 7
1  International / Proyectos / Re: Termómetro multiple de cinco sondas con arduino on: May 14, 2013, 04:54:09 pm
Si alguno de los moderadores me puede echar una mano y cambiar la foto, hay una errata en el diagrama que colgué al principio, el circuito correcto es este:
2  International / Proyectos / Re: Termómetro multiple de cinco sondas con arduino on: May 01, 2013, 08:44:43 pm
Con las indicaciones de un amigo y un pequeño truco ya tenemos las temperaturas con un dígito decimal
Dejo el código
Code:
// 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:

Saludos
3  International / Proyectos / Re: Termómetro multiple de cinco sondas con arduino on: April 29, 2013, 06:10:38 pm
Anda para temperatura ambiente también, no lo he comparado, pero tiene que funcionar sin problemas.
4  International / Proyectos / Termómetro multiple de cinco sondas con arduino on: April 29, 2013, 05:05:13 pm
Con gran ayuda de gente de este foro y del foro de científicos aficionados terminé este sencillo instrumento que usaré con fines didácticos y creo merece la pena colgar porque puede usarse para muchos fines, si alguien tiene que tomarse la temperatura bucal y rectal es bueno tener dos termómetros  smiley-grin

Se usan como sondas los conocidos diodos 1N4148 que son muy económicos y muy nobles.
Circuito eléctrico
Esta imagen muestra como ejemplo la conexión de dos sondas


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

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
Code:
// 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í:

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/
5  International / Proyectos / Re: Donde esta el error... on: April 29, 2013, 04:59:00 pm
Tenes que agregar esta linea
Code:
analogReference(INTERNAL);
eso pone automaticamente una referencia interna de 1,1V que por defecto es 5, asi es que tendras unas 5 veces mas rango.
Saludos
6  International / Proyectos / Re: Donde esta el error... on: April 29, 2013, 08:21:24 am
Lo del mapeo me parece adecuado por la facilidad en la calibración, lo de la función se pone mas complicado, igual se podria hacer lo que me indicaste antes, hacer 50 lecturas y sacar la media, siempre voy a tener un mejor acercamiento al valor real.
Los diodos pueden aguantar bien hasta 200 o mas grados.
Saludos y espero tus pruebas.
7  International / Proyectos / Re: Donde esta el error... on: April 28, 2013, 08:53:27 pm
Hombre, no lo inventé yo, solo el diodo y la resistencia son necesarios, el transistor que amplificaba lo saqué porque la propia juntura de él, variaba la temperatura, con cualquier diodo y la resistencia puede funcionar. Me queda en el tintero ver si puedo ponerle al menos un dígito decimal.
Fijate en el link que puse en el otro post y vas a ver lo simple que es. Cualquier semiconductor funciona, incluso la jutura entre base y colector o base y emisor de un transistor cualquiera va a responder.
Un abrazo
8  International / Proyectos / Re: Donde esta el error... on: April 28, 2013, 04:47:24 pm
Lo del transistor tuve que sacarlo, la propia juntura del mismo provocaba variaciones muy grandes asi que hice una pequeña reforma al código cambiando la referencia interna a 1,1V con
analogReference(INTERNAL)
este truco dejó las sondas muy bien y muy exactas.
Puse un tutorial en mi blog para el que le interese.
Muchisimas gracias American Cheyenne y los que aportaron su granito para que el proyecto se realizara.
http://anajesusa.wordpress.com/2013/04/28/cinco-termmetros-a-la-vez-con-arduino/

El código quedó definitivamente asi
Code:
// 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),452,632,100,0); // a 0°C la lectrura de analgRead es 140 y a 100°C es 99
   termometro2 = map(analogRead(1),459,630,100,0);// calibrar cada sonda por separado y poner los valores correspondientes en map   
   termometro3 = map(analogRead(2),450,629,100,0);
   termometro4 = map(analogRead(3),449,628,100,0);
   termometro5 = map(analogRead(4),473,641,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);
}
9  International / Proyectos / Re: Donde esta el error... on: April 27, 2013, 07:31:17 pm
Ya descubrí el tole tole American, te comento que el sensor que uso es un simple diodo 1N4148 con el catodo a negativo y el ánodo a input con una resistencia de 2K2 a +5v. El problema es que el salto de milivoltios entre los 0° y los 100° son solo 40 mV, por tanto la relación 40/100  son 2 y pico, que es el salto que me hace. Lo que hice fue poner un transistor cualunque que amplifique y santas pascuas ahora va de lujo.
Lo de los números 
Code:
float temperatura = (-(541*sensorValue) +360.19); //357.30); // convierte a grados
lo eliminé todo, usando la función map que resulta mucho mas simple para calibrar la sonda, pones la sonda en hielo y lees el valor de analogRead ese es el valor de mapeo inferior, que mapea a 0°, luego en agua hirviendo lees el valor de analogRead y es el valor de mapeo superior correspondiente a 100°. Mucho mas fácil para calibrar que sacar la función y demás que tenía el otro programa.
En unos días pongo el trabajo completo con circuitos y demas en el blog y acá por si a alguien le sirve.
Muchísimas gracias me sirvió de mucho las indicaciones
10  International / Proyectos / Re: Donde esta el error... on: April 27, 2013, 04:11:37 pm
Hola, hice este nuevo código mucho mas simple para ajustar las sondas
Code:
float termometro1= 0;
float termometro2= 0;
float termometro3= 0;
float termometro4= 0;

void setup() {
 
 Serial.begin(9600);

}
void loop() {
  int val = analogRead(0);
  int val1 = analogRead(1);
  int val2 = analogRead(2);
  int val3 = analogRead(3);
   termometro1 = map(val,99,140,100,0);
   termometro2 = map(val1,101,140,100,0);
   termometro3 = map(val2,99,140,100,0);
   termometro4 = map(val3,99,140,100,0);
Serial.print (" Term 1 ");   
Serial.print (termometro1,2);
Serial.print (" Term 2 ");
Serial.print (termometro2,2);
Serial.print (" Term 3 ");
Serial.print (termometro3,2);
Serial.print (" Term 4 ");
 Serial.println (termometro4,2);
 delay(100);
}

El problema es que no va de grado en grado salta de a 2 por vez. Ni hablar de los decimales de grado siempre .00

en la imagen se ve que la sonda del termómetro 3 cambia de 20 a 22 sin pasar por el 21, en todas hace ese problema, se salta de a 2 y a veces de a 3 grados, no marca los intermedios
11  International / Proyectos / Re: Donde esta el error... on: April 27, 2013, 11:45:25 am
El problema es que
Code:
const int analogInPin = A0;
Esto da valores enteros del orden de los 130
Acá
Code:
float pin0read = (analogRead (analogInPin));
cada unidad de analogInPin me varía en 2,59 en el resultado de pin0read
Alguna idea como solucionarlo??
12  International / Proyectos / Re: Donde esta el error... on: April 27, 2013, 10:58:37 am
Así quedó el codigo
Code:
const int analogInPin = A0;
const int analogInPin1 = A1;
const int analogInPin2 = A2;
const int analogInPin3 = A3;
const int analogInPin4 = A4;
int sensorValue = 0;
int sensorValue1 = 0;
int sensorValue2 = 0;
int sensorValue3 = 0;
int sensorValue4 = 0;

void setup() {
 // initialize serial communications at 9600 bps:
 Serial.begin(9600);
 //pinMode (13, OUTPUT);
}
void loop() {
  
  // read the analog in value:
  float pin0read = (analogRead (analogInPin));
 float pin1read = (analogRead (analogInPin1));
  float pin2read = (analogRead (analogInPin2));
   float pin3read = (analogRead (analogInPin3));
    float pin4read = (analogRead (analogInPin4));
float sensorValue = ((pin0read/1023)*4.9);
float sensorValue1 = ((pin1read/1023)*4.9);
float sensorValue2 = ((pin2read/1023)*4.9);
float sensorValue3 = ((pin3read/1023)*4.9);
float sensorValue4 = ((pin4read/1023)*4.9);

float temperatura = (-(541*sensorValue) +360.19); //357.30); // convierte a grados
float temperatura1 = (-(541*sensorValue1)+360.19);
float temperatura2 = (-(541*sensorValue2)+360.19);
float temperatura3 = (-(541*sensorValue3)+360.19);
float temperatura4 = (-(541*sensorValue4)+360.19);

 // print the results to the serial monitor:
 
 //Serial.print ("pin0read ");
 //Serial.print (pin0read);
 //Serial.print(" Pin1read = " );
 //Serial.print(pin1read );
 //Serial.print("  sensorValue = " );
 //Serial.print(sensorValue);
 //Serial.print("  ");
 //Serial.print (" sensorValue1 ");
 //Serial.print(sensorValue1);
 Serial.print (" Temp0 = ");
 Serial.print (temperatura,3);
 Serial.print (" Temp1 = ");
 Serial.print (temperatura1,3);
 Serial.print (" Temp2 = ");
 Serial.print (temperatura2,3);
 Serial.print (" Temp3 = ");
 Serial.print (temperatura3,3);
Serial.print (" Temp4 = ");
 Serial.println (temperatura4,3);

 delay(1000);
}
Pero no es por la precisión de lectura el problema, hay algún error porque los saltos de una temperatura a otra siempre son de 2.59, tiene que haber alguna falla en los cálculos
13  International / Proyectos / Re: Donde esta el error... on: April 26, 2013, 10:12:02 pm
Ya están andando 4 sondas dando valores aceptables, el problema es que al parecer redondea en las cuentas y no salta de grado en grado de temperatura o fracción de este, me salta de a 2 o mas.
Con los datos que me diste ya veo 3 o mas dígitos en el  monitor, pero no logro darme cuenta porque los grados saltan
14  International / Proyectos / Re: Donde esta el error... on: April 26, 2013, 09:48:32 pm
Necesito otra ayuda, la variable float me da solo con dos decimales, para calibrar las sondas necesito 3 o 4 si se pudiera, como se puede hacer?
15  International / Proyectos / Re: Donde esta el error... on: April 26, 2013, 02:03:12 pm
Uuuuu!!! ya me di cuenta
Code:
int pin0read = (analogRead (analogInPin));
  int pin1read = (analogRead (analogInPin1));
Aca va float!!! ahora lee esa cuenta voy por la otra
Lo tengo!!!! falta ajustar las ecuaciones.
Gracias muchachos
Pages: [1] 2 3 ... 7