Programar fácil con Arduino

Programar fácil con Arduino, entiende cómo funciona el mundo.

  • Blog
  • ¿Quién soy?
  • Podcast
  • Curso Arduino [GRATIS]
  • Curso Domótica [GRATIS]
  • Acceder
Usted está aquí: Inicio / Blog / Arduino / Relé y Arduino MKR1000, controla la luz de tu casa

Relé y Arduino MKR1000, controla la luz de tu casa

Comentarios(6)
Luis del Valle Hernández

Rele

Cuando queremos controlar elementos que están conectados a grandes voltajes, como por ejemplo una bombilla de nuestra casa, necesitamos de un componente que por un lado se conecte a la red eléctrica y por otro lado se pueda conectar a nuestra placa de Arduino y que esta controle esa conexión. Para ello disponemos de los reles, unos interruptores eléctricos que conmutan una red de alto voltaje (por ejemplo 220V) a través de un voltaje de control mucho inferior (5V de la Arduino UNO o 3.3V de la Arduino MKR1000). Con este ejemplo serás capaz de controlar cualquier luz de tu casa vía web con un relé y Arduino MKR1000.

La bombilla nos sirve a modo de ejemplo. Con un relé y nuestra placa de Arduino podremos controlar cualquier aparato eléctrico que tengamos en nuestra casa y dar un paso más a domotizarla.

¿Que es un relé?

Como ya te he comentado es un interruptor que podemos activar mediante una señal eléctrica. Un relé esta compuesto por una bobina que al circular una pequeña corriente (3.3V, 5V o 12V) genera un campo magnético y este a su vez hace mover una placa metálica abriendo o cerrando un circuito eléctrico independiente que es por el que circula un voltaje superior (220V).

Existen otros componentes para conmutar un circuito, como son los transistores, pero cuando vamos a trabajar controlando el flujo de tensión de circuitos de media y alta tensión lo debemos hacer con este componente. Los reles están diseñados para aguantar un voltaje alto ya que por un lado el circuito de baja tensión es independiente y por otro el de alta tensión consta de laminas de contacto que soporten grandes tensiones. Pero no todos los reles son iguales y nos tenemos que fijar en unas características para comprar el que necesitamos.

Que tipo de relé necesitamos

Si queremos un relé para nuestro Arduino UNO necesitaremos un relé cuya bobina se pueda excitar con 5V, si lo queremos para nuestra Arduino MKR1000 deberá ser de 3V. Puedes comprar el relé suelto, pero necesitaras para tu circuito un optoacoplador y un diodo. El optoacoplador es un componente muy interesante, hace las funciones de conmutador con un diodo emisor y un fototransistor ajustando la corriente que necesita el relé. También necesitaremos un diodo para evitar que los picos de voltaje del relé llegue a nuestro Arduino.

Pero ya existen reles ensamblados en circuitos impresos con estos componentes por lo que te sugiero que adquieras uno de estos. Cada fabricante pone los pines de conexión de forma diferente, así es que toma esta imagen como ejemplo aunque no variara mucho de tu relé.

  • Características relé

(Se puede utilizar un relé de 5V en la MKR1000 utilizando el pin 5V pero necesariamente la placa debe ser alimentada por USB o por el pin Vcc con una alimentación de 5V. Si trabajamos con una batería de 3.7V este pin sacara estos voltajes y no podremos excitar la bobina del relé de 5V)

Ejemplo propuesto

El ejemplo por el que yo aconsejo empezar es controlar una bombilla, ya sea un casquillo con una bombilla o una lampara de mesa. Es el ejemplo clásico pero con el podremos entender como funciona un relé. Este ejemplo lo vamos a hacer con nuestra Arduino MKR1000 y como lo que nos gusta en programarfacil.com es programar, este simple ejemplo lo vamos a transformar en controlar la luz de una estancia a través de una web.

Esto segundo que parece tan complicado, si lo hacemos con la Arduino MKR1000 y siguiendo nuestros consejos, se convierte en algo tan fácil como el primer ejemplo. Así es que vamos a ello!

(Si tienes un Arduino UNO o similar el ejemplo va a seguir siendo valido salvo que no podrás controlarla vía web, pero si entender el funcionamiento de un relé y como programarlo para utilizarlo).

Configurar Arduino MKR1000

Si todavía no has configurado el Arduino MKR1000, sigue estos artículos.

  • Configurar Arduino MKR1000
  • Configurar la WiFi en Arduino MKR1000

En esta ultima entrada, al final, explica el código que vamos a utilizar. Allí indica que modifiques el pin digital 9 por el pin digital 6, pero en este caso no lo modificaremos vamos a trabajar con el pin 9 y lo vamos a utilizar para encender nuestra bombilla a través de una web.

Esquema eléctrico

El esquema eléctrico con un relé integrado en una PCB con los componentes necesarios (octoacoplador y diodo), es por un lado muy simple y por otro complejo debido, como ya te he comentado, a que cada fabricante coloca los pines de forma diferente. Aunque son todos muy similares. Nosotros vamos a utilizar el que está en este kit que es un relé de un canal.

Así es que a modo de ejemplo te pongo el siguiente esquema para que te pueda servir de orientación y se vea la conexión con la bombilla y la red eléctrica:

  • Esquema relé bombilla

En la imagen ves que utilizamos tres conexiones desde nuestro Arduino (para Arduino UNO es igual), la tierra que ira al conector tierra del relé, los 3.3V a la entrada de voltaje y un pin digital que ira a la entrada de señal del relé. Como te he dicho antes, estos pines los montan cada fabricante de forma diferente pero no es difícil averiguar cual es cual. Ahora pasamos a la conexión de alta tensión.

En esta parte estamos trabajando con altos voltajes, así es que si solo quieres excitar el relé y no tu corazón, toda precaución es poca.

Como ves en la imagen la conexión con nuestra bombilla o lampara es muy sencilla. Los relés tienen tres salidas y funcionan a pares, el de en medio con uno de los otros. Tenemos un par que funciona «normalmente cerrado» es decir, este lado con el de en medio esta conectado si no se excita la bobina (circuito cerrado) y el otro «normalmente abierto» que solo conmuta cuando se excita la bobina y es el que vamos a utilizar para este ejemplo. (Para saber que tipo de relé tienes, puedes utilizar la función de continuidad de un tester. Con el relé desconectado puedes comprobar por que par de salidas circula la corriente, esan dos serán las salidas normalmente cerradas).

Conectamos la salida que esta normalmente abierta a la bombilla y la otra a la alimentación. Y ya solo faltaría conectar el cable que falta de la bombilla a la alimentación y tendríamos el circuito terminado.

Código

Para encender una bombilla con un relé, tan solo necesitamos el código necesario para encender un LED, es exactamente igual. El ejemplo del blink con el LED13 nos valdría y haríamos parpadear la luz cada segundo. Lo modificamos con el pin 9 para seguir el contexto y le ponemos dos segundos de pausa. Quedaría así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
  Blink para Arduino
  Autor: Alfonso Contreras López acontreras@gmail.com
  www.programarfacil.com
*/
//Pin a utilizar
int LedPin = 9;
 
void setup() {
  pinMode(LedPin, OUTPUT); //modo salida
}
 
void loop() {
  digitalWrite(LedPin, HIGH);   // Enciende el pin 6
  delay(500);                   // Espera medio segundo
  digitalWrite(LedPin, LOW);   // Apaga el pin 6
  delay(500);                   // Espera medio segundo
}

Podríamos controlar nuestra bombilla mediante algún componente, por ejemplo podríamos utilizar alguno de estos componentes: un pulsador, un potenciomentro, …

La gran ventaja que nos ofrece la MKR1000 es poder controlar Arduino de manera inalámbrica. Podemos crear una web muy sencilla que permita encender y apagar la bombilla a través de un dispositivo móvil:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
  WiFi Web Server LED Blink
*/
#include <SPI.h>
#include <WiFi101.h>
 
char ssid[] = "yourNetwork";      //  your network SSID (name)
char pass[] = "secretPassword";   // your network password
int keyIndex = 0;                 // your network key Index number (needed only for WEP)
 
int status = WL_IDLE_STATUS;
WiFiServer server(80);
 
void setup() {
  Serial.begin(9600);      // initialize serial communication
  pinMode(9, OUTPUT);      // set the LED pin mode
 
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    while (true);       // don't continue
  }
 
  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);                   // print the network name (SSID);
 
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
    // wait 10 seconds for connection:
    delay(10000);
  }
  server.begin();                           // start the web server on port 80
  printWifiStatus();                        // you're connected now, so print out the status
}
 
 
void loop() {
  WiFiClient client = server.available();   // listen for incoming clients
 
  if (client) {                             // if you get a client,
    Serial.println("new client");           // print a message out the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        if (c == '\n') {                    // if the byte is a newline character
 
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
 
            // the content of the HTTP response follows the header:
            client.print("Enciende la luz <a href=\"/H\">aqui</a><br>");
            client.print("Apaga la luz <a href=\"/L\">aqui</a> turn the LED on pin 9 off<br>");
 
            // The HTTP response ends with another blank line:
            client.println();
            // break out of the while loop:
            break;
          }
          else {      // if you got a newline, then clear currentLine:
            currentLine = "";
          }
        }
        else if (c != '\r') {    // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
 
        // Check to see if the client request was "GET /H" or "GET /L":
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(9, HIGH);               // GET /H turns the LED on
        }
        if (currentLine.endsWith("GET /L")) {
          digitalWrite(9, LOW);                // GET /L turns the LED off
        }
      }
    }
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}
 
void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
 
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
 
  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
  // print where to go in a browser:
  Serial.print("To see this page in action, open a browser to http://");
  Serial.println(ip);
}

Este código es exactamente igual que el blink que viene en el articulo de configuración, salvo que le hemos dejado el pin digital 9 y hemos modificado los enlaces que salen para que ponga un texto acorde con lo que vamos a controlar. (No olvides cambiar en las lineas 7 y 8 tu configuración de red WiFi)

Con este código y nuestro montaje listo ya solo nos queda probar:

kicad

KiCad diseña y fabrica tu primera PCB

Si alguna vez has desmontado algún equipo electrónico, debes haber visto en su interior una tarjeta que soporta una gran cantidad de componentes. Se … [+ info...]

Fuentes-de-alimentación

Fuente de alimentación

Creo que estarás de acuerdo conmigo si digo que, para la subsistencia de un ser humano, después del aire, lo más importante es el agua y la comida; es … [+ info...]

Motor-AC-asincrono-sincrono-monofasico-trifasico

El mundo del Motor AC

Es incomprensible que uno de los mejores inventos del ser humano pase casi completamente desapercibido. Y es que si le preguntas a muchas personas si … [+ info...]

Copyright © 2023 · Programar Fácil · Aviso legal

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando, consideramos que acepta su uso.Aceptar Política de privacidad y cookies
Política de cookies

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Siempre activado
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
GUARDAR Y ACEPTAR