Projeto Industrial com ESP8266 e Adafruit IO | MakerHero
Capa do artigo Projeto industrial com ESP8266 e Adafruit IO

Projeto Industrial com ESP8266 e Adafruit IO Deixe um comentário

Nesse artigo você aprenderá a desenvolver um projeto industrial com ESP8266 e Adafruit IO

Esse post está completo, traz uma integração atualizada entre circuitos eletrônicos aplicados à microcontroladores, o ESP8266 na plataforma NodeMCU programado na IDE do Arduino e a plataforma em nuvem Adafruit IO. 

Inclusive, vamos também utilizar situações e circuitos já abordados em posts anteriores aqui no blog da MakerHero, mas agora com uma aplicação inédita, focada em soluções industriais com IoT.

Como estratégia, desmembrei o projeto em 03 partes, para entendermos e utilizarmos os recursos de maneira óptima: Hardware, plataforma em nuvem e o código.

Explicação do projeto industrial com ESP8266 e Adafruit IO:

A nossa eletrônica embarcada permitirá que, via sistema em nuvem, uma empresa saiba como estão as variáveis julgadas como críticas em um processo e que realize o acionamento de cargas. 

Saberemos se a máquina está ligada ou desligada, e o valor atual de temperatura e umidade. 

Poderemos acionar um motor e selecionar a velocidade em que esse motor irá trabalhar em porcentagem. Tudo isso, obtendo o valor atual e a temperatura no momento, e seu histórico, assim, a empresa pode tomar decisões emergenciais ou programadas, com base nos dados fornecidos pelo nosso projeto.

Lista de materiais:

Para execução do projeto, você precisará de:

Dica: Encontre um kit de resistores com 20 valores e 400 unidades no total aqui.

Entendendo e utilizando o hardware

Nós faremos 02 acionamentos:

  1.     Ligaremos um relé diretamente pela plataforma. Nesse momento você já deve ter percebido que, por estarmos utilizando “contatos secos”, este relé pode ligar diversos tipos de cargas. Em nosso cenário, será o sinal que está no comando de partida de um motor trifásico de indução.
  2.     O segundo controle é proporcional. Uma vez que o primeiro sinal esteja habilitado (essa é uma condição que trataremos dentro do nosso sketch), através de um controle deslizante da dashboard (slider), controlaremos um sinal analógico que varia de 0 a 3,3V. Isso mesmo, sinal analógico! Teremos um circuito convertendo o PWM do ESP8266 em sinal analógico.

Já na parte de leitura, realizaremos 03 monitoramentos importantes:

  1.     A primeira leitura é saber se a máquina está ligada ou desligada. Parece singelo, mas é de grande importância, pois através de uma única variável binária, ligada ou desligada, conseguiremos obter um histórico diário, semanal ou até mesmo mensal, agregando valor aos dados sobre a produtividade da máquina;
  2.     A segunda e terceira são temperatura e umidade, respectivamente. Nesse contexto, utilizaremos o DTH22 para nos fornecer essas grandezas. Contudo, poderia ser a temperatura do óleo hidráulico da máquina e a umidade interna do painel, ou poderia ser a temperatura e umidade em uma câmara fria. Poderíamos trocar o DHT22 por termopar, PT100, etc. Consegue compreender como as possibilidades são inúmeras? Então é questão de adequar nosso projeto à sua realidade e demanda. Essas duas variáveis também terão, além do valor do estado atual, um histórico que pode ser diário, semanal ou mensal.

Portanto, vamos desmembrar o hardware em partes e circuitos menores, trabalharemos na ordem dos números abordados anteriormente.

 1º Interface eletrônica a relé – liga motor

Essa eletrônica de potência é tranquila de se entender e aplicar. As saídas digitais dos microcontroladores não possuem capacidade de ligar diretamente cargas mais pesadas como motores, válvulas e atuadores em geral. 

Geralmente, as saídas dos microcontroladores estão na ordem de miliampères. Para ser mais específico, 12mA no caso do ESP8266. 

Estamos utilizando um transistor BC337 para ser o nosso driver primário de corrente. O pino D5 (gpio 14) do ESP8266 aciona o transistor, que está configurado para trabalhar saturado. 

Este, por sua vez, aciona o relé, que é um dispositivo eletromecânico. Quando o campo eletromagnético da bobina está presente, ele altera os seus contatos, onde o comum, que inicialmente estava conectado com o N.F. (normalmente fechado), altera de posição e se conecta com o N.A. (normalmente aberto). 

Inseri um conector mini KRE 3 vias para facilitar a conexão entre os contatos do relé e o comando da máquina.

Circuito eletrônico interface para ligar o relé
Circuito eletrônico interface para ligar o relé

2º Controle proporcional – saída de 0 a 3,3V 

Esse é um circuito de filtro passa baixa de primeira ordem com um amplificador operacional na configuração de seguidor. 

Está ligado no pino D2 (gpio 4) do ESP8266 e dimensionado para permitir passar frequências abaixo de 1,59Hz. 

Após essa filtragem, o amplificador operacional, na configuração de seguidor (ou buffer) tem a função de fazer o casamento com impedâncias externas ao circuito, uma vez que não estamos dimensionando para algum atuador proporcional específico.

Nessa configuração, a saída “VELOCIDADEMOTOR” terá uma faixa de trabalho entre 0 e 3,3V, funcionando bem proporcionalmente ao duty cycle, ou seja, quanto maior for o tempo ligado do sinal, maior será a saída analógica. 

Se sua aplicação requer ajuste de ganho, uma saída 0 a 10V, ou se você deseja entender mais sobre essa parte do circuito, convido a conferir o post sobre como gerar um sinal analógico com o arduino, que também é de minha autoria.

Circuito eletrônico da saída analógica
Circuito eletrônico da saída analógica

3º Entrada digital 24V – Status da máquina

Estamos utilizando um microcontrolador que lê níveis lógicos digitais de 0 e 3,3V. Porém o valor de tensão 24Vcc é muito presente em máquinas e dispositivos industriais. Então, o que fazer para que o microcontrolador leia os sinais digitais das máquinas?

Dimensionar um divisor resistivo pode ser a ideia mais simples, em um primeiro momento, mas então teríamos que misturar o GND (0V) do nosso circuito com o da máquina, e isso pode ser problemático.

Como solução, proponho utilizar um circuito opto isolado para realizar a leitura de um sinal 24Vcc da máquina, para sabermos se ela está ligada, ou não, diretamente no pino D1 (GPIO 5) do ESP8266.

Deseja saber mais sobre esse circuito e suas características? Confira o post que também é de minha autoria: Entrada 24v para Arduino e PIC.

Importante atentar-se às diferenças entre o circuito eletrônico do link “entrada 24V para Arduino e PIC” para essa aplicação. Lá a leitura era de 0 ou 5V, aqui fiz uma modificação para que a leitura seja 0 ou 3,3V (para ser mais preciso, 3,21V).

Circuito eletrônico para entrada digital 24V
Circuito eletrônico para entrada digital 24V

4º Leitura de temperatura e umidade – DHT22

O DHT22 é um sensor de temperatura e umidade que permite fazer leituras de temperaturas entre -40 a +80 graus Celsius, e umidade entre 0 a 100%, sendo muito fácil de usar com Arduino, ESP8266, Raspberry e outros microcontroladores pois possuem apenas 1 pino com saída digital. 

Ele tem se tornado bastante popular pois possui custo relativamente baixo e ocupa apenas um pino do microcontrolador.

O pino de dado do sensor, em nosso projeto, está ligado no pino D6 (gpio12) do ESP8266.

Se você quiser saber mais sobre o DHT22, suas características e outras aplicações, confira o post estação meteorológica com arduino

Ligação entre o sensor DHT22
Ligação entre o sensor DHT22

Utilização da plataforma em nuvem

Agora que já entendemos o nosso hardware e os materiais necessários para a montagem, vamos à plataforma de integração para Internet das Coisas (IoT).

Adafruit IO é uma plataforma em nuvem para IoT, desenvolvida pela empresa Adafruit Industries. Ela permite a criação e gerenciamento de dispositivos conectados à internet, bem como a coleta, armazenamento e visualização de dados gerados por esses dispositivos.

Para ter acesso à plataforma, será necessário criar uma conta da Adafruit de maneira gratuita. Para isso:

  •  Efetue o cadastro no link io.adafruit.com/. Caso já possua conta, é só logar.
  •  Ao logar, você será levado à área “Devices” da sua conta.

Feito isso,vamos criar os feeds.

  1. Na aba superior, vá em “Feeds”.
  2. Você precisará criar 5 novos feeds em “New Feed”. Crie um por vez.
  • Estadomaquina;
  • Motor;
  • Temperatura;
  • Umidade;
  • Velocidademotor.
Criando um novo bloco na plataforma Adafruit IO
Criando um novo bloco na plataforma Adafruit IO

Agora, vamos criar o dashboard.

  1. Na aba superior, ao lado de “Feeds”, vá em “Dashboards”.
  2. Crie uma nova Dashboard em “New Dashboard”.Você pode dar um nome a ela. Sugiro “Projeto Industrial com ESP8266 e Adafruit IO – MakerHero”.

Vá nas configurações da dashboard e crie os blocos conforme a sua necessidade. 

Criando um novo bloco na plataforma Adafruit IO
Criando um novo bloco na plataforma Adafruit IO

Abaixo, listei os principais blocos que utilizaremos com uma breve explicação.

Sugiro reproduzir de maneira igual, até que você atinja os resultados esperados. Depois, explore as ferramentas, configurações e teste os recursos, assim, você irá expandir o potencial das suas ideias.

Configurações do bloco toggle
Configurações do bloco toggle

Os blocos (antes chamados de widgets) que utilizaremos são:

  • Toggle (alternar);
  • Slider (controle deslizante);
  • Gauge (medidor);
  • Text (texto);
  • Indicator (indicador);
  • Icon (ícone);
  • Line Chart (gráfico de linha);
  • Dividing Line (linha divisória).

Toggle 

É um recurso fornecido pela plataforma Adafruit IO, que permite controlar o estado de uma conexão ou dispositivo em tempo real. 

Ele funciona como um interruptor virtual, permitindo que o usuário ligue ou desligue um dispositivo, como um relé ou um motor, através de um botão em uma interface gráfica.

Vincule com o feed “motor”, de acordo com a configuração do bloco toggle:

Configurações do bloco slider
Configurações do bloco slider

Slider 

É uma função que permite controlar a intensidade ou a posição de um dispositivo remotamente através de uma interface de usuário. 

Com o slider, podemos facilmente ajustar as configurações de dispositivos conectados no ESP8266, como LEDs, motores e servo-motores, simplesmente movendo um controle deslizante na tela.

Vincule o bloco com o feed “velocidademotor”, através dessa configuração do bloco slider:

Configurações do bloco slider
Configurações do bloco slider

Gauge 

Este bloco possui uma função na plataforma Adafruit IO, que permite aos usuários visualizar dados de sensores em tempo real, através de um medidor gráfico. 

Com o bloco gauge, nós podemos monitorar facilmente os valores de sensores conectados à plataforma, com uma interface de usuário amigável que mostra as leituras em um formato gráfico fácil de entender. 

Na nossa aplicação, utilizaremos esse bloco duas vezes, a primeira para vermos o estado atual da temperatura e a segunda para vermos o estado atual da umidade, ambos fornecidos pelo DHT22.

Crie dois blocos gauge, vincule um com o feed “temperatura” e outro com o feed “umidade”. Essa é a configuração dos blocos gauge:

Configurações dos blocos gauge, parte 1.
Configurações dos blocos gauge I
Configurações dos blocos gauge II
Configurações dos blocos gauge II

Text

Um bloco de texto pode ser usado para enviar dados, bem como visualizar dados. 

Utilizaremos como recurso complementar ao bloco “indicator”. Se o valor indicado no bloco text for “0”, a máquina está desligada. Se o valor indicado for “1”, a máquina está ligada.

Vincule o bloco com o feed “estadomaquina”. Configuração do bloco text:

Configurações do bloco indicator
Configurações do bloco indicator

Indicator 

É uma sinalização indicadora de ligado ou desligado. Os valores do feed são comparados usando as condições dadas. Se as condições forem verdadeiras, então “On Color” é usado, se for falso, “Off Color”. 

Todos os valores são considerados numéricos para comparação. Se o bloco na dashboard estiver verde, a máquina está ligada, se estiver vermelho, a máquina está desligada.

Também vincule esse bloco com o feed “estadomaquina”. Configuração do bloco indicator:

Configurações do bloco indicator
Configurações do bloco indicator

Icon

Utilizei esse bloco apenas para deixar a experiência do usuário da dashboard mais intuitiva e rica. Contudo, esse bloco pode ser mais explorado a depender da necessidade do projeto. 

Iremos utilizá-lo duas vezes, uma para mostrar o ícone de um termômetro, outra vez para apresentar o ícone da umidade.

Configurações do bloco Icon para temperatura
Configurações do bloco Icon para temperatura
Configurações do bloco Icon para Umidade
Configurações do bloco Icon para Umidade

Line Chart 

O gráfico de linha é utilizado para apresentar o valor, ao longo do tempo, de um ou mais feeds.

Vamos criar 03 blocos, para visualizarmos de maneira independente os históricos de status da máquina, temperatura e umidade

Vincule o primeiro com o feed “estadomaquina”, o segundo com o feed “temperatura” e o terceiro com o feed “umidade”. 

Configuração dos blocos line chart:

Configuração dos blocos line chart 1
Configuração dos blocos line chart I
Configuração dos blocos line chart 2
Configuração dos blocos line chart II
Configuração dos blocos line chart 3
Configuração dos blocos line chart III

Dividing line 

A linha divisória (dividing line) é uma função na plataforma Adafruit IO, que permite aos usuários criar uma separação visual entre diferentes elementos em nossa dashboard. 

A linha divisória é uma linha horizontal ou vertical que pode ser adicionada para separar diferentes widgets, blocos ou dispositivos e tornar a interface de usuário mais organizada e fácil de entender.

Faça alguns testes e utilize a maneira que melhor convier ao seu layout. A construção, utilização dos blocos e organização do layout varia muito do estilo do editor (você). 

Abaixo estão as imagens do layout para a dashboard que eu elaborei. Fica a seu critério utilizar de maneira integral, parcial ou criar a sua própria.

As minhas dicas são: cuidado com excesso de informação, pode causar poluição visual, e muita calma, às vezes os blocos acabam “encavalando” durante a edição, portanto, tenha paciência, além disso, evite excessos e mantenha somente informações ou blocos com ações que são necessários.

O layout da minha dashboard ficou assim:

Dashboard final
Dashboard final parte superior – interação

Abaixo desse layout, implementei gráficos para acompanhar os históricos das variáveis que capturamos da máquina: status da máquina, temperatura e umidade.

Dashboard final, parte inferior
Dashboard final parte inferior – Históricos

Entendo e utilizando o código

O sketch desse projeto é bem tranquilo de entender. Deixei em grupos ou blocos estrategicamente posicionados para facilitar a interpretação.

Fiz questão de utilizar as bibliotecas mais atualizadas até o presente momento, para evitar “downdates”, ou seja, ser necessário utilizar bibliotecas antigas para funcionar.

Seguem as bibliotecas utilizadas e as suas respectivas versões:

 Biblioteca da Placa: “esp8266 by ESP8266 Community versão 3.1.2”

 Bibliotecas de códigos:

  • “Adafruit IO Arduino versão 4.2.3”
  • “Adafruit MQTT versão 2.5.2”
  • “ArduinoHttpClient versão 0.4.0”
  •  “DHT sensor library 1.4.4”
  •   “Adafruit unified sensor 1.1.9”    

Se tiver dúvidas em como programar o módulo ESP8266 NodeMCU, acesse nosso artigo sobre!

Você pode baixar o código no GitHub da MakerHeo através do seguinte link: Código Projeto Projeto Industrial com ESP8266 e Adafruit IO

Importante!

Note que no código existe a necessidade de preencher quatro informações:

 01 – O nome da sua rede;

02 – A senha da sua rede;

03 e 04 – Os dados de acesso da sua conta Adafruit IO. Essas informações podem ser visualizadas na própria plataforma em “Adafruit IO Key” disponível no canto superior direito do site.

Configurações “YOUR ADAFRUIT IO KEY”
Configurações “YOUR ADAFRUIT IO KEY”

Resultados

Os ensaios em bancada foram um sucesso! A leitura digital 24V para saber se a máquina está ligada ou desligada tem resposta muito rápida e intuitiva na plataforma.

Resultado leitura digital 24V

A saída digital com o controle de velocidade também tem resposta rápida e muitíssimo precisa. Testei de 0 a 100% com degrau a cada 10%. O valor lido no osciloscópio, tanto PWM quanto analógico 0 a 3,3V foram satisfatórios até para os mais exigentes.

Resultado da saída digital

Configuração na dashboard
Sets na dashboard.

Segue, no detalhe, a configuração na dashboard e o resultado obtido.

Resultado
Resultado no oscilosópio – Em amarelo o sinal PWM e em azul a saída analógica após o filtro.

O histórico também registrou com muita eficiência. Sugiro que você altere o período registrado para o melhor cenário dentro da sua aplicação.

Históricos na dashboard
Históricos na dashboard

E então, gostou de conhecer o projeto? Deixe um comentário abaixo dizendo o que achou e em qual aplicação você usaria ou modificaria. 

Para mais conteúdos como este, acesse:

Até a próxima!

Faça seu comentário

Acesse sua conta e participe