Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


Automação com ESP8266 e relé de estado sólido



Vamos falar hoje de um componente não tão conhecido, mas que é indispensável para aqueles que gostam de automação industrial, comercial ou residencial: o relé de estado sólido. Do inglês Solid State relays (SSR), podemos dizer que são dispositivos eletrônicos usados no chaveamento de cargas resistivas ou indutivas com inúmeras vantagens sobre os relés eletromecânicos convencionais. Resumindo, hoje vamos disponibilizar uma opção rápida e flexível para controle de cargas e estender as aplicações de relés eletromecânicos aos SSR’s.


Este projeto é uma versão semelhante ao que apresentei no vídeo “Automação com ESP8266 usando relés”. Mas, aqui, expandi o número de relés de dois para oito. Retomo aqui, hoje, o uso do ESP8266 porque, vamos falar a verdade, ele não tem concorrente, isso por conta do seu desempenho em relação ao seu preço. É muito barato por tudo o que é capaz de fazer..



Recursos usados


·         ESP8266 Devkit1.0
·         Módulo SSR’s de oito canais
·         Jumper’s para conexão
·         Rede WiFi disponível
·         Fonte de 5V
·         Lâmpada 127V
·         Soquete para lâmpada.
·         Fio paralelo 



Demonstração


No vídeo de hoje você pode ver uma demonstração do circuito funcionando. Na nossa montagem, temos os relés de estado sólido. O oitavo relé está ligado a uma lâmpada a 127 volts. Os outros sete relés estão com Leds indicadores. Temos, ainda, o ESP8266, cujas saídas estão ligadas diretamente aos módulos de relés.




Módulo Sainsmart 8 canais SSR



     ·         Ativação das portas:
          o   Estado baixo: 0V à 0,5V
          o   Estado indeterminado: 0,5V à 2,5V
          o   Estado alto: 2,5V à 20V
          o   Alimentação 5V


     ·         Carga em cada canal:
          o   Tensão: 75 à 264VAC (50/60Hz)
          o   Corrente: 0,1 à 2A





Componente principal – relé de estado sólido (Solid State Relay – SSR)


Algumas vantagens:
· Não possuem partes mecânicas, aumentando a vida útil.
· Respondem melhor a chaveamentos de frequências maiores.
· Possuem detecção de cruzamento de zero, ligando ou desligando cargas nos pontos de tensão zero da onda senoidal, o que reduz interferências eletromagnéticas.
·    São menores, mais silenciosos, resistem mais a vibrações mecânicas.
·   Maior compatibilidade com circuitos digitais e baixas correntes de acionamento.


Pessoal, preciso dizer a vocês que existem alguns momentos para utilizar o relé tradicional e outros para usar o relé de estado sólido. Por isso, é importante analisar sempre as vantagens, que você já viu, bem como as desvantagens, que vou lhe expor agora.



Algumas desvantagens:
·         Precisam ter um dimensionamento correto para a dissipação de calor.
·         São mais sensíveis a surtos elétricos e podem requerer o uso de varistores como forma de proteção.
·         É aconselhável a utilização de fusíveis rápidos em série com os SSR’s, porque, em caso de curto e eventual dano, o SSR’s tendem a manter-se fechados mantendo a carga energizada.


Aqui temos um diagrama do que tem dentro do relé de estado sólido.



Pinos do Esp8266




Circuito

Confira a tabela de conexão.



Veja aqui os detalhes da nossa montagem.




Código fonte – Includes, defines e webserver

Como mencionado, no vídeo “Automação com ESP8266 usando relés”, eu aumentei de dois para oito relés. Então, aqui, seguimos o mesmo procedimento. Incluímos a biblioteca WiFi do ESP8266, definimos a representação dos pinos usados para cada um dos relés e criamos um server na porta 80.

#include <ESP8266WiFi.h>//Inclui biblioteca Wifi do ESP8266

//Define representação dos pinos usados para cada relé
#define Rele_01 16        //mesmo que D0
#define Rele_02 5         //mesmo que D1
#define Rele_03 4         //mesmo que D2
#define Rele_04 0         //mesmo que D3
#define Rele_05 2         //mesmo que D4
#define Rele_06 14        //mesmo que D5
#define Rele_07 12        //mesmo que D6
#define Rele_08 13        //mesmo que D7


//Cria um server na porta 80
//(porta padrão para onde os navegadores enviam as requisições http)
WiFiServer server(80);




Código fonte – Setup() – Serial e ajuste dos pinos

Inicializamos a serial para efeito de log e ajustamos o modo, bem como o estado, de todos os pinos.

void setup()
{
  //Inicializa a Serial apenas para efeito de log
  Serial.begin(115200);

  //Ajusta o modo de todos os pinos
  pinMode(Rele_01, OUTPUT);
  pinMode(Rele_02, OUTPUT);
  pinMode(Rele_03, OUTPUT);
  pinMode(Rele_04, OUTPUT);
  pinMode(Rele_05, OUTPUT);
  pinMode(Rele_06, OUTPUT);
  pinMode(Rele_07, OUTPUT);
  pinMode(Rele_08, OUTPUT);

  //Ajusta o estado de todos os pinos
  digitalWrite(Rele_01, LOW);
  digitalWrite(Rele_02, LOW);
  digitalWrite(Rele_03, LOW);
  digitalWrite(Rele_04, LOW);
  digitalWrite(Rele_05, LOW);
  digitalWrite(Rele_06, LOW);
  digitalWrite(Rele_07, LOW);
  digitalWrite(Rele_08, LOW);





Código fonte – Setup() – Conectando ao WiFi e ajustando endereço

Nesta etapa, informamos o estado atual do ESP, o qual vamos conectar a rede WiFi disponível no local de uso. Novo estado será, então, mostrado no monitor serial. Configuramos o IP fixo conforme a rede e enviamos tais configurações.

  Serial.print("Conectando");//informando estado atual (debug)
  //Faz o ESP se conectar à rede WiFi disponível no local de uso.
  //No nosso exemplo o ssid da rede é redeWiFi e a senha é senhateste
  WiFi.begin("redeWiFi", "senhateste");

  //Enquanto o ESP não se conectar à rede
  while (WiFi.status() != WL_CONNECTED)
  {
    //Esperamos 100 milisegundos
    delay(100);
    Serial.print(".");
  }

  //Se chegou aqui é porque conectou à rede,
  //então mostramos no monitor serial para termos um feedback
  Serial.println("");
  Serial.println("Conectou");

  //Configurações do IP fixo. Você pode alterar conforme a sua rede
  IPAddress ip(192, 168, 43, 205);
  IPAddress gateway(192, 168, 43, 1);
  IPAddress subnet(255, 255, 255, 0);
  Serial.print("Configurando IP fixo para : ");
  Serial.println(ip);

  //Envia a configuração
  WiFi.config(ip, gateway, subnet);




Código fonte – Setup() – Iniciando o servidor


Inicializamos o server que criamos na porta 80 e mostramos no monitor serial o IP que o ESP possui para verificarmos se é o mesmo que configuramos.

  //Inicializa o server que criamos na porta 80
  server.begin();

  //Mostramos no monitor serial o IP que o ESP possui
  //para verificarmos se é o mesmo que configuramos
  Serial.print("Server em: ");
  Serial.println(WiFi.localIP());
}



Código fonte – Loop() – aguardando conexão

Nesta fase do Loop, verificamos se algum cliente está tentando se conectar. Em caso negativo, podemos retornar.

void loop()
{
  //Verifica se algum cliente está tentando se conectar
  WiFiClient client = server.available();
  if (!client)
  {
    //Se não houver nenhum cliente podemos retornar pois não há nada a fazer
    return;
  }



Código fonte – Loop() – cliente conectado, obtendo requisição


Aqui executamos a leitura da requisição.

  Serial.println("Novo cliente conectou");

  //Fazemos a leitura da requisição
  String req = client.readStringUntil('\r');
  Serial.print("Requisição: ");
  Serial.println(req);




Código fonte – Montando o HTML que será enviado

Mostro aqui o html que iremos retornar para o cliente, o qual é formado por dois botões (ON e OFF) para cada relé. Vamos fazer com que a ação vinculada a cada botão chegue ao ESP, para que este verifique qual ação deverá executar.

  
//Este é o html que iremos retornar para o cliente
  //É composto basicamente de dois botões (ON e OFF) para cada relé
  //A parte que nos interessa é o <a href=' com a ação vinculada a cada botão
  //Quando clicamos em um destes botões essa informação chegará até o ESP para
  //que ele verifique qual ação deve executar
  //A parte dentro de '<style>' é apenas para modificarmos o visual da página
  //que será exibida, você pode alterá-la como queira
  String html =
    "<html>"
    "<head>"
    "<meta name='viewport' content='width=device-width, initial-scale=1, user-scalable=no'/>"
    "<title>Controle Esp8266</title>"
    "<style>"
    "body{"
    "text-align: center;"
    "font-family: sans-serif;"
    "font-size:25px;"
    "padding: 25px;"
    "}"
    "p{"
    "color:#444;"
    "}"
    "button{"
    "outline: none;"
    "border: 2px solid #1fa3ec;"
    "border-radius:18px;"
    "background-color:#FFF;"
    "color: #1fa3ec;"
    "padding: 5px 25px;"
    "}"
    "button:active{"
    "color: #fff;"
    "background-color:#1fa3ec;"
    "}"
    "button:hover{"
    "border-color:#0000ff;"
    "}"
    "</style>"
    "</head>"
    "<body>"
    "<p>01 - "
    "<a href='?acao=Rele_01On'><button>ON</button></a>"
    "<a href='?acao=Rele_01Off'><button>OFF</button></a></p>"
    "<p>02 - "
    "<a href='?acao=Rele_02On'><button>ON</button></a>"
    "<a href='?acao=Rele_02Off'><button>OFF</button></></p>"
    "<p>03 - "
    "<a href='?acao=Rele_03On'><button>ON</button></a>"
    "<a href='?acao=Rele_03Off'><button>OFF</button></a></p>"
    "<p>04 - "
    "<a href='?acao=Rele_04On'><button>ON</button></a>"
    "<a href='?acao=Rele_04Off'><button>OFF</button></a></p>"
    "<p>05 - "
    "<a href='?acao=Rele_05On'><button>ON</button></a>"
    "<a href='?acao=Rele_05Off'><button>OFF</button></a></p>"
    "<p>06 - "
    "<a href='?acao=Rele_06On'><button>ON</button></a>"
    "<a href='?acao=Rele_06Off'><button>OFF</button></a></p>"
    "<p>07 - "
    "<a href='?acao=Rele_07On'><button>ON</button></a>"
    "<a href='?acao=Rele_07Off'><button>OFF</button></a></p>"
    "<p>08 - "
    "<a href='?acao=Rele_08On'><button>ON</button></a>"
    "<a href='?acao=Rele_08Off'><button>OFF</button></a></p>"
    "</body>"
    "</html>";






Código fonte – Mais detalhes do html...

Aqui eu mostro o código que peguei do Browser.



Código fonte – Respondendo à requisição e alterando o estado das portas

Escrevemos o html no buffer que será enviado ao cliente e enviamos os dados deste buffer para este cliente. Verificamos se a requisição possui algum comando de atuação sobre os relés.

//Escreve o html no buffer que será enviado para o cliente
  client.print(html);
  //Envia os dados do buffer para o cliente
  client.flush();

  //A partir daqui, verificamos se a requisição possui algum comando de
  //atuação sobre os relés
  if (req.indexOf("acao=Rele_01On") != -1)
  {
    digitalWrite(Rele_01, HIGH);
  }
  else if (req.indexOf("acao=Rele_01Off") != -1)
  {
    digitalWrite(Rele_01, LOW);
  }


  if (req.indexOf("acao=Rele_08On") != -1)
  {
    digitalWrite(Rele_08, HIGH);
  }
  else if (req.indexOf("acao=Rele_08Off") != -1)
  {
    digitalWrite(Rele_08, LOW);
  }



Código fonte – Fechando a conexão


Por fim, aguardamos o tráfego das informações ser concluído e fechamos a conexão com o cliente.

   delay(200);//aguarda para que o trafego das informações seja concluído
  //Fecha a conexão com o cliente
  client.stop();
  Serial.println("Cliente desconectado");
}




Faça o download dos arquivos:



Postar um comentário

7 Comentários

  1. Obrigado Fernando pelos seus videos
    pode ajudar em como fazer um repetidor wifi com esp32

    ResponderExcluir
    Respostas
    1. Não é possível ainda ate onde sei, da pra ampliar o sinal do esp mais usá-lo como repetidor de internet ainda não consegui rsrs

      Excluir
  2. Olá fernando,Amigo ! Vc é O KARA ! Apaixonado pelo que faz, e não nego, CONTAGIANTE!!
    Seguinte, tenho muita noção de lógica, tenho formação técnica em comandos elétricos, e sou apaixonado por automação, agora ainda mais.
    Socorro !! PRECISO DE UM CURSO PRESENCIAL URGENTE !! Meu cérebro já nao sabe mais se o status é higth ou low...

    ResponderExcluir
    Respostas
    1. Depende do pino, tem pinos que ligam com LOW, isso vai depender muito do transistor que faz o acionamento, mas a regra é se não ligou com HIGH, vai ligar com LOW.

      Excluir
  3. Seria muito massa um upgrade desse projeto, com parâmetros para acionamento do rele alem do On Off, só para não ficar um interruptor caro.
    Mas parabéns pelos videos, muito bem explicado.

    ResponderExcluir
  4. Parabéns pela aula. Como colocar o watch dog no programa?

    ResponderExcluir