Ayuda con código de Arduino

Todo cuanto tiene que ver con la obtención, almacenamiento y proceso de la información digital, sus aplicaciones y el software y hardware utilizado.
Mensaje
Autor
Avatar de Usuario
anajesusa
Mensajes: 4241
Registrado: Mar May 30, 2006 11:12 pm
País: Argentina
Ciudad: Villa Huidobro
Ubicación: Villa Huidobro Córdoba Argentina
Contactar:

Ayuda con código de Arduino

#1 Mensaje por anajesusa »

Hola, necesito un termómetro múltiple con 4 o 5 sondas, asi es que me dispuse hacerlo con esa preciosa herramienta que es arduino, las sondas estan hechas con dioditos 1N4148 y una resistencia de 2K2.
Para calibrar metí las sondas 1 por 1 en agua con hielo y agua hirviendo respectivamente tomando los valores de analogRead
Por ejemplo
Sonda 1
0°C = 140
100°C= 99
Sonda 2
0°C= 140
100°= 101
Asi cada valor lo puse en el mapeo para que me de directo la lectura en el monitor.
El código es este

Código: Seleccionar todo

// 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

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); // a 0°C la lectrura de analgRead es 140 y a 100°C es 99
   termometro2 = map(val1,101,140,100,0);// calibrar cada sonda por separado y poner los valores correspondientes en map   
   termometro3 = map(val2,99,140,100,0);
   termometro4 = map(val3,99,140,100,0);
   // para ver en el monitor
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); 
}
Las sondas funcionan bien cada una por separado y marcan la temperatura "casi" bien, el problema es que las lecturas no van de grado en grado, es decir si pongo una sonda en agua fría la temperatura empieza a bajar pero salta por ejemplo de 14 a 12 grados y de 12 a 10 asi va de 2 bajando y a veces de a 3, que error puede haber que me hace ese trabajo?
En esta imagen las sondas estan tomando la temperatura ambiente, la temperatura 3 fluctúa entre 20 y 22 y no pasa por el 21.
Imagen
César
Villa Huidobro Córdoba
Argentina

Espacio de César
Web: http://espaciodecesar.com/
Youtube: https://www.youtube.com/user/anajesusa
Facebook: https://www.facebook.com/espaciodecesar?ref=bookmarks

jordi3sk97
Mensajes: 120
Registrado: Mar Jun 29, 2010 10:53 pm
País: España
Ciudad: Barcelona

Re: Ayuda con código de Arduino

#2 Mensaje por jordi3sk97 »

No he programado nunca con esto pero....

Y si quitas los int al analogread, o antes de hacer el int lo multiplicas por 10?

Estas intentando dar una lectura de 0 a 100 cuando la entrada solo varía 41

mpaniaguam
Mensajes: 581
Registrado: Lun Abr 20, 2009 8:53 am
Ubicación: Avilés, España

Re: Ayuda con código de Arduino

#3 Mensaje por mpaniaguam »

Si observas los valores obtenidos en la lectura de tus sondas te darás cuenta que tienes una variación de 40 puntos (aproximadamente) entre el valor mínimo y el máximo (140 Max. 99 o 101 Min.), este conjunto de valores vas a mapearlo sobre una escala de 100 puntos (0º a 100º); como estás utilizando enteros no podrás conseguir una sensibilidad mayor de INT(100/40) que son más de 2 grados. Tienes que arreglartelas de alguna manera para conseguir un mayor espán en los valores de entrada, o amplificas o pruebas modificando el valor de la resistencia en serie (aunque por aquí no creo que consigas suficiente aumento de la sensibilidad).

Espero haberme explicado.

Un saludo.
1º desconfía de lo que ves.
2º lo que no ves no lo creas hasta que no lo veas
3º después del 2º punto vuelve a aplicar el 1º
mpaniaguam

Avatar de Usuario
anajesusa
Mensajes: 4241
Registrado: Mar May 30, 2006 11:12 pm
País: Argentina
Ciudad: Villa Huidobro
Ubicación: Villa Huidobro Córdoba Argentina
Contactar:

Re: Ayuda con código de Arduino

#4 Mensaje por anajesusa »

Tal cual mpaniaguam, es lo que me temía, justamente el salto es de 2 y a veces 3 que es la relación que me da los 40/100, ya probé con resistencias distintas y peor, voy a probar con las junturas de transistores en lugar de los 1N4148 para ver si tengo un rango mas aceptable. Muchas gracias a ambos por las respuestas, ya había hecho lo que indicaste jordi3sk97.
Saludos
César
Villa Huidobro Córdoba
Argentina

Espacio de César
Web: http://espaciodecesar.com/
Youtube: https://www.youtube.com/user/anajesusa
Facebook: https://www.facebook.com/espaciodecesar?ref=bookmarks

Avatar de Usuario
asegade
Mensajes: 3223
Registrado: Lun Dic 04, 2006 2:13 pm
País: Uruguay
Ciudad: Montevideo
Ubicación: Barrio Buceo
Contactar:

Re: Ayuda con código de Arduino

#5 Mensaje por asegade »

No te va a funcionar cambiando las junturas.
Las posibles soluciones pasan por adaptar el rango de medidas al rango del micro. El micro mide con 10 bit de precisión (1024 valores) pero para ello tus valores deben estar entre 0V y 5 V si mal no recuerdo.
Hay dos opciones claras que son, una cambiar la tensión de referencia para no usar los 5 V del micro (no recuerdo si el Arduino permite esta opción) y la segunda es usar un operacional para adaptar el rango de medida.
La tercer opción es usar un circuito especializado analógico (LM35) que no son demasiado caros. Hay una cuarta que es usar un Dallas DS18B20 digital, la mejor de las opciones, pero ya es mas caro. Si buscas en la red encuentras todo.

Salud
El permanente cambio es una constante universal.

Avatar de Usuario
anajesusa
Mensajes: 4241
Registrado: Mar May 30, 2006 11:12 pm
País: Argentina
Ciudad: Villa Huidobro
Ubicación: Villa Huidobro Córdoba Argentina
Contactar:

Re: Ayuda con código de Arduino

#6 Mensaje por anajesusa »

Si, lo de las cambiar junturas no anduvo, resolví (tercera opción Ale, je) poniendo un transistor amplificando y santas pascuas tengo un rango de 1000 y pico, mañana con mas tiempo voy a bajar un poco la ganancia del amplificador.
Gracias por la ayuda.
César
Villa Huidobro Córdoba
Argentina

Espacio de César
Web: http://espaciodecesar.com/
Youtube: https://www.youtube.com/user/anajesusa
Facebook: https://www.facebook.com/espaciodecesar?ref=bookmarks

tiopepe123
Mensajes: 462
Registrado: Lun Ene 01, 2007 11:56 pm
Ubicación: barcelona (España)

Re: Ayuda con código de Arduino

#7 Mensaje por tiopepe123 »

El circuito amplificador por transistor debe estar compensado en temperatura para que no varie enormemente con un simple cambio de la temperatura ambiente.

Otra solucion es utilizar una NTC/PTC, tipica solucion de las placas madre de los ordenadores.
http://ww1.microchip.com/downloads/en/A ... 21895d.pdf

Avatar de Usuario
troglodita
Mensajes: 2332
Registrado: Lun Mar 29, 2010 10:47 am
País: España
Ciudad: Alcorcón Madrid

Re: Ayuda con código de Arduino

#8 Mensaje por troglodita »

Aquí hablan del problema y de cómo solucionarlo. Parece ser que el truco usando sólo el 1N4148 es usar la referencia interna de 1.1V del arduino, para ganar mucha resolución.

http://arduino.cc/forum/index.php?topic=118079.0
Qué bien y qué pronto, le dijo la tonta al tonto.

aalbea
Mensajes: 319
Registrado: Mar Jun 30, 2009 10:32 am
País: España
Ciudad: Castellón
Ubicación: Castellón de la Plana

Re: Ayuda con código de Arduino

#9 Mensaje por aalbea »

Otra opción que a mi me ha ido muy bien es utilizar una sonda de temperatura de precisión específica, que básicamente es lo que se comenta, una unión de referencia y un amplificador de precision.

He probado el LM35 y el TMP36 (para temperaturas positivas el primero y para negativas y positivas el segundo). Leen hasta unos 150 ºC. Sacan una referencia analógica de 0,1 voltios exactos por cada ºC, de manera que el escalado es muy sencillo.

Estos circuitos comprados por ebay no llegan al euro por unidad, de manera que no son un desembolso exagerado y presentan una alternativa bastante robusta.

Un saludo.

Avatar de Usuario
Homer
Mensajes: 2151
Registrado: Dom Abr 30, 2006 2:07 pm
País: España
Ciudad: Sabadell
Contactar:

Re: Ayuda con código de Arduino

#10 Mensaje por Homer »

Más fácil todavía. Por lo que yo he observado las fluctuaciones entre dos mediciones son proporcionales a la medida real, no tienes más que hacer la media entre varias mediciones para obtener un resultado más exacto y estable.

Saludos :D

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 3 invitados