Raspberry PI – Implementando un sistema domótico asequible [Parte I]

En anteriores entradas de esta serie, vimos que son los pines GPIO, y como controlar un LED con ellos desde nuestra Raspberry PI mediante Bash y Python, o con una aplicación web.

portadarelele

En esta ocasión vamos a aprender a controlar el encendido/apagado de un aparato eléctrico; antes de empezar debemos tener instalado el servidor LAMP como vimos en la anterior entrega.

Para implementarlo voy a utilizar una placa de relés de 5V y ocho canales, que deberá estar optoacoplada para proteger la Raspberry PI; ya que los aparatos que vamos a controlar funcionan con 220V, y los pines GPIO de Raspberry trabajan con un máximo de 3,3V.

placarele

Placa de relés optoacoplados.

Entre el relé y la Raspberry PI debemos hacer las siguientes conexiones.

 Modulo relés optoacoplados
Raspberry PI Modelo A, B, A+, B+
 VCC
 + 5V
 IN 8
 GPIO 17
 GND  GND
OLYMPUS DIGITAL CAMERA

Conexiones entre la Raspberry PI y la placa de relés.

Ahora vamos a probar si las conexiones funcionan, con una simple prueba en Bash, configurando el pin GPIO 17 como salida, y dándole un valor lógico alto.

#Exportamos el PIN deseado
usuario@maquina:~$ sudo echo 17 > /sys/class/gpio/export

#Establecemos la direccion (salida o entrada)
usuario@maquina:~$ sudo echo out > /sys/class/gpio/gpio17/direction

#Activamos la salida del rele dandole un valor de 1 al bit
usuario@maquina:~$ sudo echo 1 > /sys/class/gpio/gpio17/value

Una vez se haya encendido el led de control en el relé, ya podemos apagarlo y liberar el pin GPIO.

#Apagamos la salida del rele
usuario@maquina:~$ sudo echo 0 > /sys/class/gpio/gpio17/value

#Liberamos el PIN asociado
usuario@maquina:~$ sudo echo 17 > /sys/class/gpio/unexport

Ya hemos probado el funcionamiento, así que ahora vamos a ver la página web que tenemos que programar, es bastante mas sencilla que la de la prueba con los LED que vimos en la pasada entrega.

<html>
 <head>
                 <!--/var/www/rele/index.php-->
 </head>
 <body>
 <!--GPIO17--> 
 <form action="" method="post">
 Enchufe 0 [GPIO 17]&nbsp;<input type="submit" name="encender17" value="Encender">
 <input type="submit" name="apagar17" value="Apagar">
 <input type="submit" name="parpadear17" value="Parpadear">
 </form> 
 <br></br>
 </body>
</html>

<?php
// Funciones PHP del pin GPIO 17
 if ($_POST[encender17]) { 
 $a- exec("sudo sh /var/www/rele/gpio/17/enciende.sh");
 echo $a;
 }

 if ($_POST[apagar17]) { 
 $a- exec("sudo sh /var/www/rele/gpio/17/apaga.sh");
 echo $a;
 }

 if ($_POST[parpadear17]) { 
 $a- exec("sudo sh /var/www/rele/gpio/17/parpadea.sh");
 echo $a;
 }
// Fin de las funciónes del pin GPIO 17
?>

Debemos crear estos tres scripts en bash para encender, apagar y parpadear; estos scripts están alojados en /var/www/rele/gpio/17/.

#!/bin/bash
#enciende.sh

#Exportamos el PIN deseado
echo 17 > /sys/class/gpio/export

#Establecemos la direccion (salida o entrada)
echo out > /sys/class/gpio/gpio17/direction

#Activamos la salida del rele dandole un valor de 1 al bit
echo 1 > /sys/class/gpio/gpio17/value
#!/bin/bash
#apaga.sh

#Apagamos la salida del rele
echo 0 > /sys/class/gpio/gpio17/value

#Liberamos el PIN asociado
echo 17 > /sys/class/gpio/unexport
#!/bin/bash
#parpadea.sh

#Exportamos el PIN deseado
echo 17 > /sys/class/gpio/export

#Establecemos la direccion (salida o entrada)
echo out > /sys/class/gpio/gpio17/direction

#Activamos la salida del rele dandole un valor de 1 al bit, y lo desactivamos 5 veces
echo 1 > /sys/class/gpio/gpio17/value
sleep 1
echo 0 > /sys/class/gpio/gpio17/value
sleep 1
echo 1 > /sys/class/gpio/gpio17/value
sleep 1
echo 0 > /sys/class/gpio/gpio17/value
sleep 1
echo 1 > /sys/class/gpio/gpio17/value
sleep 1
echo 0 > /sys/class/gpio/gpio17/value
sleep 1
echo 1 > /sys/class/gpio/gpio17/value
sleep 1
echo 0 > /sys/class/gpio/gpio17/value
sleep 1
echo 1 > /sys/class/gpio/gpio17/value
sleep 1
echo 0 > /sys/class/gpio/gpio17/value

#Liberamos el PIN asociado
echo 17 > /sys/class/gpio/unexport

Cuando ya tengamos los scripts y el index.php en sus respectivas rutas, deberemos poder visualizar la siguiente jerarquía de directorios en el servidor web.

Captura de pantalla de 2014-11-08 16:27:54En esta ocasión también debemos hacer sudoer al usuario www-data; para lo que ejecutaremos sudo visudo en la terminal, y lo añadiremos bajo el usuario pi para que el usuario www-data pueda controlar los pines GPIO.

#includedir /etc/sudoers.d
pi ALL=(ALL) NOPASSWD: ALL
www-data ALL=(ALL) NOPASSWD: ALL

Ahora probaremos los tres botones para verificar que todo está funcionando correctamente. Una vez funcione, y los leds de la placa de relés se enciendan, escucharemos el «click/clack» que emiten al abrir y cerrar el circuito.

Captura de pantalla de 2014-11-08 13:30:46

Aplicación web para controlar el relé.

Vamos a ver como conectarlo a una lámpara o cualquier otro electrodoméstico para poder controlarlo desde cualquier dispositivo con navegador web.

El esquema para conectar el relé entre un interruptor magnetotérmico y un enchufe de la pared de nuestra casa sería el siguiente; para los esquemas he utilizado la imagen de un relé de un solo canal, que en este ejemplo es el canal IN 8 de la placa de ocho canales.

rele5vmagnetotermico

Esquema de conexiones en el cuadro eléctrico de una casa.

Para la prueba de concepto, voy a utilizar el siguiente esquema con un enchufe que tuve que cambiar en una habitación de casa, y una lámpara. El enchufe de abajo es el de la pared, y el de arriba el que he montado en esta prueba para conectar en el la lámpara; el relé actúa como interruptor.

rele5venchufe1

Esquema utilizado en esta prueba.

En el relé hay tres puertos de conexión eléctrica para cada salida: COM, normalmente abierto y normalmente cerrado. En COM debemos conectar el positivo de la toma eléctrica que alimentará el electrodoméstico, y en uno solo de los otros dos el cable que va al positivo del electrodoméstico. El negativo se conecta directamente de la toma eléctrica al electrodoméstico.

PB080196

Conexiones de un relé.

Dependerá de si lo conectamos a normalmente abierto, o a normalmente cerrado si el electrodoméstico quedara encendido o apagado en caso de apagarse la Raspberry.

En este ejemplo el relé está conectado en normalmente cerrado, para que si se apaga la Raspberry, los enchufes funcionen; si lo conectásemos en normalmente abierto, al desconectar la Raspberry la lámpara no podrá encenderse pues el circuito quedaría abierto; vamos a entenderlo mejor con un vídeo.

Si te ha gustado puedes seguirme en Twitter, Facebook, Google+, Linkedin, o compartirlo con los botones ubicados debajo de esta publicación, si tienes cualquier pregunta o sugerencia no dudes en comentar.

Ayudanos a llegar a más lectores Share on LinkedIn
Linkedin
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on Google+
Google+
Email this to someone
email

35 pensamientos en “Raspberry PI – Implementando un sistema domótico asequible [Parte I]

  1. Encender y apager LEDS desde internet

    Buenos días, Ante nada, lo menos que puedo decir, es gracias, estupendo
    el tutorial, otra ves, bravo y gracias.

    Una pregunta, no entiendo exactamente como y donde debo instalar los sripts,
    mi intención es disponer de una pagina WEB, en realidad, no se como llego a
    trabajar con PHP y WEB, como la del ejemplo, vía un PC, conectado a Internet
    en cualquier sitio poder activar los diferentes LEDs o relays, no se como hacerlo,
    de antemano y por supuesto, mil gracias por la ayuda eventual.

    Amigablemente Ignacio desde Bélgica

  2. Los scripts y el index.php solo tienes que copiarlos en /var/www/rele como se indica el tutorial, cada uno tiene su ruta.

    index.php en /var/www/rele/index.php
    apaga.sh, enciende.sh y parpadea.sh en /var/www/rele/gpio/17/

    De momento como está funciona para un relé conectado al GPIO 17, en unos días terminaré con la segunda parte para hacer funcionar las ocho salidas.

    Para acceder desde internet deberías configurar tu router para que redireccione las peticiones entrantes por el puerto 80 hacia tu Raspberry PI. Desde la opción NAT o Virtual Server del router puedes configurarlo.

    Finalmente para acceder mas fácilmente puedes registrarte en NoIP y obtener un dominio gratuito asociado a tu ip pública del tipo casa.no-ip.biz.

    PD: Asegúrate de proteger muy bien esa página para solo tu tener acceso a ella.

    Muchas gracias por comentar.

    • Buenas tardes,

      Soy yo que le agradezco, por sus consejos, por la respuesta tan rápida y por su gentileza, es un placer, le deseo un buen 2015

      Amigablemente,

      Ignacio Rubin desde Bélgica

  3. Buenas tardes,

    Todo funciona perfectamente, aunque solo por lan o con Xming por ssh, no logre conectarme a distancia, ‘con otro PC vía Internet, tengo noip y también dyndns, y no lo logro hacer funcionar, si tienes alguna idea te la agradezco de antemano,

    Un fuerte saludo y una ves mas, gracias

    Ignacio

    • Me alegro de que finalmente funcione, pero para conectarte desde Internet que protocolos estás utilizando?

      Tienes que abrir los puertos de los servicios que vayas a utilizar en el router que te da acceso a Internet (HTTP puerto 80, HTTPS puerto 443, SSH puerto 22, etc) y hacer Port Forwarding hacia la IP privada de Raspberry PI en el router que te da acceso a Internet.

      Finalmente ya solo tendrás que iniciar la conexión desde otra red apuntando hacia la IP pública de tu router, puedes probar desde el 3G de tu móvil.

      Si esto funciona, ya puedes proceder a configurar NoIP o Dyn para acceder desde un nombre fácil de recordar en lugar de una IP pública; además si instalas NoIP en Raspberry, en la web de NoIP se cambiará automáticamente tu IP pública cada vez que esta cambie para tu router.

      Para mayor seguridad, sería mejor si configuras una VPN para realizar las conexiones hacia la red de tu casa, y canalizas a través de ella todo tu trafico.

  4. Hola, tengo una pregunta tengo un led en el gpio4, sudo echo 1 > /sys/class/gpio/gpio4/value este me apaga el led, y con sudo echo 0 > /sys/class/gpio/gpio4/value, me prende el led, deberia de ser al revez, sera que realice algo mal?.
    coloque los archivo me conecto via web, cuando presiono cualquier boton (encender, apagar, o parpadeo) solo apaga el led, pero no enciende, ni tampoco el de parpadeo.
    agradezco la ayuda que me puedan brindar.

    • Hola, en primer lugar muchas gracias peor tu pregunta 🙂

      Puedes seguir el tutorial paso a paso, el relé tiene 3 tipos de pins:

      – VCC -> Alimentación (PIN 5V RPI)
      – GND -> Pin GND RPI
      – IN -> Son las entradas, y dependiendo de si su estado es HIGH o LOW el relé se encenderá o apagará.

      En el ejemplo uso IN8, solo debes cambiarlo por IN0 o IN1 de tu relé y como comenté antes seguir el tutorial 🙂

      PD: Asegurate de que sean optoacoplados, los de la foto lo son.

      Saludos, espero haberte ayudado.

  5. Fiz tudo que recomendado conforme acima, quando escrevo os comandos no terminal, funciona, porém, se pego o arquivo enciende.sh e mando executar no terminal não funciona e nem via página index.php

  6. Antes que nada, muchas gracias por tus explicaciones, muy buenas.

    He seguido tus indicaciones y puedo prender la bomba de aire de una pecera a distancia.

    El problema que tengo es que me falta poder corroborar el status del pin (True o False)

    ¿Como puedo hacer para que me aparezca este dato en la misma página que hice?

    Está armada siguiendo tus indicaciones, prende y apaga el relay correctamente.

    • Hola Teodoro,

      Esto que comentas es algo que muchos lectores preguntan, por lo que estoy preparando una siguiente parte del tutorial en el que programaremos un indicador de estado de los pins GPIO en mis ratos libres.

      En cuanto esté terminado lo publicaré en el Blog.

      Hasta pronto.

  7. Antes que nada muchisimas gracias por tu blog.. es espectacular. Yo por mi parte me he comprado todo lo necesario, he seguido todos tus tutoriales, pero a la hora de hacer funcionar la placa de 8 reles, algo me falla.

    La pregunta es como se si tengo la placa octoacoplada?? es que parece que no le llega la corriente suficiente para activarla. Mis conexione son:

    5v -> VCC (de la placa)
    GND (p3) -> GND (de la Placa)
    GPIO4 -> IN4 (de la placa)

    Cuando activo el gpio con el script, se enciende por un momoento el diodo led de control, pero no se queda encendido. Entiendo que es porque el gpio se activa a 3,3 voltios y los reles son de 5v. Sin embargo juraria que tenemos la misma placa así que tiene que ahber una forma de hacerlo funcionar no?

    Apreciaria cualquier tipo de comentario, la placa de los reles es la siguiente
    (8 relays Module srd-05VDC-SL-C)

    Muchas gracias por todo

  8. Hola Loty,

    La mayoría de las placas de relés compatibles que se comercializan para microcontroladores vienen ya optoacopladas, puedes comprobar si lo es en las especificaciones o buscando los optoacopladores en la placa; el que hace referencia al numero de serie que has comentado si que lo és.

    Efectivamente estas placas se alimentan con 5V, pero la salida puede ser activada también mediante actuadores de 3,3V como los GPIO de la Raspberry PI.

    De todos modos el problema parece ser falta de alimentación, por lo que cambiar el transformador de la Raspberry por uno de 2A o alimentar de forma externa el relé podría ayudar.

    Saludos y hasta pronto.

    • Hola!
      Muchisimas gracias por tu pronta respuesta. He hecho las pruebas directamente sobre la placa de reles (quitando la RASPBERRY PI), para ver si era que la placa la tenia mal. He conseguido un alimentador externo de 5V a 2A.

      Conecto el GND a menos del alimentador el VCC al + del alimentador y el IN4 tambien al +. y ahi.. FUNCIONA!! el rele hace click y el LED indicador se queda encendido, he hecho al prueba con una lampara de 220v y todo sigue funcionando. El problema surge con la RASPBERRY PI.

      He conectado la placa al alimentador externo «+» al VCC «-» al GND y al IN4 le he conectado el gpio4 de la RASPBERRY, y ahi cuando activo el GPIO, nada pasa. He medido el GPIO y da 3,3 v. He leido en otros sitios y se dice que es porque debo conectar el jumper VCC-JCC de otra forma. No se que hago mal. Puede ser que yo active los gpio a traves de BASH?? Es necesario para que funcione sobre la placa de reles usar la libreria de python de GPIO??

      Muchas gracias por cualquier aporte

  9. Olá, estava com um problema para apagar a luz com relé, utilizando o código deste tutorial, conseguia acender normal, mas pra apagar não apagava e o relé ficava armado, só desarmando quando eu desconectava o cabo entre o relé o raspberry. Depois de várias tentativas consegui fazer apagar juntando os codigos deste tutorial com o codigo do tutorial de led para apagar. ficando desta formam uma parte do código: if ($_POST[apagar17]) {
    $a- exec(«sudo python /var/www/AcenderWebRele/apaga3.py»);
    $a- exec(«sudo echo 17 > /sys/class/gpio/export»);
    $a- exec(«sudo echo 0 > /sys/class/gpio/gpio17/value»);
    $a- exec(«sudo echo 17 > /sys/class/gpio/unexport»);
    echo $a;
    }

  10. Buenas tardes desde México, mi nombre es Enrique, estoy interesado en la parte de implementar domotica con raspberry esto derivado de un proyecto escolar, en los tutoriales mencionas que debemos de tener linux para lo cual no conozco mucho, es posible desarrollar el proyecto, tanto la página web como la programación necesaria en el raspberry con windows?, el servidor web que mencionas debe instalarse en la misma raspberry o donde?, si la cantidad de dispositivos que quiero controlar sobrepasan la capacidad de una raspberry 3 normal que ocuparia hacer, otra raspberry o existe algo que me aumente la capacidad?, en caso de ocupar otra raspberry como controlaria ambas con la misma aplicación web?.

    Espero y puedas ayudarme con esto.

    Saludos.

  11. Hola como estas? Verdaderamente es muy interesante y util las entradas en tu blog. Estoy iniciando un proyecto similar a este y tengo una consulta:

    Materiales que tengo:

    – raspberry pi 3
    – Powerbank tplink
    – trafo corriente de raspberry
    – Modulo rele (igual al tuyo de 8 canales)

    La idea es poner una entrada de electricidad y que cuando exista electridicad funcione la raspberry y alimente los canales del modulo de rele para encender/apagar equipos, pero, cuando no haya electricidad (corte de luz) la raspberry (sin modulo de rele) siga funcionando con el powerbank (hasta agotar bateria pero ya lo probe y aguanta unas 6 horas).

    El powerbank es este:
    http://www.tp-link.ec/products/details/cat-5689_TL-PB10400.html

    Desde ya muchisimas gracias por tu ayuda!!!

  12. buen dia, primero que nada disculpe por revivir un tema antiguo, tengo una duda…. pretendo activar 4 focos diferentes en mi casa para un estudio privado que tengo de fotografia, mi idea era hacerlo desde una pagina web local, usando una pantalla touch de raspberry para interactuar… que me recomiendas

Deja un comentario

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

*