Control temperatura con Raspberry Pi Expansion Board.
Vamos a realizar un proyecto de control de temperatura de una habitación, este es uno de los muchos proyectos de domótica que podes realizar con la Raspberry Pi Expansion Board. Para ello usaremos un lm 335 que soldaremos en el área de prototipado.
Puedes comprar la placa en la tienda que tenemos disponible.
Puedes comprar la placa en la tienda que tenemos disponible.
LM 335 sensor de temperatura,
Este es un sensor que nos devuelve una tensión en función de la temperatura. Básicamente 10 mV/K en su modo mas simple y sin calibrar. Así que para las temperaturas (entre 0ºC y 45ºC) tendremos una tensión 2.73V y 3.18V. Este sensor puede medir desde -40ºC a 100ºC.

lm335.pdf | |
File Size: | 298 kb |
File Type: |
La forma de conectarlo es la siguiente:
Vemos que es suficiente conectar el pin + y el - a una resistencia de 1K. La alimentación V+ es recomendable 5V aunque con 3.3V funciona al menos con temperatura mas bajas.
Montaje en la Raspberry Pi Expansion Board.
Dado que la placa incluye un ADC el montaje para poder operar con la Raspberry es mínimo. En nuestro caso simplemente soldaremos la resistencia y el sensor en el área de prototipado. Finalmente conectaremos el CH0 a la salida del sensor del LM335. Este es el resultado en la placa.
Ahora pinchamos la placa encima de la Raspberry Pi y podemos comprobar que todo este correcto haciendo uso del ejemplo adc_2. A medida que aumente la temperatura tendria que aumentar el valor del ADC. Para ello usaremos un secador de pelo y veremos como rapidamene aumenta la tempertura. Si no sabes como compilar y ejecutar el programa pincha aquí.
Vemos que empezamos con 917 y a medida que le acercamos el secador aumenta la temperatura. En caso de acercarle algún ventilador o algo que tire aire frió, tendría que bajar.
Lectura temperatura
Ahora ya podemos leer el valor del ADC, el siguiente paso es pasarlo a ºC. En mi caso el control se hará por calor, es decir cuando la temperatura baje se encenderá una estufa eléctrica, esta se activara con el relé que incorpora la placa, hay que tener cuidado con la potencia de la estufa ya que muchas llegan a los 2000W el relé soporta unos 1150 así que no es conveniente usar todo su potencia. En mi caso la estufa es de 1200W pero por precaución usare solo una de las barras que tiene, así que serán 600W, que son suficientes para calentar una habitación.
Se realizara un programa con un menú, en el tendremos el modo Manual, que nos permitirá encender y apagar la estufa y el modo Automático el cual le indicaremos una temperatura de referencia y el intentara mantener esa temperatura.
Para la conversion del ADC a ºC simplemente hacemos una regla de 3.
Se realizara un programa con un menú, en el tendremos el modo Manual, que nos permitirá encender y apagar la estufa y el modo Automático el cual le indicaremos una temperatura de referencia y el intentara mantener esa temperatura.
Para la conversion del ADC a ºC simplemente hacemos una regla de 3.
Para ello usaremos la función readTemp() que nos devolverá el valor en grados centigrados. El siguiente código lee la temperatura y nos la enseña por pantalla. Hay que tener en cuenta que el sensor no esta calibrado por lo que si queremos mas precisión hay que calibrarlo.

temp.c | |
File Size: | 1 kb |
File Type: | c |
En mi caso en concreto comprobándolo con un termómetro me da unos cuantos grados de mas. Por lo que haré el ajusta por software y le restare un offset.
Menú usuario
Ahora vamos a proceder a realizar el menu de usuario. Este consta de dos partes:
Para ello preguntaremos al usuario mediante teclas que opción quiere usar.
- Manual donde dentro de esta opcion esta encender y appagar.
- Automático, aquí podremos imponer un valor de referencia y el control intentara mantenerlo.
Para ello preguntaremos al usuario mediante teclas que opción quiere usar.

control_temp.c | |
File Size: | 1 kb |
File Type: | c |
Tarea de control
El ultimo paso es lanzar una tarea de control que lea la temperatura y que actué en función de ella. Pero esto lo tiene que hacer de forma independiente del resto del programa. Para ello pondremos un periodo de muestreo de 5 segundos ya que los procesos térmicos son procesos muy lentos.
Ademas hay que modificar un poco el programa anterior para que se refresque la temperatura, ya que el scanf para el programa. Para ello toda la parte de los print se pasa dentro del temporizador y la función menú nos queda con el scanf que elige modo Automático o Manual.
Dado que la impresión del menú esta en el temporizador de 5 segundos a veces tarda en responder ya que hasta pasado ese tiempo no actualizamos la pantalla.
Ademas hay que modificar un poco el programa anterior para que se refresque la temperatura, ya que el scanf para el programa. Para ello toda la parte de los print se pasa dentro del temporizador y la función menú nos queda con el scanf que elige modo Automático o Manual.
Dado que la impresión del menú esta en el temporizador de 5 segundos a veces tarda en responder ya que hasta pasado ese tiempo no actualizamos la pantalla.

control_temp2.c | |
File Size: | 2 kb |
File Type: | c |
Conexión de la estufa
Mediante el led del relé podemos ver como se enciende cuando la temperatura baja y como se apaga al subir esta. Ahora el ultimo paso es conectar la estufa al relé Para ello usaremos un alargador o ladrón y le cortaremos el cable de la fase (marrón) de esta manera este cable sera el que puentearemos por el paso del relé. De esta manera cualquier cosa que conectemos al alargador podrá ser controlado por la Raspberry Pi. Tener cuidado con las conexiones y aseguraos de que estén bien fuertes, ya que si se suelta y toca la placa o la Raspberry pueden resultar dañadas.
Como podéis ver en mi caso he usado un ladrón, así puedo conectar mas cosas si en un futuro me apetece. Aunque siempre recordar el limite de 1150W. Normalmente las estufas es lo que consumen mas potencia ya que las luces son de 10W, 20W o 40W y no suponen un problema.
Ahora queda el ultimo paso, conectar la Raspberry Pi a la corriente mediante la entrada de 12V y el microUSB, y sobretodo a una red ya sea mediante wifi o ethernet, en mi caso tengo un PLC así que lo conectare por ethernet.
Ahora queda el ultimo paso, conectar la Raspberry Pi a la corriente mediante la entrada de 12V y el microUSB, y sobretodo a una red ya sea mediante wifi o ethernet, en mi caso tengo un PLC así que lo conectare por ethernet.
Resultados
Finalmente podéis ver un vídeo del funcionamiento, en este caso lo controlo desde el pc, pero se puede controlar desde un teléfono solo necesitáis algún programa que os permita hacer un ssh. Para Android he usado ConnectBot.
Por ultimo hemos ido guardando los datos en un fichero la temperatura, el relé y la referencia. Lo hemos dejado en modo Automático durante un tiempo para ver como regulaba la temperatura y este es el resultado.
Al principio las activaciones del rele son debidas al modo manual, pero vemos que a partir de que ponemos la referencia a 24 y dejamos el modo automático el sistema nos mantiene la temperatura dentro de los margenes. No olvidemos que hemos impuesto una histeresi de 1 grado, así que a 25 se apaga y a 23 se enciende.
He usado la estufa para controlar la temperatura mientras duermo, he situado la referencia en 18.5ºC . Como todos sabréis a las 5 o 6 de la mañana las temperaturas bajan unos cuantos grados, mi idea es irme a dormir y colocar esa temperatura como referencia, de esta manera cuando la temperatura baje se activara el control. En este ejemple he usado una histeresi de 0.5ºC es decir la temperatura oscila entre 18 y 19ºC. Después de toda la noche os enseño una parte de los datos, ya que hay muchísimos.
Si queréis ejecutar el programa por ssh y salir de la sesión os fijareis que el programa se cierra. Para evitar esto hay una aplicación muy simple que guarda los programas en ejecución y se pueden retomar de nuevo.
Para ello tecleamos
sudo apt-get install screen
Esperamos que se instale y simplemente tecleamos:
screen
Ahora ya podemos iniciar el programa que queramos y salir.
Cuando volvamos tecleamos :
screen -r
Así recuperaremos la sesión.
Si queréis ejecutar el programa por ssh y salir de la sesión os fijareis que el programa se cierra. Para evitar esto hay una aplicación muy simple que guarda los programas en ejecución y se pueden retomar de nuevo.
Para ello tecleamos
sudo apt-get install screen
Esperamos que se instale y simplemente tecleamos:
screen
Ahora ya podemos iniciar el programa que queramos y salir.
Cuando volvamos tecleamos :
screen -r
Así recuperaremos la sesión.
La bajada inicial es porque le había dado con el secador para comprobar que funcionase, pero después podemos ver como mantiene la temperatura entre 19.5 y 18 creo que son muy buenos resultados y la verdad que he dormido a gusto.
Hemos terminado uno de los muchos proyectos de domótica que se pueden hacer con la Raspberry Pi Expansion Board, para introducir mejoras en este proyecto en mi opinión se podría mejorar la interfaz de usuario por ejemplo para que sea controlable desde un navegador web.