Show Posts
|
|
Pages: [1] 2 3 ... 7
|
|
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 // 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
|
|
|
|
|
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  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 //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 // 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 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 // 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 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 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 const int analogInPin = A0; Esto da valores enteros del orden de los 130 Acá 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 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
|
|
|
|
|
15
|
International / Proyectos / Re: Donde esta el error...
|
on: April 26, 2013, 02:03:12 pm
|
Uuuuu!!! ya me di cuenta 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
|
|
|
|
|