miércoles, 4 de julio de 2012

Calefacción solar por aire: Conexionado (Hardware) del Arduino con sensores de temperatura

No voy a entrar a explicar en detalle cómo funciona Arduino, ya que para eso hay miles de tutoriales y ejemplos en la red, y un espacio donde encontrar toda la información respecto a esta brillante idea de microcontrolador universal. Solo decir que responde a la inquietud de un grupo de aficionados a la electrónica por desarrollar una plataforma basada en una placa con un microcontrolador y un entorno de desarrollo, con el fin de facilitar el uso de la electrónica en todo tipo de proyectos.Su principal característica, la que lo ha popularizado, es que tanto su diseño como su distribución es libre. Es decir, puede utilizarse libremente para el desarrollo de cualquier tipo de proyecto sin haber adquirido ninguna licencia. Puedes comprarlo o hacertelo igual, pero no tienes que pagar más por ello, no estás "pirateando" nada, es libre.

No me enrrollo más, si quereis saber más os vais aquí, os lo leeis y volveis:

Y aquí podemos ver un pequeño resumen de sus conexiones y componentes:
http://arduino.cc/en/Reference/Board

Debemos instalar el entorno de desarrollo para poder pasar los programas a Arduino, descargándolo de la web. Yo he utilizado la versión 23. Actualmente ha salido una remodelación totalmente nueva: la Arduino 1.0, pero parece que todavía no está muy fina y presenta algún problemilla de incompatibilidad. Con este entorno de desarrollo se escribirá el programa que correrá en nuestro Arduino y nos servirá para transferirlo desde el PC al mismo.

Y ahora pasemos a definir como hemos conexionado esta versátil y útil herramienta. Nos centraremos en la parte de los sensores.

Entradas analógicas (A0-A5). Son las que vamos a emplear para leer valores, en nuestro caso, los que nos den los sensores de temperatura, pero pueden ser de presión, de luz, etc. Todo valor analógico de voltaje en estas entradas podrá ser traducido a su equivalente valor digital (1024 valores).

De estas seis entradas, una (la A0) la utiliza una placa adicional que hemos adquirido, de pantalla LCD para reconocer el pulsado de una serie de botones, basándose en un divisor de tensión.

El resto son empleadas para conectar la señal VSS de los sensores de temperatura (A1,A2,A3,A4 y A5). A estos sensores a su vez, les llega la señal de alimentación (VCC) y la tierra (GND).

En el esquema siguiente se puede ver una aproximación al conexionado que debemos realizar, sólo que se muestra un solo sensor conectado al pin A0, en lugar de varios al resto A1,A2....



Los sensores son del tipo MCP9700A. Salen a muy buen precio, son extremadamente rápidos y con mayor rango de temperatura ( hasta 125ºC) que los LM35, que además son mucho más lentos. Tienen una salida lineal de 10mV por grado centígrado + 500 mV. El margen de funcionamiento de los mismos está entre los -40ºC y los +125ºC, aunque hay una serie que llega a los 150ºC.

Para calcular su relación con el conversor A/D del Arduino ( 10 bits - 1024 niveles-) se emplea la siguiente fórmula:

(( Temp. del sensor en ºC  *  10 mV + 500 mV ( nivel a 0ºC) ) * 1024 ( 10 bits )) / 5 ( escala 0-5V )

Por ejemplo para una lectura a 20ºC.
(( 20 * 0,010 + 0,500 ) * 1024 )) / 5 = 143, 36 ( o sea 143 )
Es decir la lectura del sensor a 20ºC tras ser leida por el conversor A/D seria de 143 en la escala de 0 a 1024 niveles ( 11 bits )

Posteriormente se decidió, para lograr mayor precision en la lectura, utilizar la referencia de voltaje interna de 1.1 v que tiene Arduino, quedando la fórmula de cálculo:

(( Temp. del sensor en ºC  *  10 mV + 500 mV ( nivel a 0ºC) ) * 1024 ( 10 bits )) / 1.1 ( escala 0-1.1V )

Para ello hubo que cambiar el cable rojo del pin "5V" al pin "Vin".

Para poder ver las lecturas a través de una pantalla e interactuar de algún modo con el sistema, se adquirió (por ebay) una placa con pantalla LCD y botonera. Se utilizó una librería denominada LCD4Bit_mod que contiene todas las funciones necesarias para escribir a la pantalla.

De esta manera, la conexión de esta placa botonera LCD con Arduino a través de los pines digitales dispone la configuración de dichos pines digitales de la siguiente forma:

  • D0 (Libre)
  • D1 (Libre)
  • D2 (Libre)
  • D3 (Libre) La emplearemos como interruptor del ventilador.
  • D4 DB4 del LCD
  • D5 DB5 del LCD
  • D6 DB6 del LCD
  • D7 DB7 del LCD
  • D8 RS del LCD
  • D9 ENABLE del LCD
  • D10 BackLight del LCD
  • D11 RW del LCD
  • D12 (Libre)
  • D13 (Libre)

Como vemos, ocupa casi todo, pero analizando el código de la librería LCD4Bit_mod vemos que por defecto no se tiene en cuenta la señal RW del LCD, y el BackLight (retroiluminación del LCD) la podemos poner constantemente encendida o puentearla a D3 y usar esta última.
¿ Qué conseguimos con esto ?
Tener libres D10 a D13 para poder posteriormente emplear un lector/grabador de datos a tarjeta SD y así poder guardar las medidas de temperatura tomadas sin necesidad de tener un PC portátil al lado.

Dejando esto último para más adelante, empleamos la línea D3 para activar/desactivar la placa con el relé que pondrá en marcha y apagará el extractor.

Así de sencillo.

Luego está el programa que hay que poner "dentro" del Arduino para que todo esto funcione, pero eso lo explicaremos detalladamente en otro capítulo.

Básicamente, anticipo que consiste en tomar muestras continuamente de cada sensor, hacer la media y sacarlas cada 5 segundos con la función Serial.Print, que permite mostrarlas en una ventana en el PC que lee por el puerto correspondiente (en el entorno de desarrollo de Arduino).

Todas estas muestras luego se copian a una hoja Excel y se cálculan las gráficas que podeis ver en este blog.

Y ya está. El código lo veremos más adelante...

No hay comentarios:

Publicar un comentario