Controlar un ventilador con un Web Server

Smelpro > All  > Internet de las Cosas  > Controlar un ventilador con un Web Server

Controlar un ventilador con un Web Server

Siguiendo con la temática del web server hoy crearemos uno para controlar un relay. Esto nos ayudará porque la mayoría de electrodomésticos usan 220V, y las plataformas electrónicas como Arduino y NodeMCU envían de 3.3V a 5V.

Para poder accionar un equipo con una menor cantidad de tensión o intensidad de la que necesita usaremos un módulo relé o relay.

 

¿Qué es un relé?

Es un dispositivo electromecánico que nos permitirá controlar cargas de intensidad y tensión mayores que las que podríamos controlar, por ejemplo, con Arduino o NodeMCU.

Internamente contiene un circuito primario y un secundario.

El circuito primario tiene una bobina que genera un campo magnético, al ser accionado mueve un pivote.

En el circuito secundario hay tres contactos, una correspondiente al NO (Normalmente abierto), otro al NC (Normalmente cerrado), y la tercera que es movida por el pivote es C (Común).

Nota: Aunque el mecanismo siempre es el mismo, cada fabricante reordena la disposición de los conectores. Te recomendamos adquirir uno que venga integrado en una PCB.

En la siguiente animación podemos ver cómo es que al presionar un botón activa la bobina del relé, que a su vez mueve el contacto común para activar el circuito que enciende un LED.

Recuerda que debes elegir el relé que se adapte a tus necesidades, para eso observa los valores tensión e intensidad que soporta. Si tolera 10A y más de 220V puedes controlar un equipo conectado a la corriente eléctrica.

 

Conexión

Recordemos que cada fabricante suele ordenar la disposición de los puntos de conexión de acuerdo a su criterio. Puedes recurrir a las hojas de datos (datasheet) del modelo que vayas a utilizar.

Podemos identificar los conocidos pines de Vcc, GND, que irán en sus respectivos conectores en Arduino, NodeMCU, o un protoboard. El pin IN o de señal se debe conectar a un pin de salida digital de Arduino.

En el otro lado hay tres clemas. Uno de los polos de la carga debe ir conectada en C. Y el otro polo se conectará en NC o NO. Esto dependerá de cómo quieres que esté el circuito secundario al desactivarlo.

En nuestro caso, estamos conectando un ventilador, pero el esquema de conexión es el mismo.

 

Programación

En esta ocasión usaremos una NodeMCU, pero programaremos en el IDE de Arduino. Este proyecto es sencillo, hay que designar un pin como salida para comunicarse con el relé y encender, en esta caso, el ventilador.

Pero añadiremos lo que aprendimos del tutorial anterior acerca de cómo hacer un web server.

#include <ESP8266WiFi.h>

//Reemplazar con los valores de tu red
const char* ssid     = "Noombre de tu red";
const char* password = "Contraseña de tu res";

// Designamos el web server en el puerto 80
WiFiServer server(80);

// Variable para HTTP
String header;

// Variables auxiliares para ver el estado del pin de salida
String output5State = "off";

// Creamos una variable y la relacionamos al pin 5
const int output5 = 5;

void setup() {
  Serial.begin(115200);
  // Configuramos los modos del pin de salida
  pinMode(output5, OUTPUT);
  // Declaramos que inice en LOW o Bajo
  digitalWrite(output5, LOW);

  // Connect to Wi-Fi network with SSID and password
  Serial.print("Conectando a: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);            // Configura los datos de la red
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Imprimir datos del webserver
  Serial.println("");
  Serial.println("WiFi conectado.");
  Serial.println("Dirección IP: ");
  Serial.println(WiFi.localIP());    // Wifi.localIP() muestra la IP del esp8266
  server.begin();                    // Inicias el servidor
}

void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients

  if (client) {                             // Si un nuevo cliente se conecta,
    Serial.println("Nuevo cliente.");          // se imprime un mensaje en el puerto serial
    String currentLine = "";                // hacer una cadena para contener los datos entrantes del cliente
    while (client.connected()) {            // función repetitiva mientras el cliente este conectado
      if (client.available()) {             // Si hay bytes para leer desde el cliente,
        char c = client.read();             // lee un byte, entonces
        Serial.write(c);                    // lo impríme en el monitor serial
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // Si la línea actual está en blanco, tienes dos caracteres de nueva línea seguidos
          // Ese es el final de la solicitud HTTP del cliente, así que envíe una respuesta:
          if (currentLine.length() == 0) {
            // La cabecera de HTTP inica con el siguiente código (e.g. HTTP/1.1 200 OK)
            // Y en content-type el cliente sabe el tipo de contenido que hay:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            // turns the GPIOs on and off
            if (header.indexOf("GET /5/on") >= 0) {
              Serial.println("GPIO 5 on");
              output5State = "on";
              digitalWrite(output5, HIGH);
            } else if (header.indexOf("GET /5/off") >= 0) {
              Serial.println("GPIO 5 off");
              output5State = "off";
              digitalWrite(output5, LOW);
            }
            
            // Mostrar la página HTML
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta http-equiv=\"refresh\" content=\"2\" name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // Estilos CSS de los botones on/off 
            // Puedes modificar estas carcterísticas a tu gusto
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #74e239; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
            
            // Cabecera de página
            client.println("<body><h1>SMELPRO - Web Server</h1>");
           // client.println("<p>Mi sensor es:" + valorsensor + "</p>");
            // Display current state, and ON/OFF buttons for GPIO 5  
            client.println("<p>Estado del ventilador: " + output5State + "</p>");
            // Si el pin está apagado (off) mostar el botón de encender (ON)      
            if (output5State=="off") {
              client.println("<p><a href=\"/5/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/5/off\"><button class=\"button button2\">OFF</button></a></p>");
            } 
            client.println("</body></html>");
            client.println();
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
      }
    }
    // Limpiar variables de cabecera
    header = "";
    // Cerrar la conexión
    client.stop();
    Serial.println("Cliente desconectado.");
    Serial.println("");
  }
}

Después de subir el código debes abrir el monitor serial. Verás que una dirección IP, a la cual tendrás que acceder con el navegador de tu preferencia.

En la página verás un texto indicando el estado actual del ventilador (on/off), esto puede ser cambiado en el código. Y debajo un botón para encender (ON) o apagar (OFF).

Aquí puedes ver lo que hicimos:

Esto sirve más como una introducción a los que se puede hacer con un relay. Es muy útil en proyectos de IoT, sobretodo en domótica

Esperamos haberte ayudado. ¿Qué ideas tienes para el uso de un relay? Coméntalo. Puedes contactarte con nosotros a través de este enlace.

Blog
No Comments

Sorry, the comment form is closed at this time.