ARD07 – Calibración manual

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

El uso de elementos como los potenciómetros o los pulsadores para producir una señal de entrada está muy bien, porque tenemos un control manual directo sobre la entrada pero, en muchísimos casos, se queda corto. En la naturaleza existen parámetros como la temperatura, la luz, la humedad, etc que varían las condiciones de un entorno, y tenemos que poder medirlos con un circuito electrónico. Por ejemplo, podemos querer hacer con nuestro Arduino un equipo que mida la temperatura ambiente, y la refleje en una escala de LED’s. Eso es, justamente, lo que vamos a hacer ahora.

Este capítulo nos ayudará a conocer la naturaleza y comportamiento de un sensor térmico, y a programarlo adecuadamente en Arduino. También introduciremos algunos conceptos del lenguaje de programación Arduino y un concepto especialmente interesante cuando se usan sensores: la calibración, para obtener un reflejo real del valor del parámetro medido por el sensor.

EL SENSOR DE TEMPERATURA

Figura 7.1. Algunos encapsulados de termistores.

Figura 7.1. Algunos encapsulados de termistores.

En el mercado electrónico existen diversos componentes que pueden usarse para medir la temperatura. El más simple y adecuado en muchos casos es el llamado termistor. Se trata de una resistencia cuyo valor varía según la temperatura. Se fabrican con distintos coeficientes resistivos y diferentes encapsulados pero, en general, su aspecto físico puede ser similar a los expuestos en la figura 7.1.

Existen dos tipos de termistores: los PTC (coeficiente positivo de temperatura) y los NTC (coeficiente negativo de temperatura), dependiendo de si, con el aumento de temperatura a que se les someta aumenta o disminuye la resistencia.

Los termistores son adecuados en algunos casos, donde un determinado valor resistivo es crucial para el funcionamiento de un circuito. Sin embargo, nosotros aquí vamos a emplear un sensor de temperatura más elaborado: el TMP36. Se trata de un componente con tres terminales. Uno de ellos se conecta a masa (negativo). Otro terminal se conecta a la alimentación. La tensión de este terminal puede variar entre 2.7 y 5.5 voltios para que funcione adecuadamente. Como nuestro Arduino tiene dos salidas de tensión (de 3.3 y 5 voltios), lo conectaremos a la de 5 Vcc, con lo que nos aseguramos el funcionamiento. El tercer terminal (el central) devuelve una parte de la tensión de alimentación, proporcional a la temperatura ambiente que el componente capta a través de su encapsulado. Esta temperatura puede variar en un rango de -40ºC hasta +125ºC. Fuera de estos límites el componente no funcionará adecuadamente e, incluso, podría destruirse. En la figura 7.2 vemos este componente, con los terminales identificados.

Figura 7.2. El patillaje del termistor TMP36.

Figura 7.2. El patillaje del termistor TMP36.

Como vemos es muy fácil identificar los terminales, ya que un lado del encapsulado es plano y el otro curvo. Mirándo el lado plano (con la referencia del componente serigrafiada), el positivo está a la izquerda, la masa a la derecha, y la salida de tensión variable en el centro.

Aparte de los rangos de tenión de alimentación que soporta, así como de los límites de temperatura que puede medir, hay otros valores que debemos conocer al usar este componente en nuestros montajes:

  • Factor de escalado: La tensión de salida varia en 10 mV (10 milivoltios, o milésimas de voltio) por cada grado que cambia la temperatura.
  • Exactitud: la exactitud con que se mide la temperatura es con un margen previsto de error de un 2%, lo que, para nuestros propósitos, está muy bien.

EL CIRCUITO

Figura 7.3. El montaje cableado de este artículo.

Figura 7.3. El montaje cableado de este artículo.

Con todo esto en mente, vamos a usar este componente para montar un circuito que mida distintos rangos de temperatura mediante una escala de diodos LED. De momento, solo vamos a usar tres diodos, ya que no se trata de crear un termómetro “útil”, sino de ilustrar como funciona todo esto en conjunto. En la figura 7.3 vemos el montaje.

Tenemos tres diodos led con el cátodo conectado, a través de una resistencia de 220 Ω para cada uno, a masa. Los ánodos (polos positivos) van conectados a las salidas digitales 2, 3 y 4 de nuestra placa Arduino.

El TMP 36 está conectado según hemos visto anteriormente: el terminal de masa al negativo, el terminal de tensión al positivo de 5Vcc, y el terminal de salida de tensión, que sera la que varie según la temperatura, a la entrada analógica A0.

EL SKETCH

Ahora vamos a ver el sketch que usamos para manejar este circuito y que se encargará de dos tareas:

Encender o apagar los LED’s adecuados, según la temperatura.

Mostrar, en la ventana de datos serie, que ya conocemos de un artículo anterior, los datos de tensión y temperatura en cada momento.

El listado completo (que analizaremos detalladamente a continuación) es el siguiente:

Empecemos por el principio. En la primera parte del código se declaran, como ya es habitual, las variables y constantes que se usaran durante todo el sketch. Vamos a detallarlas, porque esta vez vamos a introducir algúnos conceptos que nos serán útiles más adelante:

Observa la primera línea. Definimos que la entrada (que procede del sensor de temperatura), llegará al pin de entrada analógica A0.

En la segunda línea definimos una constante a la que llamamos temperaturaBase, que usaremos como punto de partida para que se haga una calibración “manual” (un poco más adelante veremos que significa “manual” en este contexto). Para esta temperatura e inferiores, haremos que no se encienda ningún LED, de modo que sólo tendremos en cuenta las medidas de temperatura superiores a la que aquí indicamos. Cuando analicemos el resto del código veremos como lo hacemos.

Después definimos dos variables que almacenarán, en cada caso, la tensión que entrega el sensor de temperatura, y la temperatura medida.

En la sección setup encontramos lo siguiente:

La primera línea ya la conocemos. Abre una conexión serie con el ordenador a 9600 baudios. A continución tenemos lo que se llama un bucle. Si estás familiarizado con otros lenguajes de programación, como PHP, JavaScript, etc, ya sabes lo que es. Si no, te cuento. Definimos un proceso (un conjunto de líneas de código), que se repiten un número determinado de veces. En el artículo sobre sintaxis se detalla el comportamiento de este bucle, y de otros tipos de bucle que Arduino maneja. Aquí diremos que tenemos una variable, llamada variable de control (en este caso se llama pinLed), que forma la “espina dorsal” del bucle. Parte de un valor inicial de 2, en cada iteración del bucle se incrementa en una unidad, y el bucle, una vez que se inicia, se repite mientras la variable de control sea menor que 5. Entre las llaves vemos lo que se llama cuerpo del bucle. Este fragmento de código (que puede estar formado por una o más líneas) se repite en cada iteración del bucle.

Fijate que la variable de control se declara con la palabra clave int al principio del bucle, por lo que no es necesario que esté declarada en la primera sección del sketch, donde se han declarado las demás variables.

Dentro del cuerpo del bucle vemos como usamos la variable de control. En la primera iteración toma el valor 2. Definimos el pin digital 2 como de salida, con pinMode(pinLed, OUTPUT);, y le asignamos el valor LOW (equivalente a 0) con digitalWrite(pinLed, LOW);. Cuando se llega a este punto, la variable de control se incrementa en una unidad: toma el valor 3, y establece el pin digital 3 como de salida y le asigna el valor LOW. De nuevo, al terminar el cuerpo del bucle, la variable de control se incrementa: ahora vale 4. Define el pin digital 4 como de salida y le asigna el valor LOW. Una vez más, la variable de control se incrementa: ahora tiene el valor 5. Cuando se va a reiterar sobre el bucle, se encuentra conque ya no se cumple la condición límete que hemos expresado en la definición del bucle, que dice que se estará ejecutando mientras la variable de control valga menos de 5. Por lo tanto, se “salta” todo el bucle y la ejecución del sketch continua en la línea siguiente que, en nuestro ejemplo, es donde empieza la sección loop. De esta forma, hemos definido, con las mismas instrucciones, los tres pines de salida a los que conectamos los LED’s.

Dentro de la sección loop lo primero que hacemos es leer el valor del pin central del sensor de temperatura que, como recordarás, entra por el pin analógico A0 de la placa Arduino.

Imprimimos este valor en la ventana de datos serie (acuérdate de abrirla con el botón superior derecho de tu IDE), con el método print() del objeto Serial. La diferencia entre el método print() y println() es que el segundo, después de imprimir el contenido especificado, incluye un salto de línea.

Recuerda que este será un valor entre 0 y 1023.

A continuación, calculamos la tensión, situada entre 0 y 5 v que está dando el sensor. En este ejemplo no usamos la función map() para poder obtener un valor flotante:

Como la tensión suministrada por el sensor de temperatura depende, directamente, de la temperatura a la que se se encuentra sometido, podemos calcular cual es esa temperatura, basándonos en las especificaciones del sensor, así:

Con esta parte del código ya tenemos la lectura de datos del sensor, como vemos en la figura 35.

Figura 35. Lecturas procedentes del sensor térmico conectado a Arduino

Puedes probar a sujetar el sensor entre los dedos durante un rato, para que coja tu temperatura corporal, y verás como van variando las lecturas.

Si quieres hacer una comprobación “drástica” de lectura de temperaturas más altas, puedes encender un mechero y arrimarlo brevemente (una décima de segundo) al sensor. Verás como las lecturas se disparan y, tras retirar la llama, van bajando gradualmente. Evidentemente, usar fuego para calentar un componente electrónico, por naturaleza delicado, no es lo que yo llamaría una buena idea. Si te pasas con el tiempo de calentamiento, quemarás el componente y ya no funcionará más pero, en este ejemplo, si somos lo suficientemente rápidos arrimando y retirando la llama, podemos ver el comportamiento. De todos modos, si el TMP36 se destruye accidentalmente, reemplazarlo apenas cuesta unos pocos céntimos.

Ahora usamos la temperatura medida, en comparación con la temperatura base que habíamos establecido anteriormente, para encender uno, dos o los tres led, así:

Vemos que si la temperatura médida es menor que la temperatura base, los tres led están apagados; si está entre la temperatura base y diez grados más, se enciende un led, y así, sucesivamente.

Por eso hablábamos antes de “calibración manual”. El cálculo de los LED’s que se encienden se hace sobre la temperatura que hemos establecido como base y que deberá ser la temperatura ambiente del entorno donde estamos trabajando. Evidentemente, este sistema adolece de cierta limitación ya que si ahora vamos a una habitación más caliente (o ponemos Arduino al sol en la ventana), podríamos tener, de entrada, uno o dos LED’s encendidos. Claro que, dependiendo del número de LED’s que usemos y de los saltos en grados que programemos entre uno y otro, puede que sea lo que deseamos.

Por último, la línea delay (300); provoca un retraso de 300 milisegundos de una ejecución a las siguiente, como ya sabemos.

     

2 comentarios:

  1. Magistral, formato de tu blog! ¿Cuanto tiempo llevas bloggeando? haces que leer en tu blog sea divertido. El uso total de tu web es bien pensado, al igual que el material contenido!
    Saludos

    rotulos de led http://www.dreamlux.es/es/gama-rotulos-electronicos-leds.html

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *