viernes, 26 de julio de 2013

Control de relé mecánico

... apagando y encendiendo de forma automática

Hace un tiempo Xesco me comentó que tenía un problema con su ruter ADSL, se le queda "pillao" y la única solución es reiniciarlo. Cuando no hay nadie en casa es un fastidio perder todo un día de descargas y demás frikerias. Poco después, el Borre me comentó que tendríamos que poner un arduino controlando la alimentación de los primarios, para solucionar posibles caídas de la línea. La solución es la misma en los dos casos: un relé y RaspberryPi.

Un relé es un interruptor accionado por una corriente de baja tensión. En nuestro caso usaremos poco menos de 5V para alimentar el relé, que cerrará/abrirá un circuito de 220V. Este es nuestro relé:
Cuesta 4€ en Amazon y trae dos módulos, podemos controlar 2 circuitos independientes de 220V. Por favor FÍJATE MUY BIEN EN LOS LIMITES ELÉCTRICOS DEL RELÉ, no querrás quemar tu RaspberryPi ... o tu casa.

Por partes:

Esta parte es la que se encarga de conmutar el circuito de alta tensión, recuerda dos circuitos:
Vamos a fijarnos en el etiquetado como K1. Las líneas indican, estando en estado de reposo, si el circuito esta abierto o cerrado. Así que:
Si cerramos el circuito entre 1 y 2, el circuito estará normalmente abierto. Si cerramos entre 2 y 3 el circuito estará normalmente cerrado. Si cerramos entre 1 y 3 ... no hacemos ná.
La otra parte que nos interesa del relé es esta:
En GND conectamos la tierra (0V) en Vcc tenemos que conectar 5V y para actuar en K1, conectaremos IN1 a un GPIO. Como tenemos pocos recursos, alimentaremos el relé con menos voltios, los que nos de el RaspberryPi.

El circuito

Nuestro circuito queda de la siguiente forma:

Más simple no puede ser, tenemos el circuito de 220V normalmente cerrado y lo conmutaremos con el GPIO 18 (gracias por la observacion @lopz)

Pruebas

Para la demostración, he cambiado el enchufe hembra, por un casquillo con su bombilla correspondiente, es exactamente lo mismo y se ve mucho más claro. Para el que no le quede claro, normalmente cerrado significa esto:
Como veis, el circuito esta cerra sin necesidad de actuar sobre el relé. Terminamos de conectarlo todo.
En el RaspberryPi instalaremos wiringpi y no hay que instalar nada más. En el Raspberry ejecutamos:
gpio -g mode 18 out

y ahora para apagar la luz ejecutamos:
gpio -g write 18 0

y para encenderla:
gpio -g write 18 1

y para apagar la luz ejecutamos:
gpio -g write 18 0

y para encenderla:
gpio -g write 18 1

apagar la luz ejecutamos:
gpio -g write 18 0

y para encenderla:
gpio -g write 18 1

apagar la luz ejecutamos:
gpio -g write 18 0

y para encenderla:
gpio -g write 18 1


apagar la luz ejecutamos:
gpio -g write 18 0

y para encenderla:
gpio -g write 18 1

apagar la luz ejecutamos:
gpio -g write 18 0

y para encenderla:
gpio -g write 18 1



54 comentarios:

  1. Si no quieres cargarte el RASP, usa un transistor para controlar la entrada de 5v para activar el rele.

    ResponderEliminar
    Respuestas
    1. En las pruebas realizadas no ha sido necesario el transistor. El relé solo actuaría durante 10 segundos. De todas formas he realizado pruebas durante minutos y no he notado nada raro. También he probado hacer 10 conmutaciones por segundo y también aguanta. Supongo que habrá que tener especial cuidado con las Raspberrys más antiguas, las nuevas traen algo más de protección.

      Eliminar
    2. No es necesario nada de eso, por eso viene un módulo completo para que conectes y funcione sin problemas ni añadidos extras, además en la placa se ve claramente que usan un fototransistor JC817 [1] que es el que se encarga de eso y otras cosas mas, además cerca del relay tenemos un diodo que es el que proteje al JC817 de las corrientes inversas que genera la bobina, y si no me equivoco 2 diodos led que indican cuando metes tensión por IN1, IN2, advierto que soy un novato en la electrónica y puedo estar hablando tonterías. Saludos

      [1] http://www.yong-lin.net/userfiles/JC817.pdf

      Eliminar
  2. Hola,
    Yo estoy usando un relé de Grove system (usado para arduinos por ejemplo): http://www.seeedstudio.com/wiki/File:Twig-Relay1.jpg
    En españa es carisimo (8€), fuera lo he encontrado a 3USD (sig)
    ¿también necesitaría un transistor?

    ResponderEliminar
  3. Lo que comenta del transistor es para evitar las corrientes inducidas inversas del solenoide del relee, usando un transistor evitas que las rasp tenga que soportarlas, que no notaras nada pero con el tiempo puede estropearla.
    Es fácil hacer el apaño con un transistor, pero si se os complica podéis usar un diodo de protección entre el pin de la rasb y el rele e igualmente os quedara protegida y debería funcionar.

    ResponderEliminar
    Respuestas
    1. Hola "Anónimo":

      Estoy muy pez en electrónica, podrías poner esquemas del diodo y transitor.

      Gracias

      Eliminar
    2. Èsto con los módulos ya no se necesitan, vienen con todos los componentes necesarios para proteger la RPI, sólo en el caso de que tu mismo te diseñes la plaquita necesitarás poner protección para la RPI, si compran módulos es conectar y disfrutar.

      Eliminar
    3. No te equivoques. El transistor se usa para controlar diferentes tensiones, de los 3.3 dea raspberry a los 5 del rele. Para proteger de las corrientes inversas, se usa un diodo en paralelo con la bobina, haciendo un "bucle" para que estas corrientes vuelvan a passar por la bobina y no regresen al transistor. El diodo puede ser un 4007, y el transistor con un 2n2222 hay de sobras.

      Eliminar
  4. Mi pregunta es... ¿Entonces podriamos domotizar la casa con varios relés sin necesidad de dispositivos X10?

    ResponderEliminar
    Respuestas
    1. por supuesto, es lo que se usaba antes. El problema es que tienes que recablear mucho. Aunque si empiezas una instalación desde 0, puede resultarte hasta más fácil y por supuesto más barato. Tambien es cierto que con un relé de este tipo, sólo controlas el on/off no la intensidad.

      Eliminar
  5. Hola Juan:

    Una pequeña errata: Cuando dices que conmutarás con el PIN 18 en la imágen muestras conectado al PIN 12, sólo eso, lo digo por si alguien se guía más en las imágenes que en el texto, vamos, para uno nuevo al final terminar confundiéndolo más.. por lo demás es interesante el tema tengo montado lo mismo en casa y por el mismo tema, sólo que a través de SMS, porque ya si se cuelga el router no tendrás acceso a las RPI desde el exterior, saludos :)

    ResponderEliminar
    Respuestas
    1. gracias por la observación, ya lo he corregido. La idea es que conmute automáticamente, si detecta que se queda sin internet 5 minutos seguidos. Por sms es buena idea, e incluso si tienes Asterisk, por DTMF.

      Eliminar
  6. Hola Juan Mol, tambien estoy intentando hacer esto, y también tengo alguna dificultad, al final me matas jaja
    Verás, he seguido tus pasos al pie de la letra, y en principio no es nada complicado.
    Mi conexionado:
    http://imageshack.us/a/img850/5789/h8hy.jpg
    http://imageshack.us/a/img23/2246/9y1w.jpg

    Lo único diferente que tengo, es que por dos duros me compré el bus ese, para que fuera más cómodo experimentar

    Cuando enciendo el raspberry se enciende todo bien:
    http://img22.imageshack.us/img22/3585/t628.jpg

    Pero no consigo que el relé haga na de na... he puesto el un tester en el normalmente abierto, para cerrarlo desde la raspberry y no lo he conseguido... pensé que podría ser problema de que me estaba equivocando de gpio... así que hice esto:
    http://imageshack.us/a/img12/19/jdk4.jpg

    Estará roto el relé¿? :S

    PD: me he equivocado al postear, por que tengo todos tus tutoriales abiertos en pestañas!!

    ResponderEliminar
    Respuestas
    1. a ver ... por partes ...
      1- ¿has soldado la placa del relé al bus de prototipos? o_O
      2- ¿has probado el relé en normalmente cerrado totalmente desconectado del raspberry? Como hago yo aquí http://3.bp.blogspot.com/-y80MEBDXHt4/UfFlXaLN_YI/AAAAAAAADxE/yAPt5pdVRtY/s1600/IMG-20130725-WA0001.jpg
      3- ¿has soldado la placa del relé al bus de prototipos? O_o

      Eliminar
    2. Jajaja xD
      1.- no no, al bus de prototipos no he soldado nada, el bus lo puedo desconectar cuando quiera, lo que si he soldado es la plaquita azul (que está enchufada al bus) al relé, por que no tenia otra manera de hacerlo y me entró en ansia viva jajaja

      2.- sisi! normelmente cerrado funciona perfectamente! y si conecto el relé a la raspberry, y activo la salida, sigue estando normalmente cerrado, osea, no hace ná de ná :S

      Eliminar
    3. y seguro que el gpio hace lo que debe? prueba poner un led en ese gpio, a ver si se enciende. Hay que descartar primero problemas tontunos.

      Eliminar
    4. vale! lo hago esta tarde y lo comento. Una pregunta tonta... ¿entre el gpio y que puerto?
      ¿el GND o uno con tensión?
      No tengo ni idea realmente de como funciona :S

      Eliminar
    5. Ya me respondo yo, con el Ground. Acabo de verlo.

      Eliminar
  7. Pues sí, cuando activo una gpio, entre el pin que he activado y el pin Común tengo tensión, me tendré que comprar otro relé

    ResponderEliminar
    Respuestas
    1. no hombre, no creo que se hayan roto los dos ¿no? ¿as probado con el otro?
      Prueba una tontá: conmuta el relé sin el raspberry. Alimenta con 5v el relé, que esto si podrias sacarlos del raspberry, y haz la conmutacion cerrando con un circuito de entre 3'3v y 5v. Basicamente lo que hace el raspberry, sin el raspberry. Necesitaras una fuente de alimentacion o una de pc, que seguro que tendrás por casa.
      De mientras voy pensando más pruebas.

      Eliminar
  8. Hey! Yo estoy pensando en un tema parecido para resetar mi router automaticamente cuando se queda pillado monitorizandolo en la pi con nagios. ¿Alguna idea sobre como hacerlo?
    Felicidades por el blog.

    ResponderEliminar
    Respuestas
    1. claro, que el evento de ALARM ejecute un script que lo apague y lo encienda a los 10 segundos.

      Eliminar
    2. Prueba con algo así, lo he escrito sobre la marcha y no puedo probarlo.
      flock es para evitar que se ejecute 2 veces ( #sudo apt-get install util-linux-ng )

      Lo suyo sería ponerlo en el crontab.

      #!/bin/bash

      (
      # Wait for lock on /var/lock/.myscript.exclusivelock (fd 200) for 10 seconds
      flock -x -w 10 200 || exit 1 #sacado de aquí http://stackoverflow.com/a/169969


      wget -qO- www.google.es 2>/dev/null 1>/dev/nulli
      if [ $? -ne 0 ]; then
      sleep 60
      wget -qO- www.google.es 2>/dev/null 1>/dev/null
      if [ $? -ne 0 ]; then
      echo "reiniciando se ha dicho"
      gpio -g write 18 0
      echo "esperando 20 segundos a que se apague del todo"
      sleep 20
      gpio -g write 18 1
      sleep 300 #esperar 5 min antes de que pueda ejecutarse a través del cron
      fi
      fi

      ) 200>/var/lock/.myscript.exclusivelock

      Eliminar
  9. Hola, segui sus manuales y consegui esto http://www.youtube.com/watch?v=D-X8d-udhEw, gracias y seguire con mas!!!!!

    ResponderEliminar
  10. Hola y felicidades por el blog.

    Estoy siguiendo el post y mi caso al hacer un "write en el 18" del modo descrito en este post se está escribiendo en el pin nº 12, que corresponde con el GPIO18. Lo digo por la corrección que parece haberse hecho en el esquema que ahora no sería correcta. Un saludo.

    ResponderEliminar
  11. Hola, una pasada tu bolg, ya he utilizado algunos de tus Scripts para otros propósitos en mi NAS casero como el de las alertas, el de enviar twetts etc...., por fin tengo mi raspberry pi, y una de las cosas que tengo en la cabeza es controlar la temperatura de una habitación con un pequeño calefactor (1500w) que se encienda y se apague según un sensor de temperatura controlado todo ello con la RSPPI, tengo el sensor (es USB, para quitarme de compilaciones dejo el enlace a Amazon, http://www.amazon.es/gp/product/B00CKIEZCO/ref=ox_sc_act_title_4?ie=UTF8&psc=1&smid=A1G6Y1F6D6ZP29) y me falta el tema del Rele, partiendo del tema que no tengo mucha idea de electricidad ni electronica, me gustaría saber si con este relé no tendré problemas para encender y apagar el pequeño calefactor de 1.500W, sin peligro, para la RaspberryPi y mi casa en general ;).

    Muchas Gracias

    ResponderEliminar
    Respuestas
    1. el rele del post es el mas malo que existe, posiblemente te sirva, pero yo pondria algo un poco mas "serio". Como cualquier cacharro electrico, un rele tiene valores de voltaje e intensidad maximo y minimo, fijate bien para evitarte problemas.

      Eliminar
    2. Muchísimas gracias por contestar, a que te refieres con "algo un poco mas serio" (se admite sugerencias)?, calculando la intensidad de corriente i=W/v está en torno a los 6,8A, no? y según veo en la imagen aparece 10A 250VAC, (insisto que no controlo casi nada del tema y no se si hay que tener en cuenta algo más para hacer este calculo)

      Eliminar
    3. ponle uno de 20A mínimo, no te la juegues, a lo mejor te cuesta 9€ un relé de 20A. Un calefactor conectado a un mecanismo que tiene un corto ... es algo muy serio. Yo diría que el relé tiene tiene que estar al 33% de capacidad, para hacer pruebas por supuesto ponle uno barato, pero cuando lo pongas en producción, no te la juegues.

      Eliminar
    4. Muchas gracias, lo difícil será encontrarlo, sobre todo por el tema de la protección, lo mas parecido es esto; http://www.bricogeek.com/shop/kits-electronica-para-montar/427-kit-rele-20a.html y me lo tengo que montar.

      Por cierto, ya aprovecho, tengo la cámara NoIR para conectarla a la Raspberry Pi, tienes algún post al respecto? Sobre todo para el tema de streaming lo que he visto, así por encima, es para una WebCam, no?

      Eliminar
    5. de la NoIR, no, tengo de la no-NoIR y no, no es una webcam, es un inventito con muy mala leche, como comento en:
      http://rsppi.blogspot.com.es/2013/08/streaming-de-video-desde-raspberrypi.html
      y aquí:
      http://rsppi.blogspot.com.es/2013/08/videocamara-de-seguridad-motorizada.html

      Eliminar
  12. Tienes un error importante en el post.

    Si usamos el pin físico 18 se corresponde con el 5 de wiringpi o el 24 bcm.

    Por ello los comando correctos para activar/desactivar el rele son los siguientes:

    ***************************************

    gpio mode 5 out (activa modo out en el pin wiringpi 5, pin físico 18)
    gpio readall (permite leer el estado y correspondencias de todos los pines)
    gpio write 5 0
    gpio write 5 1

    o bien

    gpio mode 5 out
    gpio readall

    gpio -g write 24 0
    gpio -g write 24 1

    *************************************

    Estaría bien que lo corrigieras en el post, o bien cambiaras en el dibujo la conexión al pin físico 12, con lo que sí valdrían tus comandos.

    ResponderEliminar
    Respuestas
    1. Muchas gracias por aclararlo, ahora funciona :)

      Eliminar
  13. Por que no me funciona con un motor Dc conectado a una bateria?

    ResponderEliminar
    Respuestas
    1. Pero escuchas el "clack" del relé cambiando?

      Eliminar
  14. no... pero se enciende el led del rele y se apaga como en las fotos. lo que pasa qur el rele no hace su funcion.... no abre y cierra :(

    ResponderEliminar
    Respuestas
    1. eso es que o esta roto (esperemos que no) o no le esta llegando suficiente alimentación. Mira a ver si puedes darle un poco mas de "chicha"

      Eliminar
  15. Primero agradecerte el compartir esta informacion tan clara con todos los que estamos aprendiendo.

    Segundo queria preguntarte si tiene por lo menos un diagrama donde se le añada al circuito un interruptor para encender y apagar la bombilla (esto por si una persona quiere hacerlo sin el rele)

    Te agradezco de antemano la ayuda.

    ResponderEliminar
    Respuestas
    1. Te refieres a controlar un punto de luz con interruptor y relé al mismo tiempo?

      Eliminar
    2. Exacto, me imagino que debe de ser parecido a como funciona dos interruptores y un punto de luz (como los que se colocan al principio y al final de un pasillo).

      Pero aun estoy leyendo e investigando como se podría hacer ya que en google no he encontrado algo especifico con un relé y un interruptor al mismo tiempo.

      De nuevo agradezco toda tu ayuda

      Eliminar
    3. Es faaacil fácil. Lo primero es ver como es un esquema de conexión de "un punto de luz con dos interruptores" en lugar de interruptores, se usan conmutadores. En nuestro caso uno de los conmutadores es un relé.
      De esta forma controlas un punto de luz a mano desde un conmutador y por remoto con el relé, con la particularidad de que no puedes saber si la luz esta encendida o apagada, solo puedes conmutarla.

      Eliminar
  16. Hola, tengo una duda, los pines de 5V de la raspberry no son para alimentar la Raspberry?? o sirven tambien para alimentar cualquier circuito con 5V, pregunto porque tenia entendido que por esos pines se le pasa la energia a la Raspberry...como es el tema de esos pines en particular.
    Gracias.

    ResponderEliminar
  17. Hola,

    Muchas gracias por compartirlo. No me queda claro como es la conexión entre el relé, el dispositivo que se quiera enchufar y la red eléctrica. Y qué cables hacen falta para realizar la conexión entre ellos.

    Saludos

    ResponderEliminar
  18. Hola disculpa mi ignorancia.. que tipo de relee necesitaria para controlar por ejemplo la intensidad de la luz o de un motor? No necesitaria un shield que reciba los pin gpio del rele y salga por ethernet a la rasp? Soy novato . Gracias slds

    ResponderEliminar
    Respuestas
    1. hola, un relé no regula la luz, necesitas un triac y el circuito es un poco mas complicado, ya que usas pwm en lugar de 1 y 0

      Eliminar
  19. Hola, lo primero muchas gracias por compartir tus experiencias. Mi mensaje es referente a una duda que no sé ni como explicarla sin meter mucho la pata. Te explico.
    Lo quiero hacer que cuando suene el timbre de casa, en este caso es la puerta de arriba. El timbre lo tengo conectado a una caja dentro de casa. Mi intención es saber si puedo meter la raspi en medio, así cuando llegue la señal pueda por ejemplo, mostrar un echo "Llaman a la puerta"...Sería un ejemplo.
    Es posible recibir una señal como lo expuesto?
    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola, se me ocurren muchas formas de hacerlo. Lo más fácil puede ser que el pulsador del timbre, pulse además un botoncito (de estos chiquitines de electrónica) te cierre el gpio del Raspberry y ahí tienes tu señal. Esto mismo lo puedes hacer con un relé reed.
      No vayas a usar todo un Raspberry para esto, sería un desperdicio, llévate el cable (del botón o del reed) hasta donde tengas el raspberry. Si no puedes hacer esto, lo más fácil y barato es que uses un ESP8266, que cuesta 3€ y además esta de moda. Actuaría de la misma forma, con el botón o el reed y lo que hace es enviar la señal por wifi al raspberry, donde puedes instalar un servidor Mosquitto para estos menesteres.
      Cuando tenga tiempo, dentro de 6 ó 7 años, pondré varios posts del ESP8266.

      Eliminar
    2. Muchas gracias por la rápida respuesta. Intentaré investigar lo que me dices. Otra cosa,de igual manera podría utilizar el mismo mecanismo para saber si se pulsa el interruptor de una lámpara de mesita?. Que cuando pulsas el interruptor, este que llevan muchas lámparas, sepa que se ha accionado. Porque lo que yo quiero es saber cuando llega ese estado, no controlarlo desde raspi.

      Eliminar
    3. el de la lampara de la mesita te va a costar más, tienes poco espacio para trabajar. Un interruptor empotrado (el de la pared) tienes mucho más espacio para jugar. Pero por lo que mas quieras, estas tocando 220v AC y el raspberry trabaja a 5V CC, ademas de cargarte el invento te puedes llevar un par de calambrazos, toca con cuidado.

      Eliminar
    4. Sí, jejeje...solo es a modo de pruebas y de entender. Tengo el mismo relé que sale en tu ejemplo. Yo tampoco dispongo de mucho tiempo, trabajo+estudios+bebé son los responsables jejejej. Bueno, me conformo con saber que puedo hacer estas cositas. Muchas gracias, a ver si te animas a poner más ejemplos. Saludos!

      Eliminar
  20. Hola
    A mi me funciona se me activa el relé simplemente poniendo el pin del gpio mode out, apagángdose con in.
    Como tengo pocos conocimientos en informática y electrónica dudo que me funcione correctamente ya que
    gpio -g write XX 0
    gpio -g write XX 1
    no realiza nada.
    Muchas gracias
    saludos

    ResponderEliminar
  21. hola, me presento, somos dos personas que estamos intentando salir adelante, y se nos ha ocurrido una idea, el tema que que parte de esta idea pasa por poder controlar los reles conectados a las GIPO de la board ESP82662 directamente a través de la rapsberry Pi 3 ( con wifi incorporada) estamos buscando y haciendo muchas pruebas, pero hasta la fecha no lo conseguimos, no se si alguien por este foro lo ha realizado ya o sabe como realizar.
    Un saludos y mil gracias

    ResponderEliminar
    Respuestas
    1. Hola Manolo, eso ya lo tengo superprobado ;) me imagino que quieres decir esp8266, la diferencia con este post es que con el esp tiene que ser un rele no-mecanico. En mi caso tengo listo un codigo que al iniciar por primera vez crea un ap en el esp, te conectas a el via web y lo configuras (servidor, nombre...) una vez hecho esto, se conecta al wifi de tu casa y lo usas desde el rasp, movil o lo que sea, con la venjata añadida de mantener el interruptor de la pared, con lo que puedes conocer en todo momento el estado de ese punto de luz y conmutarlo por wifi o manualmente. La verdad es que me llevó un tiempo, pero me ha quedado muy bien. Estoy esperando a tener tiempo para subirlo todo al blog, pero como siempre no tengo tiempo :(

      Eliminar