domingo, 27 de octubre de 2013

Enciende una bombilla con tu Raspberry Pi

Estoy trabajando en un nuevo proyecto sobre el control de señales de alta tensión (125V~230V) mediante un circuito de baja tensión como es el de nuestra Raspberry Pi.

Lo que en esta entrada vamos a hacer es activar o desactivar un circuito de 230V, por ejemplo, encender o apagar una bombilla, mediante nuestra Raspberry Pi y a través de internet.

¿Qué necesitamos?

  • Raspberry Pi (model B)
  • Relé OMRON G5LA-1 5DC
  • Transistor NPN BC337
  • Diodo 1N4007
  • Resistencia de 1KΩ o de 1.2KΩ



El circuito básicamente es el que tenéis arriba. Como veis, la salida de la Raspberry Pi nos proporciona 3.3V, y que yo, mediante el programa de diseño de circuitos, he puesto un interruptor mecánico para imitar cuando el pin está activo o apagado.

Con el relé, lo que conseguimos es que, mediante un circuito de baja tensión, en este caso 3.3V ó 5V, podemos manejar tensiones de más de 200V de alterna, aislando nuestro sistema de baja tensión. El relé es capaz de manejar tensiones de 240V y 10A, perfecto para una instalación doméstica.

Una vez tengamos montado el circuito en una Protoboard, lo siguiente que tendremos que hacer es pasar a nuestro pequeño ordenador y picar un poco de código.

Programación

Antes de meternos en vereda programil, deberemos instalar WiringPi, que es un interprete de los GPIO de la Raspberry Pi. Para instalarlo deberemos entrar en la terminal de nuestra RPi (por ssh o a través del monitor) y pondremos esto:
sudo apt-get install git-core
sudo apt-get update
sudo apt-get upgrade
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build
Con eso ya tendremos la gestión de los GPIO's a través de la terminal.

Personalmente, tengo intención de controlar mi Raspberry Pi a través de internet, por lo que para que esta tarea me sea mas sencilla, lo que voy a hacer es programar en PHP. Dado que mi nivel de programación en PHP no es del todo completo, voy a tratar de hacerlo lo mejor que pueda y sepa.

En este caso, lo que vamos a hacer es activar una bombilla, por lo que sus estados serán "Encendido" y "Apagado". Es decir, la interfaz de nuestra página web tendrá que tener como mínimo 2 botones, uno para encenderla y otro para apagarla.

El código para encender la bombilla será el siguiente (encender.php):
<html>
<body>
<?php
$inicializar = "gpio mode 0 out";
shell_exec($inicializar);
$encender = "gpio write 0 1";
shell_exec($encender);
?>
</body>
</html>

Y el código para apagarla (apagar.php):
<html>
<body>
<?php
$inicializar = "gpio mode 0 out";
shell_exec($inicializar);
$apagar = "gpio write 0 0";          
shell_exec($apagar);
?>
</body>
</head>

Y la página que enlaza a estas dos mediante un botón es (bombilla.php):

<html>

<title>ENCIENDE Y APAGA LA BOMBILLA</title>

<body>
<center>
<p>
<td> <a href="http://TU_SERVIDOR/encender.php"> <input type='submit' name='Submit' value='ENCENDER' style='width:300px; height:200px'/></td>
</p>
<p>
<td> <a href="http://TU_SERVIDOR/apagar.php"> <input type='submit' name='Submit' value='APAGAR' style='width:300px; height:200px'/> </td>
</p>
</center>
</body>
</html>

Ahora, con todo hecho, sólo deberíamos conectar nuestros cables desde la Raspberry Pi a la ProtoBoard. En mi caso, he conectado el pin de 5V a la salida de 5V de la Raspberry Pi (PIN 2), la salida de 3.3V la obtengo del GPIO 17 (PIN 11) y la masa ó 0V, la saco del GND (PIN 6).



Alguna cosilla más

Dado que la Raspberry Pi no tiene ningún circuito de protección interno para cortocircuitos o para simple integridad de la placa, lo que he hecho ha sido no sacar más de 3mA del GPIO 17, por eso coloco una resistencia de 1.2KΩ. Si queréis sacar un poco más de corriente, podéis poner una de 1KΩ, pero eso lo dejo a vuestra elección.

Como estamos trabajando con PHP, el servidor nos muestra siempre código preprocesado, con lo que a nosotros nos llega texto plano, y por tanto, no podemos usar AJAX para no tener que refrescar la página constantemente. Lo que he hecho para no tener que ir siempre a la página "bombilla.php" desde la barra de dirección, es redireccionar "encender.php" y "apagar.php" a la página "bombilla.php", así cada vez que pulsemos al botón, cuando ejecute la tarea, nos volverá a llevar a la página inicial.
  • He añadido la siguiente línea en "encender.php" y "apagar.php" justo después de la etiqueta de cierre del php (?>):
<META HTTP-EQUIV="REFRESH"  CONTENT="0; URL=http://TU_SERVIDOR/bombilla.php">
El relé que he utilizado, lo he comprado en Aliexpress:  5V Relay Module KY-019 FOR ARDUINO que aunque no sea el especificado en los componentes, es barato y hace las mismas funciones que el OMRON

Espero que os haya gustado y que podáis aplicarlo en vuestros pequeños proyectos. Si tenéis alguna sugerencia o pregunta, dejadla en los comentario.