top of page
Crescer (fundo transparente)_Negativo_pn

Como utilizar IHM com ESP32

No mundo da automação, as Interfaces Homem-Máquina (IHMs) desempenham um papel crucial. Agora, imagine ter disponível uma IHM de baixo custo que atenda a todas as suas necessidades. Isso é plenamente possível utilizando as IHMs da Samkoon.

 

A Samkoon possui uma vasta linha de dispositivos; suas IHMs oferecem um excelente custo-benefício e entregam todas as ferramentas necessárias para a aplicação em diversos projetos.

 

Neste blog, vamos ver como utilizar uma IHM juntamente com um ESP32 para acionar relés e ler sensores.



Sumário



1. O que é IHM e para que serve?


A Interface Homem-Máquina (IHM) refere-se a um dispositivo ou sistema que possibilita a interação entre um operador humano e uma máquina, geralmente um computador ou um sistema automatizado. A IHM permite que os usuários controlem e monitorem equipamentos e processos de maneira intuitiva, utilizando elementos visuais e interativos.

 

Essencialmente, trata-se de uma tela (que pode ser “touch screen” ou não) que oferece uma variedade de ferramentas, tais como acompanhamento do tempo de produção, monitoramento de processos, visualização de tendências, dados e outras informações relevantes. Uma IHM proporciona uma eficiente gestão e análise de dados em diversos contextos.

 

Na figura a seguir, podemos ver um exemplo de IHM que está monitorando três entradas e controlando três saída.




2. Conhecendo a IHM Samkoon

 

Os vários modelos de IHM da Samkoon representam produtos de alta qualidade em interface homem-máquina. Cada IHM integra a unidade de CPU, unidade de entrada e saída, tela de exibição, memória, entre outras funcionalidades. Eles podem ser amplamente utilizados em diversos sistemas de diferentes setores.

 

Neste blog, vamos destacar o modelo EA-043A. Esta IHM conta com um processador ARM9 que opera a uma velocidade de clock de até 300MHz. Possui uma única porta COM integrada que oferece opções de comunicação RS232/422/485, e também suporte adicional para downloads USB. Além disso, dispõe de mecanismos de segurança para uma proteção avançada de dados, garantindo maior segurança e confiabilidade. Nas figuras a seguir, é possível observar como é a IHM.



Portanto, para utilizá-la, é necessário apenas uma rede RS485 ou uma conexão direta via RS232. No entanto, é essencial seguir algumas regras para a comunicação. Neste blog, optaremos por utilizar o protocolo Modbus para estabelecer a comunicação entre a IHM e o ESP32.

 

Adicionalmente, é preciso configurar a interface gráfica e outros parâmetros da IHM. Para isso, fazemos uso do software SATOOL, disponível para download aqui. No software, definimos como será realizada a comunicação com a IHM e criamos todo o design da interface do dispositivo, posicionando os componentes e configurando-os. A figura a seguir oferece uma visão geral do programa.



No centro, criamos o design da tela do dispositivo, posicionando os componentes e outros elementos gráficos. Isso pode ser visualizado em destaque na figura a seguir.



Na lateral esquerda, é possível realizar alterações em alguns parâmetros do projeto, com destaque especial para o "COM1 Link", onde definimos a forma como a comunicação com a IHM será estabelecida. Além disso, podemos ajustar outras configurações da IHM na aba "Setting", conforme ilustrado na figura a seguir.



No menu à direita, encontram-se os componentes disponíveis para a construção da nossa interface. Na figura a seguir, apresentamos os componentes da aba "Controls", os quais são utilizados para realizar leituras e operações diretamente no dispositivo. Já na aba "Base Controls", estão disponíveis componentes como texto, linhas e formas geométricas.




3. Criando interface para IHM Samkoon


Para este exemplo, também utilizaremos um sensor capacitivo, três relés, uma entrada optoacoplada e um sensor de temperatura. O controle dos relés e a exibição dos valores dos sensores serão realizados pela IHM.

 

O primeiro passo é criar um novo projeto. Para isso, seguimos para "File" e depois "New", conforme mostrado na figura a seguir.



Na janela que se abrirá, devemos definir um nome para o projeto, o local onde será salvo e, principalmente, o modelo da IHM a ser utilizado. Na figura a seguir, podemos observar como isso foi feito em nosso projeto.


Na etapa seguinte, iremos definir como será estabelecida a comunicação com o dispositivo. As configurações utilizadas podem ser visualizadas na figura a seguir.



Por fim, vamos configurar o básico da tela do dispositivo, incluindo o nome e a cor do fundo. Isso pode ser observado na figura a seguir.



Agora podemos montar a interface do nosso supervisório. No entanto, antes de prosseguir, vamos finalizar a configuração da comunicação com a IHM. Para isso, basta dar dois cliques em “COM1 Link”.



Na janela que abrirá, vamos alterar a configuração para RS232. Isso pode ser visualizado na figura a seguir.



Vamos começar colocando o projeto na tela do Monitor CPB32h. Para isso, utilizaremos o componente "Text", disponível na aba "Base Controls", conforme mostrado na figura a seguir.



Ao clicarmos no componente, abrirá a janela de configuração dele. Nela, definiremos o tamanho do texto, a cor, a fonte e outros detalhes. As configurações utilizadas podem ser visualizadas na figura a seguir.



Agora, basta clicar em OK e posicionar a caixa de texto na tela do projeto. O resultado pode ser visto na figura a seguir.



Vamos utilizar a mesma ferramenta para adicionar os outros textos relevantes do projeto. O resultado pode ser visto na figura a seguir.



Até agora, concluímos apenas a parte inicial. O próximo passo é adicionar os motores para acionar os relés. O componente que será utilizado é o "Bit Button", disponível na aba "Controls", conforme mostrado na figura a seguir.



Primeiramente, vamos informar ao componente o endereço da bobina que ele irá controlar. Vamos utilizar o endereço 0x0, onde o primeiro "0" indica que estamos definindo o valor de uma bobina e o segundo "0" representa o endereço da bobina. Além disso, em "Function", devemos selecionar "Invert". Essas configurações podem ser vistas em destaque na figura a seguir.



Agora podemos alterar a aparência do botão. Na janela, podemos ver como ele fica na posição desligada. Clicando em "ON" na propriedade "State", podemos ver como ele ficará na posição ligada, conforme mostrado na figura a seguir.



Agora vamos alterar a cor do botão para verde na propriedade “BG Color”. O resultado pode ser visto na figura a seguir.



Agora é necessário somente clicar em OK e posicionar o botão na tela, como pode ser visto na figura a seguir.



Agora vamos copiar e colar esse botão para os outros relés.



Para finalizar a configuração dos novos botões, vamos trocar o endereço da bobina acionada por eles. Clique duas vezes em cada um deles e altere os endereços para 0x1 e 0x2.



Podemos também alterar o texto do botão na aba "Label" e fazer outras configurações nas demais abas.

 

Agora, vamos adicionar os indicadores para ler as entradas do CLP. Para isso, utilizaremos o componente "Bit Lamp". Na figura a seguir, podemos ver o componente na aba "Controls"



Ao clicar no componente, abrimos a janela de propriedades dele. Primeiramente, vamos definir seu endereço. Iremos utilizar o endereço 1x0, onde o "1" indica que iremos ler um registrador binário do CLP, e o "0" é o endereço deste registrador. O resultado pode ser visto na figura a seguir.



Para diferenciar este componente, vamos alterar o seu formato. Para isso, vamos em "Shape" e escolher o formato redondo, conforme mostrado na figura a seguir.



Também vamos alterar a cor do indicador quando estiver ligado, seguindo o mesmo procedimento que fizemos anteriormente.



Agora, clique em OK e posicione o componente na tela. Na figura a seguir, podemos ver que o texto "OFF", no tamanho atual, não cabe no componente.



Para alterar o tamanho do texto, abra as propriedades dele e altere o tamanho na aba "Label". Selecione o tamanho 12 na sub-aba "Status0 Text", conforme pode ser visto na figura a seguir.



Se desejar alterar o tamanho para a posição ligada, vá na sub-aba "Status1 Text". Depois de clicar em OK, vamos copiar o "Bit Lamp" para o sensor 2. Não se esqueça de alterar o endereço do componente para 1x1.



O próximo componente que vamos adicionar é o "Meter". Na figura a seguir, podemos vê-lo na aba "Controls".



Vamos abrir as propriedades dele. Primeiro, vamos definir o endereço para 3x0. O "3" indica que estamos lendo um registrador de entrada analógica, e o "0" é o endereço desta entrada.



Agora, vamos alterar os limites do medidor para que ele vá de 0 a 100 e ajustar as cores do medidor. Como podemos ver na figura a seguir.



Agora, podemos posicionar o componente na tela. O resultado pode ser visto na figura a seguir.



Na sequência, podemos carregar a interface na IHM. Para isso, precisamos alimentá-la e conectá-la ao computador utilizando a porta USB B, mostrada na figura a seguir.



Para o Windows reconhecer o dispositivo, será necessário instalar o seu driver manualmente. Para fazer o download do driver da IHM, clique no link a seguir.


Driver IHM Samkoon
.rar
Download RAR • 4.09MB

Após executar o instalador, a IHM será reconhecida pelo computador. Para carregar a interface na IHM, clique em "compile+download", mostrado em destaque na figura a seguir.



Se a compilação ocorrer corretamente, a seguinte janela será exibida. Para fazer o download da interface para a IHM, clique em "download".



Se tudo ocorrer corretamente, este será o resultado.



Além disso, a IHM irá reiniciar e apresentar a interface. Agora podemos programar o ESP32 para comunicar-se com a IHM.


4. ESP32 comunicando com IHM Samkoon


Agora que a IHM já está em funcionamento, podemos começar a trabalhar no firmware do ESP32. A comunicação com a IHM será feita via RS232 utilizando o protocolo MODBUS. Para facilitar o processo, estamos utilizando a CPB32h. A CPB32h é uma solução em hardware homologada pela Anatel que viabiliza o emprego do ESP32 de maneira profissional em qualquer produto ou equipamento, independentemente da área de atuação.

 

Na figura a seguir, podemos ver como será feita a ligação da IHM e dos sensores à CPB32h.



A tabela a seguir mostra os endereços das bobinas e registradores que foram utilizados neste projeto. Ela foi montada com base nas configurações utilizadas na criação da interface da IHM.



Para este código, vamos utilizar uma modificação da biblioteca ModbusSerial. Portanto, não faça o download dela pelo gerenciador de bibliotecas da IDE do Arduino. Realize o download das bibliotecas no link a seguir.


Bibliotecas
.rar
Download RAR • 25KB

Depois, instale-as manualmente nos arquivos do Arduino. Para fazer a instalação, você deve ir na pasta documentos -> Arduino -> libraries e colocar as bibliotecas dentro desta pasta, como mostrado na figura a seguir.



No código, o primeiro passo é incluir as bibliotecas necessárias e, em seguida, definir os pinos dos dispositivos.


#include <Modbus.h>
#include <ModbusSerial.h>

// Used Pins
const int rele1 = 32;
const int rele2 = 33;
const int rele3 = 4;

const int temperatura = A0;

const int sensor_cap0 = 18;
const int sensor_cap1 = 23;

Em seguida, definimos o endereço do dispositivo (ESP32), dos relés e dos sensores, como mostrado a seguir.


const byte SlaveId = 1;

const int coil0 = 0;
const int coil1 = 1;
const int coil2 = 2;

const int sensor_temp0 = 0;

const int input_opt0 = 0;
const int input_opt1 = 1;

Em seguida, criamos o objeto da classe ModbusSerial que será utilizado para comunicação.

 

ModbusSerial mb;

 

Na função setup, vamos configurar as comunicações serial e Modbus, juntamente com os pinos de entrada e saída. Além disso, vamos configurar os tipos e endereços dos registradores.


void setup() {
  Serial.begin (9600);

  mb.config(&Serial2, 9600, SERIAL_8N1);
  mb.setSlaveId(SlaveId);

  pinMode (rele1, OUTPUT);
  pinMode (rele2, OUTPUT);
  pinMode (rele3, OUTPUT);

  pinMode (sensor_cap0, INPUT_PULLUP);
  pinMode (sensor_cap1, INPUT_PULLUP);

  mb.addCoil (coil0);
  mb.addCoil (coil1);
  mb.addCoil (coil2);

  mb.addIreg (sensor_temp0);

  mb.addIsts (input_opt0);
  mb.addIsts (input_opt1);
}

Na hora de configurar os endereços, devemos também especificar o que é cada um. Utilizamos “addCoil” para adicionar uma bobina, “addIreg” para um registrador de entrada (entrada analógica) e “addIsts” para status de entrada (entrada binária).

 

Na função loop, vamos utilizar o método "task" para responder às requisições e alterar os registradores se necessário. Ele deve ser chamado apenas uma vez, no início do loop.


void loop() {
  mb.task();

  mb.Ireg(sensor_temp0, map(analogRead(temperatura),0,1023,0,3.3)*100.0);

  digitalWrite (rele1, mb.Coil (coil0));
  digitalWrite (rele2, mb.Coil (coil1));
  digitalWrite (rele3, mb.Coil (coil2));

  mb.Ists(input_opt0, !digitalRead(sensor_cap0));
  mb.Ists(input_opt1, !digitalRead(sensor_cap1));
  
  delay(15);
}

Depois, vamos escrever no registrador “sensor_temp0” o valor dos sensores de temperatura, ligar ou desligar os relés de acordo com o valor dos registradores “Coil” e alterar os valores dos registradores “input_opt0” e “input_opt1” com base nas entradas dos sensores.

 

O código completo pode ser visto a seguir:


#include <Modbus.h>
#include <ModbusSerial.h>

// Used Pins
const int rele1 = 32;
const int rele2 = 33;
const int rele3 = 4;

const int temperatura = A0;

const int sensor_cap0 = 18;
const int sensor_cap1 = 23;

const byte SlaveId = 1;

const int coil0 = 0;
const int coil1 = 1;
const int coil2 = 2;

const int sensor_temp0 = 0;

const int input_opt0 = 0;
const int input_opt1 = 1;

ModbusSerial mb;

void setup() {
  Serial.begin (9600);

  mb.config(&Serial2, 9600, SERIAL_8N1);
  mb.setSlaveId(SlaveId);

  pinMode (rele1, OUTPUT);
  pinMode (rele2, OUTPUT);
  pinMode (rele3, OUTPUT);

  pinMode (sensor_cap0, INPUT_PULLUP);
  pinMode (sensor_cap1, INPUT_PULLUP);

  mb.addCoil (coil0);
  mb.addCoil (coil1);
  mb.addCoil (coil2);

  mb.addIreg (sensor_temp0);

  mb.addIsts (input_opt0);
  mb.addIsts (input_opt1);
}

void loop() {

  mb.task();

  mb.Ireg(sensor_temp0, map(analogRead(temperatura),0,1023,0,3.3)*100.0);

  digitalWrite (rele1, mb.Coil (coil0));
  digitalWrite (rele2, mb.Coil (coil1));
  digitalWrite (rele3, mb.Coil (coil2));

  mb.Ists(input_opt0, !digitalRead(sensor_cap0));
  mb.Ists(input_opt1, !digitalRead(sensor_cap1));
  
  delay(15);
}

Nas imagens a seguir, podemos observar como ficou o exemplo utilizado neste blog.





Neste blog, apresentamos um exemplo que demonstra o básico do que pode ser feito com a IHM da Samkoon. No entanto, ela possui potencial para ser utilizada em diversas outras aplicações. Para saber mais sobre essa poderosa ferramenta, sugerimos que assista a este vídeo.

 


 

Posts recentes

Ver tudo

Blog Crescer

bottom of page