Problema con modulo relay y esp32, Alexa IOT

Hola buen día, tengo un problema con un proyecto IOT (Eh estado estudiando como puedo automatizar los focos(lamparas) de mi cuarto, tengo un dispositivo de Amazon (Alexa) en concreto en "echo-dot 3".
Use los siguientes materiales:

  • ESP32 DEVKIT V1
  • 1 modulo relay (mecánico) de 4 canales
  • 1 foco
  • 1 switch de pared de 3 vías

El problema que surge es que despues de apagar unas 3 veces seguidas por medio de alexa o por medio del switch de 3 vias, como que se traba el relay y ya deja de sonar el click de cuando se acciona... entonces pues es un problema grave pues no me apaga o prende el foco.
Según entiendo un relay mecánico tiene una tipo aguja que se ve atraida por un campo eléctrico que se genera ahi adentro, entonces no se que esta pasando, que a como me doy cuenta como que se queda pegado la aguja, y ya no acciona, solo prende y apaga el led indicador.
¿Y por que creo que es error de ahí? cuando le quito los cables que vienen de la corriente alterna del foco y la luz, este si funciona bien, solo es cuando conecto todo el circuito, entonces quería ayuda a ver si a alguien le paso lo mismo o algo me falta?? pues eh visto varios videos de YT y no veo que les pase lo mismo y lo hacen igual.
Ya hasta estoy pensando en comprar un modulo relay de estado solido a ver si eso lo arregla.
Adjunto el código que uso en el ESP32:

#include <Arduino.h>
#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include "fauxmoESP.h"


//CREDENCIALES CONEXION A TU WIFI
#define WIFI_SSID "arezZ"
#define WIFI_PASS "*****"

//VELOCIDAD SERIAL
#define SERIAL_BAUDRATE 115200

// DISPOSITIVOS
#define PIN_DISPOSITIVO_1 25
#define ID_1 "Foco 1"

#define PIN_DISPOSITIVO_2 26
#define ID_2 "Foco 2"

#define PIN_DISPOSITIVO_3 27
#define ID_3 "Foco 3"

#define PIN_DISPOSITIVO_4 33
#define ID_4 "Espejo"


/////////////////////////
#define TODO "Todo"
#define LUCES "Luces"
/////////////////////////

fauxmoESP fauxmo;
// -----------------------------------------------------------------------------
// Wifi
// -----------------------------------------------------------------------------

void wifiSetup() {

  //Inicializamos el WIFI en modo estacion
  WiFi.mode(WIFI_STA);

  //Conecta al WIFI
  Serial.println("---------------------------------------------");
  Serial.printf("[WIFI] Conectando a red %s ", WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASS);

  //Esperamos si es que no conecta
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(100);
  }
  Serial.println();
  Serial.printf("[WIFI] Conectado al WIFI %s ", WIFI_SSID);
  Serial.println();
  //Conexion Exitosa
  Serial.printf("[WIFI] MODO ESTACION, SSID: %s, Direccion IP: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
  Serial.println("---------------------------------------------");
  Serial.println("A la espera de instrucciones de alexa...");
  Serial.println("---------------------------------------------");
}

void setup() {

  //INICIALIZAMOS EL SERIAL
  Serial.begin(SERIAL_BAUDRATE);

  //ESTABLECEMOS EL ESTADO DE LOS PINES
  pinMode(PIN_DISPOSITIVO_1, OUTPUT);
  pinMode(PIN_DISPOSITIVO_2, OUTPUT);
  pinMode(PIN_DISPOSITIVO_3, OUTPUT);
  pinMode(PIN_DISPOSITIVO_4, OUTPUT);
  pinMode(PIN_DISPOSITIVO_5, OUTPUT);

  //ESTABLECEMOS QUE ETEN APAGADOS LOS DISPOSITIVOS
  digitalWrite(PIN_DISPOSITIVO_1, HIGH);
  digitalWrite(PIN_DISPOSITIVO_2, HIGH);
  digitalWrite(PIN_DISPOSITIVO_3, HIGH);
  digitalWrite(PIN_DISPOSITIVO_4, HIGH);
  digitalWrite(PIN_DISPOSITIVO_5, LOW);

  //INICIA EL METODO WIFI
  wifiSetup();

  fauxmo.createServer(true); // not needed, this is the default value
  fauxmo.setPort(80); // This is required for gen3 devices
  fauxmo.enable(true);

  //AÑADA O CREA LOS DISPISITIVOS ANTERIORMENTE ESTABLECIDOS EN LAS VARIABLES
  fauxmo.addDevice(ID_1);
  fauxmo.addDevice(ID_2);
  fauxmo.addDevice(ID_3);
  fauxmo.addDevice(ID_4);
  fauxmo.addDevice(TODO);
  fauxmo.addDevice(LUCES);
  fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) {

    Serial.printf("[INFORMACION] Dispositivo #%d (%s) Estado: %s Valor: %d\n", device_id, device_name, state ? "ON" : "OFF", value);

    if (strcmp(device_name, ID_1) == 0) {
      digitalWrite(PIN_DISPOSITIVO_1, state ? !HIGH : !LOW);
    }
    else if (strcmp(device_name, ID_2) == 0) {
      digitalWrite(PIN_DISPOSITIVO_2, state ? !HIGH : !LOW);
    }
    else if (strcmp(device_name, ID_3) == 0) {
      digitalWrite(PIN_DISPOSITIVO_3, state ? !HIGH : !LOW);
    }
    else if (strcmp(device_name, ID_4) == 0) {
      digitalWrite(PIN_DISPOSITIVO_4, state ? !HIGH : !LOW);
    }
    else if (strcmp(device_name, TODO) == 0) {
      digitalWrite(PIN_DISPOSITIVO_1, state ? !HIGH : !LOW);
      digitalWrite(PIN_DISPOSITIVO_2, state ? !HIGH : !LOW);
      digitalWrite(PIN_DISPOSITIVO_3, state ? !HIGH : !LOW);
      digitalWrite(PIN_DISPOSITIVO_4, state ? !HIGH : !LOW);
    }
    else if (strcmp(device_name, LUCES) == 0) {
      digitalWrite(PIN_DISPOSITIVO_1, state ? !HIGH : !LOW);
      digitalWrite(PIN_DISPOSITIVO_2, state ? !HIGH : !LOW);
      digitalWrite(PIN_DISPOSITIVO_3, state ? !HIGH : !LOW);
    }


  });

}

void loop() {
  fauxmo.handle();
}

No le veo algo malo al código, pero igual lo pongo para que vean como trabaja.

El diagrama de mi circuito es este:

Muchas gracias por comentar cualquier cosa de ayuda

Hola no veo nada raro en el codigo ni en las conexiones. ¿has probado con los 4 reles de la placa?, quizas tengas ese mal.
Saludos.

si ya probé con todos y me pasa lo mismo, digamos que se queda pegado el relay en un solo estado, hasta que no le paso un imán como que se arregla por así llamarlo...
Probe con otro modulo y da lo mismo, digamos que donde pruebe, pasa el mismo problema, gracias.

Que raro. ¿has probado voltear los cables de entrada de AC de casa ?,por si es un problema con la fase.

1 Like

El problema es como intentas controlar los LED de los optoacopladores.
El ESP32 envia por sus GPIOs 3.3V y aunque deberían ser suficientes a veces no lo son.
Debes conectar de otro modo. Esta indicado en la sección Hardware. Busca como comandar un RELE de 5V con un Arduino de 3.3V

Hola @Surbyte, no creo que sea ese el caso, esa placa se dispara con un nivel bajo de entre 0 y 1,2V los 3,3 los considera como alto.
Ademas @arezZ , se me olvido comentarte antes, un rele de estado solido no te serviria para hacer esa conenexión "conmutada" con el foco, ya qel de estado solido es un interruptor no un conmutador como esos reles.
Saludos.

estoy checando lo de la fase, por que si le quito los cables que van a ser controlador por el relay, me funciona de maravilla pero nada más los conecto y hace eso tan raro. Gracias por las respuestas, y es que quería ponerle contactos por si un día se iba el internet y hacerlo manual, pero no se deja jejeje :frowning:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.