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.

domingo, 6 de octubre de 2013

Emite en FM con tu Raspberry Pi

Bien es sabido que el Raspberry Pi es un mini-ordenador con unas capacidades enormes, y como no, alimentado por un núcleo linux lo es mucho más.
En ésta entrada os voy a explicar cómo emitir en FM con vuestro pequeño juguetito.


¿Qué necesitamos?

Lo que yo he usado ha sido lo siguiente:

  • Raspberry Pi Model B (256Mb)
  • Debian 6  Squeeze.
  • Un cable de 20 cm.
  • Tener instalado Python.


Lo primero de todo es instalar Python. Es muy fácil:
  • sudo apt-get install python
Lo segundo es crear una carpeta en nuestro sistema. Yo la he creado en mi /home/ quedando así:
  • sudo mkdir /home/pi/radio
Posteriormente entramos a esa carpeta:
  • cd /home/pi/radio
Una vez en la carpeta, nos bajamos el siguiente archivo y lo descomprimimos:
  • Descarga el archivo aqui: PiFm.tar.gz
  • Descomprimimos el tar.gz: tar xzvf PiFm.tar.gz
Cuando ya tenemos descomprimido el archivo, tenemos que seleccionar el archivo que queremos emitir.

Hacemos lo siguiente:
  • sudo python
  • >>> import PiFm
  • >>> PiFm.play_sound("sound.wav")
Con esto que hemos hecho podemos escuchar la canción de la Guerra de las Galaxias en el 106.7 de nuestra radio FM.

Si queremos cambiar la frecuencia en la que vamos a emitir, tendremos que salir de Python pulsanco Ctrl+C y posteriormente Ctrl+D. Luego en la linea de comandos, tendremos que poner lo siguiente:
  • sudo ./pifm sound.wav 94,3
Donde el 94,3 será la frecuencia en MHz en la que vamos a emitir. Por defecto siempre va a emitir en 106,7 MHz.

Para ampliar el rango de emisión de nuestro Raspberry Pi, tendremos que conectar un cable de 20 cm de largo al pin GPIO 4.



Como información adicional, podemos emitir cualquier canción o archivo de audio que queramos, pero éste tiene que tener los siguientes parámetros:

  • Frecuencia de muestreo: 22050 Hz
  • Profundidad de bit: 16 bits
  • Tipo de archivo: wav
Podéis usar el VLC para convertirlo. Se hace de una manera muy rápida y sencilla.

Espero que os haya servido, y como no, decir que utilizar esto está fuera de la legalidad en España. Consulta si en tu país hace falta algún tipo de licencia para emitir en FM.