Controlando un Relay con Arduino

En algún momento el Arduino debe controlar algo mas que LEDs. En esta oportunidad hicimos una prueba clásica con materiales fáciles de encontrar en Chile.

 Cicuito basico para el control de 1 relay
Cicuito básico para el control de 1 relay

La prueba que explicamos en esta entrada consiste en hacer operar un relay para controlar una carga de mayor potencia, como una ampolleta.

Atención: El trabajo con alta tensión es potencialmente muy peligroso, recomendamos leer este artículo completamente, (incluyendo la bibliografía) antes de realizar una implementación real de un circuito

Tras el salto la información completa para controlar un relay desde tu Arduino

 

Materiales

  • Diodo 1N4002
  • Transistor 2N2222
  • Relay 5V
  • Arduino Uno R3
  • Cable USB
  • Resistencia 1 KΩ
  • Conectores
  • Protoboard
  • Cables
  • PC con Arduino IDE
  • Base ampolleta con enchufe

 

Sobre el Relay

Un relay es un dispositivo que permite controlar una cargas de un voltaje mayor en base a señales de baja tensión. En este caso usamos un Relay de 5V

Para la parte de baja tensión o circuito de disparo cuenta con dos pines, entre ellos hay una bobina interna. Los pines de alta tensión, depende de las especificaciones del relay, pero en nuestro caso consta de tres conectores, un pin COMUN un pin NO (normalmente abierto) y otro pin NC (normalmente cerrado)

Entonces, para el relay que usamos, la descripción de los pines es la siguiente; 2 Pines son para el circuito de baja tensión (circuito de disparo), 3 pines para alta tensión,
1 pin es común
1 pin en estado NO (normalmente abierto)
1 pin en estado NC (normalmente cerrado)

Este modelo se denomina relay SPDT, es decir, el pin COMÚN se denomina SP (Single Pole) y los 2 dos contactos se llaman DT(Dual Throw)

El relay se aprecia en la siguiente imagen con la indicación de los pines como se conectan en el circuito.

 

Vista inferior del relay. Se indican lo pines.
Vista inferior del relay. Se indican los pines en relación al circuito que usamos.

La vista superior del relay nos indica sus especificaciones

relay_vista_superior

 

 

Procedimiento

Como primera etapa cargamos el sketch usando el PC cable USB y el Arduino. El programa es muy simple y consiste en una variación del «Hola Mundo»

// Internet de las cosas / http://internetdelascosas.cl
//
// Sketch que permite activar un relay 

int relay = 2;

// La rutina setup se ejecuta al iniciar el Arduino o al presionar el boton reset
void setup() {                
// Inicialica el pin digital relay (que vale 2)  como salida
  pinMode(relay, OUTPUT);     
}

// La rutina loop se ejecuta en forma infinita despues de inicializado el Arduino
void loop() {
  digitalWrite(relay, HIGH);   // Envia el valor HIGH (5V) al pin digital relay
  delay(2000);                 // Espera 2 segundos
  digitalWrite(relay, LOW);    // Envia el valor LOW (0V) al pin digital relay
  delay(10000);                // Espera 10 segundos
}

 

Circuito

El circuito a utilizar es el siguiente

Conexion del relay con Arduino. Fuente http://www.ericforman.com/wp-content/uploads/arduinorelay.jpg
Conexion del relay con Arduino. Fuente pagina de Eric Forman

 

El diodo se encuentra en paralelo a la bobina con el cátodo hacia Vcc. La bobina esta conectada a Vcc y al Colector del transistor. El transistor tiene la Base conectada a una resistencia de 1KOhm y el emisor va a tierra.

En el circuito de alta tensión, por su parte, se conecta el pin COMUN hacia la carga y el pin NO hacia el positivo, para cargas de CC o hacia el enchufe, en el caso de CA

Veamos una  breve explicación sobre el diagrama de circuito.

Los relays necesitan mas potencia que la proporcionada por un pin de Arduino, por lo que se requiere un transistor para activarlo. En este caso usamos el conocido 2N2222. (tiene que ser del tipo PNP NPN, como se muestra en la figura)

El diodo 1N4002 previene FEM reversa (FEM, o Fuerza ElectroMotriz, reversa es el voltaje que se produce cuando varía la corriente a través de una bobina)

La implementación es como se ve en la figura

 

El cicuito disparador consta de un diodo en paralello con la bobina y con el colector del transistor conectado aun extremo de la bobina. El relay se encuentra a la derecha
El cicuito disparador consta de un diodo en paralelo con la bobina. La bobina conectada a Vcc y al cloector del transistor con el colector del transistor.

 

Al conectar todo se puede probar el relay en»vacío», es decir sin carga, se escuchara un ruido como un click, que es el cambio de estado en los pines del relay.

Luego se puede conectar una carga real como una ampolleta. La carga se conecta hacia el pin COMUN y el pin NO se conecta al enchufe. Esto se muestra en la siguiente figura de CircuitLab

Circuito completo
Circuito completo

 

Bibliografía

How Relays Work
HobbyRobotics

Author: Manuel Carrasco

Ingeniero Eléctrico, Institutano, instructor certificado Cisco, en twitter @mcarrasco con comentarios y opiniones personales.

38 thoughts

    1. Estimado, Gracias por la consulta. Efectivamente este relay en particular se puede conectar a los 220V pero con una corriente menor a 5A. Esto significa que podemos operar con cargas pequeñas, como una ampolleta, sin problemas.
      Saludos
      M. Carrasco
      Co-founder
      http://www.iot.cl

  1. Hola buen dia!!!

    Me podrias asesorar de asesorar para la conexion de un relevador de estado solido, para controlar el encendido/apagado me una bomba de agua a 110v, de antemano muchas gracias,

    1. Por supuesto que podemos ayudarte! Por favor envíanos un mail para coordinar una reunión para que puedas detallar nos cuales son tus requerimientos con más detalle y darte una orientación sobre cómo continuar.

      Saludos

      Manuel Carrasco
      Co-founder
      http://www.iot.cl

  2. Buen articulo.

    Me surge una duda. ¿Se podría usar este mismo circuito para un relé de 12vdc con una fuente externa de 12vdc uniendo el GND de esa fuente y el GND del Arduino?

    También veo un fallo en la explicación del circuito.
    Donde pones:
    «…En este caso usamos el conocido 2N2222 (tiene que ser del tipo PNP)…»
    El 2N2222 es NPN y en el esquema, el símbolo del transistor es de un NPN.

    Un saludo.

    1. Estimado itxu46 🙂

      Muchas gracias por el aviso! ya corregimos la edición, efectivamente para este circuito usamos un transistor del tipo NPN.

      Por la alimentacion del relé es tal como indicas, se puede activar con una fuente de 12V, teniendo presente que la conexión a Tierra es común

      Saludos

      @mcarrasco
      Co-Founder http://www.iot.cl

    1. Claudio

      Una estufa eléctrica consume mucha energía, debes revisar en las especificaciones de la estufa cuantos amperes consume y comprar un relay que tenga una capacidad mayor. Si el relay no es el adecuado puedes provocar un incendio así que cuidado con elegir un relay de poca capacidad.

      Saludos

  3. hola disculpa, ojala y puedas ayudarme, ya que usas el arduino y lo relays, quisiera saber si sabes como hacerle para hacer el tipico sistema de apagar las luces aplaudiendo, hay muchos tutoriales pero aun me quedan dudas, especialmente en lo electrico.

    estoy viendo este tutorial en ingles pero en los comentarios se añade que se puede mejorar para protejer el arduino o tambien el codigo:

    http://www.instructables.com/id/Arduino-Clap-Sensitive-Light-Control-The-Clapper/?lang=es

    ojala que me puedas o puedan ayudar con esto. gracias de antemano.

    1. Hola, la verdad es que el ejemplo que envías no es el mejor, tienes el sensor? por lo que dicen las especificaciones entrega una salida análoga, pero no especifica los valores. El programa debería definir un umbral, medir la salida y si el umbral es sobrepasado activar la salida (relay). El ejemplo que envías no tiene un umbral y si te fijas bien el autor indica que para las pruebas reemplazara el sensor un un simple interruptor. Lo mas difícil del proyecto es calibrar el sensor. Con respecto a lo eléctrico, en este mismo tutorial esta todo explicado, tienes alguna duda con nuestro tutorial? Saludos

  4. Hola buen día. Primero que nada te Felicito por tan buen Articulo, y en segundo te molesto con algo de ayuda. Pues bien lo que quiero es hacer funcionar un Carrito de RC (algo viejito) por medio de Arduino (y un modulo Bluetooth). Tengo pensado utilizar un ‘Puente H’ (Integrado L293D), el problema es que para el movimiento de Dirección el carrito NO usa un motor, si no una Bobina (lo puedes ver en esta imagen: http://static2.cochesrc.com/gallery/files/4/1/3/1/1/6/carro_nikko_cheetah.jpg).
    Por lo que viendo tu ejemplo ¿Tendría que usar 2 Diodos en Paralelo pero en Sentido Opuesto?, ¿Y además debo usar 2 Transistores, uno en cada Extremo de la bobina?, y además de eso ¿que otras «Precauciones» debo tomar? la verdad es que soy novato en Electrónica y en Arduino, así que tu ayuda seria muy importante para mi, para que no eche a perder algo (o Todo jejeje). Espero no causarte molestia, de antemano muchas gracias por tu respuesta y tu ayuda, saludos cordiales

    1. Alejandro, la principal precaución es siempre trabajar con baterias, nunca enchufar el circuito a la corriente. Me parece que usar dos transistores es mas adecuado que dos diodos en paralelo. En todo caso lo mas recomendable es simplemente probar, Arduino es una plataforma para hacer prototipos por lo cual es muy facil probar ambos circuitos.

      Saludos

  5. hola excelente aporte el que realizas, nesecito ayuda con un circuito para accionar un rele por medio de bluetooth, el rele debe funcionar como pulsador ya que lo voy a conectar al pulsador de la central del porton electrico. espero me puedas ayudar, gracias

    1. Jorge

      Porque has decidido usar Bluetooth? existen soluciones bastante baratas y mucho menos complicadas para pulsadores usando controles remoto de radiofrecuencia. Revisa esa opcion.

      Saludos

  6. Hola:
    Muy bueno el articulo, sobre todo para los que aun no sabemos nada sobre este mundo de arduino.
    Queria solicitar tu ayuda. Necesito hacer funcionar una sirena electrica activada con una señal externa de 12v, la idea es que cuando llegue esa señal de 12v, el arduino haga que la sirena suene tres veces y luego pare. Ademas que a cierta hora, se active automaticamente y solo suene una vez. Soy bombero y es para automatizar nuestra sirena institucional.
    Gracias totales

    1. Daniel, te contactare por interno, lei este mensaje un dia antes del terremoto en Chile, pero no pude contestarte.
      Espero que todo est bien por tu lado!
      Un abrazo!
      JZ

  7. Saludos. buena explicacion. tengo una pregunta. Como puedo encender una lámpara por media hora empleando el relay y el arduino mega

    1. Alodis, con este mismo ejemplo, simplemente debes incrementar el valor de delay a delay(1800000); (media hora tiene 1.800.000 milisegundos)
      Saludos

  8. Hola:
    Excelente articulo, sobre todo para los que aun no sabemos nada de arduino.
    Como puedo conectar una bomba de 220 volt., al arduino, quiero hacer un proyecto que accione esta bomba y llene un estanque de agua, el cual tendrá sensores de nivel para que arduino encienda y luego apague esta bomba..

    agradeceré su ayuda

    1. Claudio, la bomba de 220v la debes conectar al relay. Los sensores deberian conectarse al Arduino pero no especificas si son Arduino compatibles.
      Saludos

  9. disculpa necesito realizar una alarma de temperatura con el sensor dht22 que me activara una alarma cuando la temperatura sobrepase los 28 y mínima los -4 lo tengo que hacer mediante un servidor .
    en pocas palabras necesito monitoriarlo a larga distancia por medio de una conexión ethernet desde una central y cuando sobrepase los 28 o los -4 grados centigrados me aparezca la alarma.
    ojala puedas ayudarme.

  10. muy buen aporte, yo comienzo con el uso de arduino, pero quisiera salir de una duda: puedo controlar la bobina de un rele de 12v con arduino, utilizando nada mas la activacion de la bobina y utilizar otra fuente para los pines 30 y 87.

    1. Edgard, las salidas de un Arduino solo entregan 5v, por lo que un rele de 12v puede que no se active o que sobre cargue la capacidad del Arduino.

      Saludos

  11. Un gusto saludarte y agradecerte posibilidad que me brindas de poder escribirte y plantearte mis dudas.
    Primero decirte que jamás he trabajado con Arduino ni menos usado rutinas de programación en microprocesadores ni nada parecido, pero tengo una necesidad puntual que resolver, la que paso a contarte a continuación:
    Tengo un cargador de baterías, el cual debo desconectar cuando el voltaje aplicado a las baterías llegue a los 42 voltios y parta cargando nuevamente cuando el voltaje descienda a 40 voltios; control que pretendo implementarlo con un relé que desconecte la entrada A.C. del cargador o que directamente desconecte el gate del SCR interno con que carga las baterías. Me dijeron que con una tarjeta Arduino puedo activar el relé midiendo un valor de tensión análoga por una de sus entradas y desactivarlo midiendo otro valor de tensión por otra de sus entradas análogas, imagino que la muestra de tensión debe hacerse a través de un divisor de tensión por el valor máximo que acepta la tarjeta, que según he leído es un máximo de 5Vdc.
    Compré una tarjeta Arduino Leonardo y una tarjeta de relés de la misma familia más cables en una partida súper arriesgada (ya que parto de cero) y necesito algún ejemplo de programación que se asemeje al control que necesito, de tal manera de empezar a experimentar en un Protoboard hasta lograr hacer funcionar mi proyecto.

    Muy agradecido de antemano por la ayuda que puedas brindarme, se despide cordialmente.
    Nayo.

    1. Nayo, la programacion es muy simple, y este ejemplo es exactamente lo que deseas hacer solo faltaria agregar un if que llame a las funciones que activan y desactivan el relay, ejemplo

      if (voltaje<40)
      enciende_cargador();
      if (voltaje>42)
      apaga_cargador();

      Lo mas complejo es medir la tension sobre las baterias (variable voltaje en el codigo ejemplo), como bien dices Arduino solo soporta 5Vdc, por lo que necesariamente debes usar un divisor de tension o conversor de tension.

      Saludos

  12. Necesito AYUDA urgente 🙁 no puedo, compre un real especial para el arduino, y un componente de Bluetooth para poder desde una app de android encender y apagar la cafetera cuando yo lo desee, Sin embargo el código que posee no me lo corro como hago para que el BT abra el relay para que pase corriente cuando yo lo deseo?

    1. Andrea, aun no tenemos poderes que nos permitan ver a distancia y saber que fue lo que exactamente compraste, si nos envias una URL o compartes el codigo que estas probando en GitHub podriamos ayudarte.

      Saludos

  13. Pingback: elektra dani
  14. Hola muy buen blog, me preguntaba si podrias guiarme para realizar la conexion desde la salida arduino hacia un motor 230 V, 50 Hz, 300 W, que tiene un rele de activacion de D3V-165-1A5.
    Porfavor se agradeceria la ayuda.

    1. Felipe, por la descripcion del rele que indicas (3V) deberias colocar un regulador de voltaje entre el Arduino y el rele o usar un Arduno mini que opera con 3V.
      Saludos
      JZ

  15. quiero activar un modulo de 8 reles pero con un teclado matricial de 4 *4 que cuando presione el numero 1 se active el relay 1 y a si sucesivamente hasta ahora hice un código que me funciona pero me lo deja activado el relay lo que quiero es que lo active con el pulso y luego lo desactive cuando lo suelte

  16. Hola muy buen articulo. Le hago una consulta porque estoy empezando como el tema arduino y relé. Se puede conectar un sensor de puerta al relé de tal forma que se active cuando la puerta se abre. Y luego con arduino consultar el estado del Relé ?

    Gracias
    Felix

    1. Hola Felix, si, lo que propones se puede hacer. Como deseas consultar el estado del rele usando Arduino? via internet? via puerto serial?
      Saludos.

  17. Se puede controlar la variacion de tiempo(en este caso el delay)desde un potenciometro?. Por ej: entre 8 y 12 seg
    Gracias

Deja una respuesta

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