Você está na página 1de 106

UNIVERSIDADE FEDERAL DO PARANÁ

ELIELTON MATIAS DA SILVA

DESENVOLVIMENTO DE UM SISTEMA DE MEDIÇÃO REMOTA DE ENERGIA


UTILIZANDO IOT E ESP-32

CURITIBA
2021
ELIELTON MATIAS DA SILVA

DESENVOLVIMENTO DE UM SISTEMA DE MEDIÇÃO REMOTA DE ENERGIA


UTILIZANDO IOT E ESP-32

Trabalho de Conclusão de Curso apresentado ao


Curso de Graduação em Engenharia Elétrica,
Setor de Tecnologia da Universidade Federal do
Paraná, como requisito à obtenção do título de
Bacharel em Engenharia Elétrica.

Orientador: Prof. Dr. Rogers Demonti.

CURITIBA
2021
TERMO DE APROVAÇÃO

ELIELTON MATIAS DA SILVA

DESENVOLVIMENTO DE UM SISTEMA DE MEDIÇÃO REMOTA DE ENERGIA


UTILIZANDO IOT E ESP-32

Trabalho de Conclusão de Curso apresentado ao Curso de Graduação em


Engenharia Elétrica da Universidade Federal do Paraná como requisito à obtenção
do título de Bacharel em Engenharia Elétrica, pela seguinte banca examinadora:

______________________________________
Prof. Dr. Rogers Demonti
Orientador – Departamento de Engenharia Elétrica: UFPR

______________________________________
Prof. Dr. Cleverson Luiz da Silva Pinto
Departamento de Engenharia Elétrica, UFPR

______________________________________
Prof. Dr. Gideon Villar Leandro
Departamento de Engenharia Elétrica, UFPR

Curitiba, 29 de julho de 2021.


AGRADECIMENTOS

Em primeiro lugar, а Deus, qυе fez com que meus objetivos fossem
alcançados, durante todos os meus anos de estudos.
Ao meu orientador, Prof. Dr. Rogers Demonti, pelo acompanhamento,
orientação e ter acreditado e incentivado a continuidade do projeto.
Ao Curso de Engenharia Elétrica, do Setor de Tecnologia da Universidade
Federal do Paraná, na pessoa do coordenador Prof. Dr Bernardo Leite.
A minha família, que me incentivou nos momentos difíceis e compreenderam
a minha ausência enquanto eu me dedicava à realização deste projeto.
Ao meu irmão Ebner, que contribuiu consideravelmente na concepção do
projeto, compartilhando sua experiência na área de tecnologia.
Aos amigos e colegas de trabalho que sempre estiveram ao meu lado, pela
amizade incondicional e pelo apoio demonstrado ao longo de todo o período de
tempo em que me dediquei a este projeto.
“Se tu o desejas, podes voar,
só tens de confiar muito em ti”.
Steve Jobs
RESUMO

A Energia Elétrica representa uma das formas de energia mais utilizada pela
humanidade nos dias atuais, e então é de grande relevância o estudo e
implementação de tecnologias voltadas para medir suas grandezas. Considerando
então este tema, se desenvolveu este projeto que visa implementar um sistema
remoto de monitoramento de energia elétrica de forma remota, utilizando técnicas de
interface serial, microcontrolador ESP32 e IoT( Internet das Coisas). O projeto
consiste em instalar um medidor de energia que realizará a aquisição dos dados no
quadro de medição no qual ele for instalado, e medir grandezas como consumo de
energia (kWh), potência (kW), corrente (A), tensão (V) e fator de potência(FP) e,
mediante a interface serial, esses dados serão requisitados e recebidos por um
Microcontrolador na configuração Master-Slave, sendo que, após aquisição, este
enviará as informações a Web, na forma de eventos, utilizando para isto o protocolo
MQTT. Há então o desenvolvimento e a utilização de uma API ( Interface de
Programação de Aplicações) que fará a coleta desses eventos recebidos no MQTT,
o armazenamento em um banco de dados, e também o fornecimento desses dados
a uma aplicação Front End. Essa, por sua vez, exibirá em um site Web, e de forma
amigável ao usuário, as informações em tempo real e acumulada, em formas de
gráficos e tabelas. Toda a aplicação está armazenada em um servidor da AMAZON,
para ser acessado online de qualquer lugar do mundo e todos os procedimentos de
desenvolvimento estão detalhados neste projeto.

Palavras-chave: Medição de Energia, IoT, ESP32, Back-End, Front-End, API, MQTT.


ABSTRACT

Electric Energy is considered one of the most used forms of energy by humanity
today, and so the study and implementation of technologies aimed at measuring its
magnitude is of great importance. Considering, then, this matter, this project was
developed that aims to implement a remote system for monitoring electrical energy
remotely, using concepts of serial interface, ESP32 microcontroller and IoT (Internet
of Things). The project consists of installing an energy meter that will carry out the
acquisition of data in the measurement frame in which it is installed, measuring
quantities such as energy consumption (kWh), power (kW), current (A), voltage (V)
and power factor (PF) and, through a serial interface, this data will be requested and
received by a Microcontroller in the Master-Slave configuration, and, after acquisition,
it will send the information to the Web, in the form of events, using the MQTT
protocol. Then there is the development and use of an API (Application Programming
Interface) that will collect these events received in MQTT, store them in a database,
and also supply this data to a Front End application. in turn, it will display on a
website, in a user-friendly way, the information in the form of graphs and tables, in
real time, and in an accumulated form. The entire application is stored on an
AMAZON server, to be accessed online and from anywhere in the world and all
development procedures are detailed in this project.

Keywords: Energy Measurement, IoT, ESP32, Back-End, Front-End, API, MQTT.


LISTA DE FIGURAS
FIGURA 1 - SENSORES DE CORRENTE E SENSORES DE TENSÃO...................26
FIGURA 2 - PINOS ESP32.........................................................................................30
FIGURA 3 - COMUNICAÇÃO SERIAL X COMUNICAÇÃO PARALELA....................31
FIGURA 4 - FILTRAGEM DE SINAIS PADRÃO RS485.............................................31
FIGURA 5 - QUADROS MODBUS..............................................................................34
FIGURA 6 - SISTEMA MQTT......................................................................................35
FIGURA 7 - SINTAXE DA REGRA CSS......................................................................39
FIGURA 8 - EXEMPLO DE USO REGRA CSS..........................................................39
FIGURA 9 - FLUXOGRAMA DO PROJETO DE MEDIÇÃO REMOTA ENERGIA......43
FIGURA 10 - DIAGRAMA DE BLOCOS FUNCIONAMENTO MEDIDOR DDS238-4 47
FIGURA 11 - DIAGRAMA DE INSTALAÇÃO MEDIDOR – RS485-TTL E ESP-32....51
FIGURA 12 - INSTALAÇÃO FÍSICA PARTE 1............................................................52
FIGURA 13 - INSTALAÇÃO FÍSICA PARTE 2............................................................53
FIGURA 14 - INSTALAÇÃO FÍSICA PARTE 3............................................................53
FIGURA 15 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 1........................54
FIGURA 16 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 2........................55
FIGURA 17 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 3........................55
FIGURA 18 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 4........................56
FIGURA 19 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 5........................56
FIGURA 20 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 6........................57
FIGURA 21 - CREDENCIAS – CONSOLE EC2.........................................................59
FIGURA 22 - LAUNCHE INSTANCES........................................................................59
FIGURA 23 - FREE TIER ONLY - AWS......................................................................60
FIGURA 24 - SERVIDOR INICIADO AWS..................................................................60
FIGURA 25 - CRIAÇÃO DA CHAVE DE ACESSO.....................................................61
FIGURA 26 - SECURITY GROUP..............................................................................61
FIGURA 27 - REGRAS SECURITY GROUP..............................................................62
FIGURA 28 - ACESSO SERVIDOR LINUX POR SSH...............................................62
FIGURA 29 - ACESSO SERVIDOR LINUX POR SSH...............................................62
FIGURA 30 - CONTEINER RABBITMQ - DOCKER...................................................68
FIGURA 31 - CONFIGURAÇÃO S3 AWS...................................................................69
FIGURA 32 - DEIXANDO O “BUCKET” COMO PÚBLICO.........................................69
FIGURA 33 - BUCKET CRIADO.................................................................................70
FIGURA 34 - PROPRIEDADES DO BUCKET............................................................70
FIGURA 35 - LINK DE ACESSO FUTURO AO FRONT-END.....................................70
FIGURA 36 - PERMISSIONS DO BUCKET................................................................71
FIGURA 37 - ARQUIVOS ADICIONADOS NO BUCKET POLICY.............................71
FIGURA 38 - UPLOAD DE ARQUIVOS DO FRONT END NO BUCKET...................71
FIGURA 39 - UPLOAD DE ARQUIVOS DO FRONT END NO BUCKET PARTE 2. . .72
FIGURA 40 - ESTRUTURA DA API.............................................................................72
FIGURA 41 - ESTRUTURA ARQUIVO API.................................................................74
FIGURA 42 - ARQUIVO MQTT IMPORTADO NA API................................................74
FIGURA 43 - ARQUIVO RUNMQTT...........................................................................75
FIGURA 44 - VARIÁVEIS E VALORES RECEBIDOS RABBITMQ............................75
FIGURA 45 - FUNÇÃO PARA LIMPAR VALORES DAS VARIÁVEIS.........................76
FIGURA 46 - FUNÇÃO PARA VALIDAR O PREENCHIMENTO DAS VARIÁVEIS....76
FIGURA 47 - FUNÇÃO PARA INSERIR VALORES NO BANCO DE DADOS...........77
FIGURA 48 - FUNÇÃO PARA CONECTAR NAS FILAS DO RABBITMQ..................77
FIGURA 49 - FUNÇÃO PARA OUVIR EVENTOS RABBITMQ..................................78
FIGURA 50 - FUNÇÃO PARA EXPORTAR “RUNMQTT”...........................................79
FIGURA 51 - ARQUIVO SERVER.TS.........................................................................80
FIGURA 52 - ESTRUTURA DA APLICAÇÃO WEB – FRONT END...........................81
FIGURA 53 - CRIAÇÃO DAS TABELAS.....................................................................82
FIGURA 54 - CRIAÇÃO DOS GRÁFICOS DE ENERGIA..........................................82
FIGURA 55 - CRIAÇÃO DOS GRÁFICOS DA CORRENTE ELÉTRICA....................83
FIGURA 56 - CRIAÇÃO DOS GRÁFICOS DA TENSÃO ELÉTRICA.........................83
FIGURA 57 - CRIAÇÃO DOS GRÁFICOS DAS POTÊNCIAS...................................84
FIGURA 58 - IMPORTAÇÃO DOS SCRIPTS – ALIMENTAÇÃO DE GRÁFICOS......84
FIGURA 59 - DETALHAMENTO GRÁFICO DA CORRENTE ELÉTRICA..................85
FIGURA 60 - DETALHAMENTO GRÁFICO DA ENERGIA CONSUMIDA..................86
FIGURA 61 - DETALHAMENTO CRIAÇÃO DA TABELA DO FRONT-END...............87
FIGURA 62 - DETALHAMENTO ARQUIVO DE CRIAÇÃO DO SOCKET..................88
FIGURA 63 - DIAGRAMA COMPLETO DO PROJETO..............................................89
FIGURA 64 - RESULTADO FRONT-END PARTE 1...................................................90
FIGURA 65 - RESULTADO FRONT-END PARTE 2...................................................90
FIGURA 66 - RESULTADO FRONT-END PARTE 3...................................................91
FIGURA 67 - RESULTADO FRONT-END PARTE 3...................................................91
FIGURA 68 - CORRENTE ELÉTRICA E TENSÃO ELÉTRICA INICIAL....................92
FIGURA 69 - POTÊNCIA ATIVA E POTÊNCIA REATIVA INICIAL..............................93
FIGURA 70 - FATOR DE POTÊNCIA E FREQUÊNCIA INICIAL................................93
FIGURA 71 - POTÊNCIA ATIVA, REATIVA E APARENTE INICIAIS..........................94
FIGURA 72 - TESTE 1 - CORRENTE E TENSÃO ELÉTRICA...................................95
FIGURA 73 - TESTE 1 – POTÊNCIAS ATIVA, REATIVA E APARENTE....................95
FIGURA 74 - TESTE 2 - CORRENTE E TENSÃO ELÉTRICA...................................96
FIGURA 75 - TESTE 2 – POTÊNCIAS ATIVA, REATIVA E APARENTE....................97
FIGURA 76 - TESTE 2 – FATOR DE POTÊNCIA E FREQUÊNCIA...........................98
FIGURA 77 - TESTE 3 - CORRENTE E TENSÃO ELÉTRICA...................................98
FIGURA 78 - TESTE 3 – POTÊNCIAS ATIVA, REATIVA E APARENTE....................99
FIGURA 79 - TESTE 3 - FATOR DE POTÊNCIA E FREQUÊNCIA............................99
FIGURA 80 - TESTE 4 – CORRENTE E TENSÃO ELÉTRICA................................100
FIGURA 81 - TESTE 4 – POTÊNCIAS ATIVA, REATIVA E APARENTE..................101
LISTA DE QUADROS

QUADRO 1: FRAME MODBUS..................................................................................32


QUADRO 2: FUNÇÕES MODBUS.............................................................................33
QUADRO 3: TABELA DE REGISTROS MEDIDOR DDS-238-4.................................47
QUADRO 4: FRAME MODBUS -SOLICITAÇÃO -MASTER→ SLAVE......................48
QUADRO 5: FRAME - MODBUS -RESPOSTA -SLAVE → MASTER........................48
QUADRO 6: INFORMAÇÕES EXIBIDAS NO DISPLAY MEDIDOR..........................49
LISTA DE ABREVIATURAS OU SIGLAS

ANEEL - Agência Nacional de Energia Elétrica


API - Interface de Programação de Aplicações
CA - Corrente Alternada
CC - Corrente Contínua
CI - Circuito Integrado
CONFAZ - Conselho Nacional da Política Fazendária
CSS - Cascading Style Sheets
DC - Direct Current
DNS - Domain Name System
EC2 - Amazon Elastic Compute Cloud
FV - Fotovoltaico
GD - Geração Distribuída
HTML - HyperText Markup Language
ICMS -Imposto sobre Circulação de Mercadoria e Serviços
IP - Internet Protocol
MQTT - Message Queuing Telemetry Transport
NBR - Norma Brasileira
PROINFA - Programa de Incentivo às fontes Alternativas de Engenharia Elétrica
PWM - Pulse Width Modulation
RMS - Root Mean Square
RTU - Remote Terminal Unit
SGBD - Sistemas de Gerenciamento de Banco de Dados
SQL - Linguagem de Consulta Estruturada
SSH - Secure Shell
SUMÁRIO

1 INTRODUÇÃO...........................................................................................14
1.1 JUSTIFICATIVA..........................................................................................15
1.2 OBJETIVOS...............................................................................................16
1.2.1 Objetivo geral.............................................................................................16
1.2.2 Objetivos específicos.................................................................................16
1.3 METODOLOGIA.........................................................................................17
2 REVISÃO DE LITERATURA.....................................................................19
2.1 ENERGIA ELÉTRICA.................................................................................19
2.2 POTÊNCIA ELÉTRICA...............................................................................19
2.2.1 Potência Aparente......................................................................................24
2.2.2 Potência Ativa.............................................................................................24
2.2.3 Potência Reativa........................................................................................25
2.2.4 Fator De Potência......................................................................................25
2.3 MEDIÇÃO DE ENERGIA...........................................................................26
2.4 INTERNET DAS COISAS ( IOT)................................................................27
2.4.1 Microcontrolador ESP32............................................................................28
2.4.2 Comunicação Serial...................................................................................30
2.4.3 Protocolo MODBUS...................................................................................32
2.4.4 Protocolo MQTT.........................................................................................34
2.4.5 Banco de Dados.........................................................................................35
2.4.6 Linguagem HTML.......................................................................................37
2.4.7 Linguagem CSS.........................................................................................38
2.4.8 Linguagem Javascript................................................................................40
3 PROJETO DO SISTEMA...........................................................................43
3.1 DESCRIÇÃO GERAL.................................................................................43
3.1.1 Dados do Medidor......................................................................................44
3.1.1.1 Medidor Siemens.......................................................................................44
3.1.1.2 Medidor TOMZIN HIKING DDS238-4-W....................................................46
4 IMPLEMENTAÇÃO DAS FUNCIONALIDADES.......................................50
4.1.1 Etapa 1 – Instalação Física Medidor..........................................................50
4.1.2 Etapa 1 – Programação Microcontrolador.................................................54
4.1.3 Etapa 3 – Desenvolvimento da programação Back-End;..........................57
4.1.3.1 Passo 1 – Ambientação - Configuração do Servidor EC2.........................59
4.1.3.2 Passo 2 – Ambientação - Novo usuário servidor Linux:............................63
4.1.3.3 Passo 3 – Ambientação - Instalando NodeJS no servidor Ubuntu:...........63
4.1.3.4 Passo 4 – Ambientação - Instalando Docker no servidor Ubuntu:............63
4.1.3.5 Passo 5 – Ambientação - docker-compose no servidor Ubuntu:...............64
4.1.3.6 Passo 6 – Ambientação - Instalando PM2:................................................64
4.1.3.7 Passo 7 – Ambientação - Instalando NGINX:............................................64
4.1.3.8 Passo 8 – Ambientação - Banco de dados MariaDB com DOCKER........66
4.1.3.9 Passo 9 – Ambientação - Criando banco de dados...................................66
4.1.3.10 Passo 10 – Ambientação - Broker MQTT RabbitMQ com Docker.............67
4.1.3.11 Passo 11 – Ambientação - Iniciando a API com o PM2.............................68
4.1.3.12 Passo 12 – Ambientação - Configurando S3 para hospedar o Front-End 69
4.1.3.13 Programação da API..................................................................................72
4.1.4 ETAPA 4 - PROGRAMAÇÃO FRONT END...............................................80
5 RESULTADOS...........................................................................................90
5.1.1 APRESENTAÇÃO FRONT-END................................................................90
5.1.2 TESTES......................................................................................................91
5.1.2.1 Cenário Inicial.............................................................................................92
5.1.2.2 Teste 01......................................................................................................94
5.1.2.3 Teste 02......................................................................................................96
5.1.2.4 Teste 03......................................................................................................98
5.1.2.5 Teste 04....................................................................................................100
5.1.3 ANÁLISE DOS RESULTADOS................................................................101
6 CONCLUSÃO..........................................................................................102
REFERÊNCIAS........................................................................................104
14

1 INTRODUÇÃO

A Energia Elétrica representa uma das formas de energia que é mais


utilizada pela humanidade, sendo convertida em diversas formas para vários usos
necessários na vida moderna.
Considerando os desafios climáticos que o mundo tem vivenciado nos
últimos anos, preocupações com eficiência energética, energias renováveis e
sustentabilidade tem sido cada vez mais frequentes.
Neste projeto, se propõe estudar e implementar um sistema de medição
inteligente para monitoramento de consumo de energia elétrica através da
implantação de um medidor de energia, com integração Web, armazenada em
nuvem, para fornecer informações online e em tempo real.
O medidor realizará a aquisição dos dados no quadro de medição no qual
ele for instalado, medindo grandezas como consumo de energia (kWh), potência
(kW), corrente (A), tensão (V) e fator de potência(FP), dentre outros e então será
implementada uma interface física de coleta desses dados nos registradores do
medidor, mediante o uso do microcontrolador ESP32 ™. A coleta e envio dos dados
do medidor ao microcontrolador será por meio da interface serial RS485 e do
protocolo ModBus RTU.
Será implementado então um sistema de gerenciamento de mensagens,
utilizando o protocolo MQTT, através do software RabbitMQ, que receberá todos os
eventos enviados pelo microcontrolador. Essa aplicação será hospedada em um
servidor online da AMAZON. Além deste serviço, também será desenvolvido e
implementado neste servidor um Banco de Dados, que foi escolhido como sendo o
MariaDB™, que armazenará todas as informações lidas.
Para leitura do Banco de Dados e gerenciamento das informações será
desenvolvida uma Interface de Programação de Aplicações, conhecida como API,
que fará o gerenciamento de todos os sistemas, desde a gravação das informações,
posterior leitura no banco de dados, até a disponibilização para o usuário, na
aplicação de Front-End. Essa, por sua vez, será desenvolvida visando tornar a
visualização gráfica ao usuário, amigável e de fácil entendimento. Para isto, a API
fornecerá as informações a uma aplicação HTML, que junto com as devidas
15

formatações de hipertexto, e também programas em JavaScript, gerará tabelas e


gráficos em tempo real, para visualização do usuário.
Os procedimentos serão detalhados e a bibliografia básica necessária será
revisada.
Espera-se que este projeto seja de grande utilidade para quem precisar
consultá-lo e contribua com a área de pesquisas sobre o assunto.

1.1 JUSTIFICATIVA

Considerando que, segundo dados da ANEEL ( 2021), 63,8% da energia


elétrica gerada atualmente no Brasil provém das usinas hidrelétricas e, também que
nos últimos anos o país tem passado por várias crises hídricas, como por exemplo a
emergência hídrica de 2020 e 2021 que fez com que o SNM ( Sistema Nacional de
Meteorologia) emitisse alertas de emergências hídricas, em maio/2021, esse cenário
mostra que o mercado de geração de energia passa por instabilidades, o custo da
energia tende a aumentar e medidas de economias de energia elétrica, assim como
medições constantes, nunca antes se mostraram tão urgentes.
Além disto, a energia elétrica é um recurso fundamental para as atividades
das empresas, residências, e, sem ela, as operações ficam completamente
interrompidas e geram prejuízos ou transtornos de grandes proporções. Soma-se a
isto a carência que se tem, nas plantas industriais e até residenciais, de informações
que auxiliem no gerenciamento da energia elétrica de forma detalhada, a falta de
dados para se mensurar o perfil de consumo, o que converge na dificuldade de se
implantar medidas eficientes de economia de energia e de se conferir valores
cobrados nas faturas mensais vindas da concessionária.
Então, isso corrobora a hipótese de que são de extrema relevância, medidas
que visam trazer para os gestores das plantas ou das residências informações que
facilitem a gestão do consumo de energia e também da qualidade desta.
Essas informações, então, podem contribuir para futuras decisões sobre
melhoria da eficiência energética dos equipamentos, implantação de geração
distribuída, implantação de planos de contingência para casos de falta de energia,
planos de consumo de energia, ou até mesmo medidas para aumentar estabilidade
dos sistemas de energia.
16

O projeto que será desenvolvido se apresenta como relevante, já que em


primeiro lugar possibilitará apresentar resultados detalhados de como implementar
uma sistemática que permita monitorar, em tempo real, informações sobre consumo
de energia elétrica, além de outras grandezas ( Tensão Elétrica, Corrente Elétrica,
Fator de Potência, Potência Ativa, Reativa e Aparente), através de uma interface
amigável, que permita que qualquer usuário que tenha consigo o link de acesso,
possa ter disponível as informações referentes ao ponto de medição.
Uma segunda relevância do projeto se apresenta no sentido de possibilitar
que seus módulos possam ser reaproveitados em outras aplicações, ou seja, como
utilizará protocolo Modbus RTU para coleta dos dados do medidor, essa interface
Equipamento – Web poderá ser reutilizada em para outros estudos, ou para outros
equipamentos que possuam a interface Modbus RTU (por exemplo, Central de Ar
Condicionado), bastando, para isto, poucos ajustes de programação.

1.2 OBJETIVOS

1.2.1 Objetivo geral

Desenvolver de um Sistema Monitoramento Remoto de Energia Elétrica


com o uso de Microcontrolador ESP32 e conceitos de IOT.

1.2.2 Objetivos específicos

• Estudar das principais especificações de um Medidor de Energia Comercial


Modelo DDS238-4;
• Implementar de uma Interface Serial – Microcontrolador para Aquisição de
Informações do Medidor;
• Desenvolver uma Aplicação Back End ( MQTT, Banco de Dados e API) para
gerenciamento de Informações;
• Desenvolver uma Aplicação Front End ( Tabelas e Gráficos) para exibir
Informações ao Usuário;
• Testar, Medir e Analisar resultados obtidos;
17

1.3 METODOLOGIA

Para execução do trabalho, visando atingir seu objetivo, se propõe realizar


inicialmente uma pesquisa bibliográfica sobre Energia elétrica, Potência elétrica,
incluindo o triângulo de Potências, Internet das Coisas, incluindo pesquisa sobre o
microcontrolador a ser aplicado ( ESP32), comunicação serial ( Protocolo Modbus e
RS485), sistema de mensageria ( Broker MQTT). Será, ainda, realizada uma breve
revisão sobre desenvolvimento de software, com uso de técnicas envolvendo Banco
de dados, e sistema Web ( Javascript, HTML, CSS). Essa pesquisa bibliográfica será
realizada com objetivo de revisar conceitos fundamentais para melhor
desenvolvimento do projeto.
Será realizado, também, o estudo das especificações de alguns medidores
de energia Comercial, em especial o modelo DDS-238-4-W, com suas principais
configurações. Essa abordagem será necessária para se conhecer o funcionamento
do equipamento de medição a ser escolhido, e como essas funcionalidades serão
trabalhadas no projeto.
Então será elaborado um projeto que tenha algumas etapas, sendo a
primeira etapa referente a aquisição do Medidor Comercial e sua instalação física,
seguido da instalação do Conversor RS485-TTL ao medidor, para que converta
sinais para serem recebidos, pelo microcontrolador ESP32, no qual será conectado.
Esse RS-485-TTL será utilizado para converter dois tipos de protocolos de
dados, o RS-485 ( que é o protocolo de dados do medidor) com o TTL, que é o
protocolo de dados utilizado pelo microcontrolador ESP32.
Na segunda etapa ocorrerá a programação do Microcontrolador para coleta
dos dados, através da interface serial, e envio dos dados a Web, ao Broker MQTT
(após a sua instalação). Na terceira etapa serão desenvolvidos os softwares que
farão tanto a coleta dos dados no Broker MQTT, quanto o armazenamento no Banco
de Dados, sua leitura, e envio para a Web (API), e na quarta e última etapa será
desenvolvido da interface Web ( Front-End) para exibir ao usuário de forma amigável
os dados lidos.
Após elaboração do projeto, então será adquirido e instalado o medidor
escolhido e então realizado a conexão, na saída do Medidor, de um conversor
18

RS485-TTL e em seguida ao microcontrolador ESP32. Em seguida, então, será


desenvolvido o programa – em linguagem Javascript, ou C++ para ler as grandezas
armazenadas no registrador do medidor, captando através do microcontrolador
ESP32 essas informações e enviando, via web, ao servidor.
A partir deste momento, serão realizadas coletas de informações referentes
a energia a ser medida, tais como Corrente, Tensão, Fator de Potência, Potência
Ativa e Reativa.
Por fim, serão realizados alguns testes com cargas conhecidas e então
analisados os resultados.
19

2 REVISÃO DE LITERATURA

2.1 ENERGIA ELÉTRICA

A energia elétrica representa um dos principais pilares para o progresso


econômico de uma nação e, consequentemente, para o atendimento de
inúmeras necessidades da humanidade. Portanto, esse setor também tem
se preocupado com a geração, a transmissão, a distribuição de energia
elétrica e a construção de novos empreendimentos, como as usinas
hidrelétricas, de maneira a preservar o meio ambiente. Logo, a Engenharia
Elétrica tem apresentado significativas pesquisas e resultados de ações
pautadas na sustentabilidade (REZENDE, 2018, n.p).

As formas de transformação de outras formas de energias em energia


elétrica representam assunto de grande relevância na pautas de discussões
mundiais sobre sustentabilidade ambiental, economia, eficiência energética, e esses
temas nos últimos anos têm ganhado grande destaque no cenário mundial.

2.2 POTÊNCIA ELÉTRICA

Uma das principais grandezas que precisa ser analisada quando se fala de
energia elétrica é a Potência Elétrica, que, segundo (CHARLES K. ALEXANDER;
MATTHEW N. O SADIKU, 2013, p. 8), “Potência é velocidade com que se consome
ou se absorve energia medida em Watts (W)”. Assim, segundo os autores, se calcula
Potência Elétrica através do produto conforme Equação 1.

dw dq
p= ⋅ Equação 1
dq dt

sendo:

• w → energia [Joules];
• q – carga elétrica [ Coulomb];
• t – tempo [segundos];
20

Como a corrente elétrica é o fluxo de carga por unidade de tempo, e tensão


elétrica é a energia necessária para deslocar uma carga unitária, pode se relacionar
a potência como sendo o produto da tensão e da corrente elétrica, conforme
Equação 2.

p=v⋅i Equação 2

sendo:

• p → Potência Elétrica [W];


• v → Tensão Elétrica [ Volt];
• i → Corrente Elétrica [ Ampére];

Segundo os autores, se realizar uma integração da potência por um intervalo


de tempo, tem-se o cálculo da energia elétrica, conforme Equação 3.

t1

w=∫ p⋅dt Equação 3


to

Por padrão, as concessionárias de energia adotam a medida de energia em


“watts-hora – Wh”, sendo obtida conforme Equação 4.

J
1Wh=1 ⋅3600 s=3600 J Equação 4
s

A Equação 2 traz a potência instantânea, que é o produto da tensão


instantânea e da corrente instantânea sobre um elemento.
Segundo (CHARLES K. ALEXANDER; MATTHEW N. O SADIKU, 2013, p.
364), “A potência é a grandeza de maior importância em concessionárias de energia,
eletrônica e sistemas de comunicação, porque todos envolvem transmissão de
potência de um ponto a outro”. Os autores explicam que a potência é gerada em
usinas e transmitida em longas distâncias de um local para outro através das linhas
21

de transmissão e em alta-tensão (110kV ou acima). A Tabela 1 traz a tensão de uso


cotidiano em alguns países ao redor do mundo.

TABELA 1: ELETRICIDADE AO REDOR DO MUNDO

FONTE: (CHARLES K. ALEXANDER; MATTHEW N. O SADIKU, 2013)

Se considerar que a corrente e a tensão sejam variáveis no tempo, seguindo


a relação da Equação 5 e da Equação 6, tem-se:

v (t )=V m cos( ω t+θ v ) Equação 5

i(t)=I m cos( ω t +θ i) Equação 6

sendo,

• V m → Amplitude da Tensão;
• θ v → Ângulo de Fase da Tensão;
• I m → Amplitude da Corrente;
• θ i → Ângulo de Fase da Corrente;
22

Substituindo a Equação 5 e Equação 6 na Equação 2, e aplicando uma


identidade trigonométrica, tem-se a Equação 7, que é utilizada para calcular uma
potência instantânea senoidal.

1 1
p(t)= V m⋅I m cos (θ v −θ i)+ V m⋅I m cos(2 ω t +θ v +θ i) Equação 7
2 2

Analisa-se, pela Equação 7 que a potência instantânea é formada por duas


parcelas, sendo uma delas constante e não dependete do tempo (já que consiste na
metade do produto entre a corrente, tensão e o cosseno da diferença entre o ângulo
de fase da corrente pela tensão). A segunda parcela, sim, tem frequência o dobro da
frequência da tensão e corrente, e varia com o tempo.
É importante analisar também que há momentos em que a potência é
negativa, que significa que a fonte está absorvendo potência. Isso é causado pela
presença de indutores e capacitores no circuito. Contudo, há uma grande
complexidade na análise da potência instantânea, por isso, é comum se utilizar o
cálculo da potência média, conforme Equação 8.

T
1
P= ∫ p (t)⋅dt Equação 8
T 0

T T
1 1 1 1
P= ⋅∫ V m⋅I m cos(θ v −θ i)+ ⋅∫ V m⋅I m cos (2 ω t+θ v +θ i ) Equação 9
T 0 2 T 0 2

1
P= V m⋅I m cos(θ v −θ i) Equação 10
2

Da Equação 10, é possível notar que a potência média depende


exclusivamente da diferença entre os ângulos de fase da tensão e da corrente. Além
disso, há dois cenários importantes:

• θ v =θ i → Circuito puramente resistivo – absorve toda a potência na carga;


• θ v −θ i±90º → Circuito puramente reativo – não absorve nenhuma potência
na carga;
23

Para uma quantidade variável qualquer, é possível realizar a raiz do valor


quadrático médio, também conhecido por RMS. Essa grandeza revela, para uma
potência variável no tempo, um valor equivalente a uma potência contínua no tempo
(DC), ou seja, o mesmo gasto de energia no tempo, como se aquela carga fosse
ligada em uma tensão/corrente contínua.
O valor RMS de uma grandeza pode ser calculado através da Equação 11.


T
1
X RMS= ∫ x 2 (t)⋅dt
T 0
Equação 11

Então, para uma tensão senoidal, este valor pode ser obtido conforme
procedimento através da Equação 12 até a Equação 18.



1
V RMS =

∫ V 2m⋅sen2 (t)dt Equação 12
0


2 2π
Vm
V RMS = ∫
2π 0
2
sen (t)dt Equação 13

V RMS =

V 2m 2 π 1−cos( 2t)
2π 0
∫ 2
dt Equação 14

V RMS =

V 2m 1
2π 2
t−sen
(2 t)
4
Equação 15


2
Vm 1 (2.2 π )
V RMS = (2 π )−sen Equação 16
2π 2 4


2
Vm
V RMS = Equação 17
2
Vm
V RMS = Equação 18
√2

Para a corrente, o cálculo é semelhante ao realizado para a Tensão. A


corrente eficaz, então pode ser vista na Equação 19.
24

Im
I RMS = Equação 19
√2

Tomando a Equação 10, que traz a potência média e substituindo cada


termo I RMS e V RMS das equações 18 e 19 , tem-se a Equação 20.

P=V RMS⋅I RMS⋅cos (θ v −θ i) → P=S⋅cos(θ ) Equação 20

2.2.1 Potência Aparente

Tomando como base a Equação 20 , se substituir o produto da Tensão RMS


e Corrente RMS por “S”, tem-se a Equação 21.

P=S⋅cos(θ ) Equação 21

O termo S, da Equação 21 é conhecido como Potência Aparente e é medido


em VA ( Volt-Ampére). Como já descrito, este termo é o produto da Tensão RMS e
da Corrente RMS.
O argumento do cosseno é conhecido como Fator de Potência e é
adimensional. Esta grandeza representa o cosseno da diferença de fase entre a
tensão e a corrente e também representa o cosseno da impedância da carga.
A Potência aparente (S) é também conhecida, segundo (CHARLES K.
ALEXANDER; MATTHEW N. O SADIKU, 2013, p. 374), por Potência Complexa, já
que “ela contém toda a informação relativa à potência absorvida por uma dada
carga”. Assim, esse termo, de forma completa é descrito pela Equação 22.

S=V RMS⋅I RMS⋅cos (θ v −θ i )+ jV RMS⋅I RMS⋅sen(θ v −θ i) → Equação 22

2.2.2 Potência Ativa

A parte real da Equação 22 é conhecido como Potência Ativa (P), ou


Potência Real, ou Média e é medida em Watt. É a Potência efetivamente dissipada
na carga. É a mesma Potência da Equação 20.
25

2.2.3 Potência Reativa

A parte imaginária da Equação 22 é conhecida como Potência Reativa (Q),


que é uma potência que oscila entre a fonte e carga e é medida em VAR ( Volt-
Ampére Reativo). Em um meio ciclo ocorre a transferência dessa potência entre a
fonte e a carga e em outro ciclo ocorre o inverso. Nas equações 23 e 24, pode ser
visto a relação entre Potência Aparente (S) e Potências Ativas e Reativas.

P=V RMS⋅I RMS⋅cos (θ v −θ i) → P=S⋅cos(θ v −θ i ) Equação 23

Q=V RMS⋅I RMS sen (θ v −θ i) → Q=S sen (θ v −θ i ) Equação 24

2.2.4 Fator De Potência

O argumento do cosseno da Equação 20 é conhecido como Fator de


Potência e é adimensional. Esta grandeza representa o cosseno da diferença de
fase entre a tensão e a corrente e também representa o cosseno da impedância da
carga.
Segundo (ALISON P. DE MOURA, [s.d.] et al.), “o fator de potência, além de
expressar a razão entre a potência ativa e a potência aparente, representa o
cosseno do ângulo entre a tensão e a corrente de um circuito. Portanto, é o mesmo
ângulo da impedância complexa.
Esse fator traz muitas informações sobre o tipo de carga. Por exemplo, para
cargas capacitivas se tem uma potência reativa menor que Zero, representa que a
corrente é adiantada em relação a tensão. Já para cargas indutivas( que são as
maiorias das cargas), a corrente é atrasada em relação a tensão, e ocorre quando a
potência reativa é maior que zero. Já, se houver um fator de potência unitário,
significa que a tensão e a corrente estão em fase.
Segundo (CHARLES K. ALEXANDER; MATTHEW N. O SADIKU, 2013, p.
385), “Uma carga com Q diferente de zero significa que a energia flui para frente e
para trás entre a carga e a fonte, dando origem a perdas de potência adicionais”.
Devido a isso, existe no Brasil legislação que versa sobre o assunto, tal como a
26

Resolução ANEEL 456/2000 que estabelece que fator de potência inferior a 0,92
poderá ter acréscimo na cobrança de energia.

2.3 MEDIÇÃO DE ENERGIA

Inicialmente, quando se fala de medição de energia é importante abordar


alguns sensores que são utilizados para medição, por exemplo os sensores de
corrente e tensão. Alguns modelos comerciais que são utilizados podem ser vistos
na a Figura 1.

FIGURA 1 - SENSORES DE CORRENTE E SENSORES DE TENSÃO

FONTE: (ROMANCINI, 2020, p. 18)

Na operação de um medidor, segundo (ROMANCINI, 2020, p. 18), “dentro


do diagrama geral, existe um bloco que realiza o processamento dos sinais
fornecidos pelos sensores, condicionando e elevando os níveis de tensão, através
de buffer’s de nível DC, seguidores de tensão e amplificadores não inversor”.
Este circuito de condicionamento visa realizar amostras das grandezas lidas
pelos sensores, amplificá-los, e realizados a aquisição por um conversor ADC que
agora transformam essas grandezas em digitais. Na saída desse Conversor
Analógico Digital, essas grandezas passam por filtros digitais que removem o nível
DC que pode ser gerado na etapa do condicionamento. Em seguida, os sinais
passam por filtros do tipo Passa baixa que removem frequências indesejáveis
27

2.4 INTERNET DAS COISAS ( IOT)

A possibilidade de se conectar vários dispositivos, mesmos que fisicamente


distantes trouxe uma considerável revolução tecnológica para os tempos atuais.
Segundo (SÉRGIO LUIZ STEVAN JÚNIOR, 2018, p. 8), o conceito Internet das
Coisas pode ser entendido como “toda troca de informações, seja de cunho
informativo, automatizado ou inteligente”, por meio da Internet.
Segundo o autor, como qualquer elemento ligado a internet pode ser
identificado através de um endereço universal, chamado de endereços IP, é possível
imaginar que qualquer elemento com IP que esteja conectado neste universo da
Internet, possa se comunicar com qualquer outra coisa que esteja também na
internet, não importando o quão distante fisicamente estejam. Essa é a mais ampla
definição, segundo o autor, para Internet das Coisas, também conhecida como IoT -
Internet of Things.
Nesta rede, seu uso pode ser ampliado, se considerar que pessoas podem
ser conectadas a sensores, através de uma infraestrutura de comunicações.
O autor destaca a rápida evolução da IoT, que possibilitou manipular várias
grandezas do ambiente, através do uso em alta escala de sensores, tais como
temperatura, pressão, vibração, iluminação, umidade, presença, estado físico, etc.
O termo Internet das coisas surgiu, em 1999, criado por Kevin Aston, um
cientista da computação inglês, após a ideia de se colocar tags ( etiquetas) de
®
identificação por radiofrequência em produtos da marca P&G , e assim rastrear
esses produtos pela internet.
Segundo a análise de (EDUARDO MAGRANI, 2018, p. 24), o universo da
IoT vem recebendo fortes investimentos do setor privado, e influenciará cada vez
mais a vida das pessoas. O autor cita que esse conceito envolve desde tecnologias
voltadas desde a gestão pública, no controle de congestionamento, poluição,
criminalidade, eficiência produtiva, por exemplo, como até aproximar um médico de
seu paciente, ou então a interação a distância entre um morador e sua residência,
de forma a programar cenários em casas inteligentes, para que quando este chegue
em casa, seu lar esteja já preparado para o receber.
Por outro lado, o autor pontua a consequência dessa hiperconectividade, ou
esse massivo compartilhamento de dados que causará cada vez mais preocupações
28

a níveis mundiais quanto a privacidade e segurança dos usuários, inclusive,


discussões sobre este tema tem sido frequentes nos últimos anos.

2.4.1 Microcontrolador ESP32

Quando se estuda sobre Internet das Coisas, juntamente a esse estudo vem
os chips que fazem conexão com a internet. Um desses chips é o ESP32 que é um
microcontrolador desenvolvido pela empresa Chinesa Expressif ™ e, segundo
(PEDRO BERTOLETI, 2019, p. 8), “abriu possibilidade para prototipação rápida (e
projetos completos) que precisam de bom poder computacional ( processamento e
quantidade de memória) e conectividade. Esse microcontrolador possui conexão
direta com a internet, e pode executar aplicativos.

As especificações do ESP32 podem ser vistas na 2.

TABELA 2: ESPECIFICAÇÕES ESP32

FONTE: (PEDRO BERTOLETI, 2019, p. 8)

A placa ESP32 é uma evolução da sua antecessora, a ESP8266. Possui um


módulo de comunicação Wi-fi, suportando o padrão 802.11 b/g/n, sistema de
processamento Dual Core com 160MHZ, Bluetooth integrado, tensão operacional de
alimentação de 2,3V a 3,6V, cristal oscilador de 32kHZ
29

O consumo de energia da placa ESP32, segundo o fabricante é, com


processamento máximo é em torno de 260mA, porém, em estado de hibernação, é
em torno de 20uA.
Existe, ainda neste microcontrolador um módulo interno, dotado de memória
flash de 16MB, ou seja, permite ser apagada e regravada em uma alta quantidade
de vezes: em torno de 10.000 vezes.
As placas ESP32 possuem 34 pinos de entrada e saída, chamadas GPIO
( General Purpose Input/Output). Essas portas podem fornecer uma corrente
máxima de 12mA.

Entre esses pinos, tem-se:


• 3 Pinos SPI;
• 2 Pinos I2C;
• 10 Pinos touch - que funcionam como sensores capacitivos,
que reagem quando há alterações em seu estado, como por
exemplo um toque;
• 18 Pinos Conversor ADC – que convertem uma grandeza
analógica em grandeza digital;
• 3 Portas GND;
• 1 Porta 3,3V;
• 1 Porta 5V;
• Portas RX e TX.

O Diagrama das portas da placa ESP32 pode ser vista na Figura 2.

Para programar ESP32, há várias maneiras e ambientes de Desenvolvimento.


Contudo, muitos programadores programam com a IDE do Arduino, justamente pela
familiarização desta ferramenta. Inclusive, nesta IDE, facilmente se consegue
compatibilizar para se programar com esse outro tipo e microcontrolador.
30

FIGURA 2 - PINOS ESP32

FONTE: ((GUSTAVO TEIXEIRA, 2019))

2.4.2 Comunicação Serial

A Comunicação Serial, segundo (ALBINI, [s.d.], p. 11), “transmite um único


bit por vez, em sequência, por um único canal de comunicação, e sua velocidade é
limitada; enquanto que, na comunicação/transmissão paralela são transmitidos
vários bits por vez, de forma aleatória, por diferentes canais. Um comparativo pode
ser visto na na Figura 3.
As vantagens da Comunicação Serial são a redução de custos, já que se
utiliza um único canal, segundo o autor, para a comunicação, contudo isso recai na
desvantagem da velocidade de transmissão não ser muito alta, quando comparado
com a transmissão paralela.
Um dos padrões seriais é o Padrão RS485, que, conforme destaca
(FREITAS, [s.d.]), “não é um protocolo de comunicação e se trata apenas de um
padrão normalizado que especifica detalhes físicos, como os níveis de tensão de
operação, número de dispositivos e distância máxima”. A forma de comunicação é
definida pelo protocolo, que no caso deste padrão, utiliza-se por exemplo protocolo
Modbus e Profibus.
31

FIGURA 3 - COMUNICAÇÃO SERIAL X COMUNICAÇÃO PARALELA

(ALBINI, [s.d.], p. 11)

O Padrão RS485 transporta um sinal de forma diferencial, que um condutor


transmite o sinal positivo e o outro condutor transmite o sinal negativo ( ou seja, um
tendo magnitude oposta a do outro, por exemplo, se um está com 1,5V o outro está
com -1,5V), chamados respectivamente de sinal A e sinal B. Assim é possível
eliminar possíveis ruídos admitidos ao longo da transmissão do dados, já que esse
sinal entra em um amplificador operacional diferencial e saem filtrados sem ruídos
( conforme Figura 4).

FIGURA 4 - FILTRAGEM DE SINAIS PADRÃO RS485

(FREITAS, [s.d.], p. 1)

Com isso, este padrão torna-se eficientemente robusto a ruídos ou


interferências.
32

2.4.3 Protocolo MODBUS

O Protocolo Modbus é um dos protocolos mais utlizados na comunicação em


redes industriais. Sua facilidade de implementação faz com que ele seja muito
conhecido e utilizado na indústria. Ele pode ser implementado em padrões físicos
tais como RS-232, RS-485, etc.
Este protocolo consiste em uma comunicação entre dispositivos, no modelo
master-slave, ou mestre-escravo, sendo um chamado mestre e os demais
chamados escravos.
Segundo (JAHNO, 2016), a comunicação, no protocolo se inicia, com o
dispositivo “mestre”, solicitando que os dispositivos “escravos” enviem seus dados.
Estes, por sua vez, ao receberem essa solicitação retornam com os dados
solicitados pelo dispositivo mestre. O autor explica que o dispositivo mestre pode
solicitar dados ao dispositivo escravo através de duas maneiras: broadcast e
unicast. A primeira forma é utilizada quando se deseja solicitar dados a todos os
dispositivos conectados, e são enviadas para o endereço 0. Já mensagens unicast
são enviadas a um dispositivo específico, e podem variar de 0 1 a 247.
Há ainda, neste protocolo o modo de se transmitir dados de forma RTU
(Remote Terminal Unit), no qual, segundo o autor, “em conjuntos de 8 bits, contendo
2 caracteres no formato hexadecimal, o padrão prevê que todos os dispositivos
devem suportar este formato”, mas também no formato ASCII (American Standard
Code for Information Interchange), modo no qual os dados podem ser transmitidos
em formato ANSI ASCII , com 7 bits.
A transmissão ocorre através de pacotes, que também são conhecidos por
frames. O formato pode ser visto no QUADRO 1.

QUADRO 1: FRAME MODBUS

Fonte: (“Modbus RTU”, [s.d.])

Cada campo possui um byte, e, se configurado no modo RTU, poderá conter


dois caracteres hexadecimais de 4 bits. Este quadro começa com o campo
33

endereço, que tem tamanho de 1byte, e pode conter valores ( endereço do escravo)
de 0 a 255, porém alguns dos endereços são reservados (248 a 255). Quando o
dispositivo escravo responde, ele informa neste campo o seu endereço, para que o
mestre saiba que foi ele quem respondeu.
O segundo campo, que também é composto por 1 byte, é o local onde é
escrito qual função o mestre está solicitando ao escravo, conforme pode ser visto no
QUADRO 2.

QUADRO 2: FUNÇÕES MODBUS

Fonte: (“Interfaces Modbus de entradas e saídas analógicas e digitais”,


[s.d.])

O terceiro Campo, “Dados”, obedece alguns critérios, tais como:

• 1 START bit, 8 DATA bit, Sem Paridade, 2 STOP bit;


• 1 START bit, 8 DATA bit, Paridade Par, 2 STOP bit;
• 1 START bit, 8 DATA bit, Paridade Impar, 1 STOP bit;

Uma mensagem MODBUS quando for transmitida possui início e final


conhecido, de forma que o receptor possa identificar se a mensagem em sua
integralidade foi recebida. No modo RTU, os quadros de mensagens são separados
34

por um intervalo silencioso de pelo menos 3,5 caracteres, conforme pode ser visto
na Figura 5.

FIGURA 5 - QUADROS MODBUS

FONTE: (“Modbus RTU”, [s.d.])

2.4.4 Protocolo MQTT

O MQTT (Message Queue Telemetry Transport), segundo (PEDRO


BERTOLETI, 2019, p. 62), “é um protocolo de mensagens leve (light-wight) criado
em 1999. É referenciado, segundo o autor por não utilizar alto poder computacional,
assim como não utilizar alta banda de internet, e então se tornou um protocolo muito
utilizado e requisitado para aplicações em tecnologia de comunicação, em especial
em projetos envolvendo Internet das Coisas.
A comunicação envolvendo o protocolo MQTT envolve, basicamente 5
definições:
• Publishers – ou seja, é um dispositivo que publica as informações em um
servidor, em um tópico;
• Subscribers – ou seja, os dispositivos que receberão as informações de um
servidor, assinando um tópico deste;
• Broker – funciona como o servidor das mensagens. Pode ser hospedado na
nuvem para que seja acessado por qualquer local do mundo.
• Tópico – é a chave, ou identificação da mensagem publicada. Sempre que
publicada uma mensagem em um tópico, por um Publiser, todos os
assinantes ( Subscribers) deste tópico receberão a mensagem.
• Payload – informação que se deseja publicar;
35

Então, os publishers enviam mensagens para um Broker e os Subscribers


que “assinarem” esses tópicos recebem informações deste Broker, já que este é o
responsável pelo gerenciamento das mensagens é o Broker, ficando então livre o
publisher ou o subscriber para realizar outras atividades, e também poupar esses
agentes de consumo energético.
Um publisher pode ser um subscriber, e vice-versa. A porta que é por padrão
utilizada para comunicação MQTT é a 1883, porém, também pode ser utilizada a
8883, para aplicações com criptografia.
Um diagrama MQTT básico pode ser visto na Figura 6.

FIGURA 6 - SISTEMA MQTT

Fonte: (“Protocolo MQTT - Redes 1”, [s.d.])

Um sistema de mensagens MQTT não traz limites para publishers e


subscribers, e por isso representa o alto grau de aplicação desse protocolo.

2.4.5 Banco de Dados

Os bancos de dados são arquivos que armazenam registros sobre pessoas,


lugares, coisas, de forma organizada para um uso futuro. São operados por
Sistemas de Gerenciamento de Banco de Dados ( SGBD), que surgiram a partir da
década de 70.
Segundo o que considera (VINÍCIUS CARVALHO, 2015, p. 3), esse tipo de
conceito “remete um local no qual é possível armazenar informações para consulta e
utilização, quando necessário”. Segundo o autor, o próprio sistema de
36

gerenciamento de banco de dados é que vai gerenciar a estrutura de registro,


inclusive criar novos registros, alterar registros antigos, etc.
Há uma linguagem de consulta a banco de dados, denominada SQL
( Linguagem de Consulta Estruturada) que foi desenvolvida na década de 70 pela
IBM. Esta linguagem é muito utilizada, em função da sua simplicidade. Ela é dividida
em subconjuntos de códigos de acordo com o tipo de operação que se deseja
realizar no banco de dados, sendo elas:

• DML - Linguagem de Manipulação de Dados

É o primeiro grupo de comandos, e neste grupo estão presentes os


comandos que visam incluir, consultar, alterar e excluir registros, inclusive em várias
tabelas e registros simultaneamente. São comandos pertencentes a este grupo o
comando Insert ( Inserir), Update ( alterar) e Delete (Excluir), e Lock e Select;

• DDL - Linguagem de Definição de Dados

É o segundo grupo de comandos, e nele estão presentes os comandos


utilizados para definir novas tabelas e seus elementos. São comandos deste grupo,
por exemplo CREATE ( criar um objeto – tabela), DROP (apaga um objeto),
CREATE TABLE, CREATE INDEX, ALTER TABLE, DROP, TABLE, DROP VIEW e
DROP INDEX;

• DCL - Linguagem de Controle de Dados

É o terceiro grupo de comandos, e nele estão presentes os comandos


utilizados para o controle de dados, ou seja, níveis de acesso de cada usuário para
acessar cada tipo de dado. Os principais comandos deste grupo são GRANT
( Autorização do usuário a executar ou configurar aquelas operações), e REVOKE
( Remove a autorização);
37

• DTL - Linguagem de Transação de Dados

É o quarto grupo de comandos, e nele estão presentes os comandos


utilizados para marcar o começo de uma transação no Banco de Dados. Comandos
deste grupo são COMMIT ( que finaliza uma transação) e ROLLBACK ( que descarta
alterações desde o último COMMIT).

• DQL - Linguagem de Consulta de Dados

É o quinto grupo de comandos, e o mais utilizado. Tem-se nele o comando


SELECT que permite ao usuário do banco de dados definir uma consulta aos
registros.
Um outro tipo de banco de dados, e que será utilizado neste projeto, é o
MariaDB. Ele consiste em um Banco de Dados construído pelos desenvolvedores
originais do MySQL mas com licença de uso aberta. Ganhou muita popularidade no
mercado devido a sua escalabilidade, robustez, plugins, além de comparatibilidade
total com o MySQL.

2.4.6 Linguagem HTML

A Linguagem HTML, também conhecida por Linguagem de Marcação de


Hipertexto, é uma linguagem utilizada no desenvolvimento de páginas Web, para
então serem interpretados por navegadores. Assim, a linguagem consiste em um
conjunto de Tags que realizam a marcação de conteúdo em uma página a ser lida
pelo navegador. Diversas tags <x> são existentes em HTML e seu fechamento </x>
determina onde o conteúdo acaba, como por exemplo:

<!- → Representa um comentário no código, não send exibido na página;

• <!DOCTYPE> → Representa o tipo de documento;

• <head> → Representa o cabeçalho de uma página;


38

• <body> → Representa o corpo do documento. O que estiver dentro dela será


exibida, de alguma forma, na página;

• <title> → Representa o título da página;

• <h1> → Representa o título principal da página;

• <p> → Representa um parágrafo;

• <br> → Representa quebra de linha;

• <figure> → Representa uma figura;

• <img> → Inclui uma imagem;

• <script> → Representa um Script. Dentro dessa TAG, vai todo o código, por
exemplo Javascript quando se trabalha com este formato;

• <tr> → Representa Linha de Tabela;

Uma versão muito utilizada da linguagem HTML é a versão 5, que inovou em


vários aspectos de semântica e acessibilidade, com novos recursos anteriormente
inacessíveis por algumas plataformas. Adicionou novas tags importantes, como
<video>, <audio>, <header>, <canvas>, tornando as páginas Web muito mais
gráficas e interativas.

2.4.7 Linguagem CSS

A Linguagem CSS é um “é um mecanismo simples para adicionar estilos


(por exemplo: fontes, cores, espaçamentos) aos documentos web.” (MAURÍCIO
SAMY SILVA, 2012, p. 24) . Então, a CSS é uma linguagem que toma para si a
função de “apresentar” a informação em um arquivo HTML, ou página da Web, uma
vez que formatações tais como estilos diversos não são funções originais de HTML
conforme pondera o autor.
A linguagem CSS pode ser utilizada diretamente dentro de tags ( <style> ou
então estar toda concentrada em um documento externo, a ser chamado no código.
39

Quando se trabalha com estilização CSS, o termo comum para se entender é


a Regra CSS que representa uma unidade básica para uma folha de estilo. Ela é
composta de uma parte que, segundo o autor é o seletor, e outra parte é a
declaração, pode ser visto na Figura 7.

FIGURA 7 - SINTAXE DA REGRA CSS

Fonte: (MAURÍCIO SAMY SILVA, 2012)

Então, uma regra CSS pode ser composta por várias declarações. Estas devem ser
separadas por “;”. Um exemplo, segue na Figura 8.

Na Figura 8, pode ser visto que o seletor é o elemento p, com três


declarações ( color – cor dos textos do elemento p, background – cor do fundo do
elemento p, e font-size que é o tamanho da fonte do elemento).

FIGURA 8 - EXEMPLO DE USO REGRA CSS

FONTE: (MAURÍCIO SAMY SILVA, 2012)

Quando se trabalha com CSS é comum o uso de Frameworks, que são


bibliotecas pré-preparadas e disponíveis na internet, que contém diversos estilos
40

prontos e que podem facilitar o trabalho de desenvolvimento, além de economizar


muito tempo no processo. São exemplos de frameworks disponíveis:

• Blueprint;

• Bootstrap;

• Cascad;

• Framework;

• Foundation;

• Materialize

2.4.8 Linguagem Javascript

A Linguagem Javascript é uma linguagem de script de alto nível, e


representa uma das principais tecnologias para programaçao Web, juntamente com
HTML e CSS. É muito utilizada do lado do servidor, em ambientes como node.js.
Segundo considerações de (DAVID FLANAGAN, 2013). p. 1,, “JavaScript faz
parte da tríade de tecnologias que todos os desenvolvedores Web devem conhecer:
HTML, para especificar o conteúdo de páginas Web; CSS, para especificar a
apresentação dessas páginas;
A Linguagem, segundo o autor, foi criada na Netscape ™ ( Atual Mozilla™), e
atualmente é marca registrada da atual Oracle ™.
Quando se começa a trabalhar com esta linguagem, inicialmente, a própria
linguagem, segundo (DAVID FLANAGAN, 2013, p. 2), define uma API mínima para
trabalhar com texto, arrays, datas e expressões regulares, mas não inclui
funcionalidade alguma de entrada ou saída.
Segue um breve resumo sobre definições básicas da linguagem Javascript:

• Os comentários em Javascript são feitos com barras duplas (//);


• Os valores podem ser atribuídos às variáveis, com o sinal “=”;
• A Linguagem aceita vários tipos de valores:
41

◦ Números inteiros, Números reais, Strings ( entre Aspas simples, ou


duplas), Valores Booleanos, Valores Nulos (Null), Objetos e Arrays;
• Os objetos representam o tipo mais importante para se trabalhar com
Javascript
◦ Representam um conjunto de Valores;
◦ São demilitados por Chaves;
◦ Dentro do objeto, podem ser definidas várias propriedades;
◦ Essas propriedades podem ser acessadas com ( “.” ), ou ( “[ ]” );
• Os Arrays, representam listas de valores, numeradas;
◦ Existem várias propriedades de manipulação dos valores, tais como
comando Primes, primes.lenght, etc;
• Os Operadores, em Javascript são utilizados:
◦ “=” → atribui valor a uma varíavel
◦ “++” → Incrementa uma variável;
◦ “--” → Decrementa uma variável;
◦ “==” → Compara a igualdade entre duas variáveis;
◦ “!=” → Compara a desigualdade entre duas variáveis;
◦ “<” ou “>”→ Compara se uma variável é menor ou maior que a outra;
◦ “<=” ou “>=”→ Compara se a primeira variável é menor ou igual, ou maior
ou igual a outra;
◦ “&&” - Operação “E” entre duas variáveis;
◦ “||” - Operação “OU” entre duas variáveis;

• As funções são blocos de códigos, que uma vez definidos, podem ser
chamados indefinidamente. São definidas com o comando “function” e podem
ser passados um valor de entrada, no momento da definição, e ai a função
retornará um valor, sempre que chamada;

É importante destacar que a linguagem Javascript é uma Linguagem


Orientada a Objeto. Conceitos como Classe, Métodos, Atributos e Objetos são
essenciais nesta filosofia de programação.
Uma Classe representa características padrões a objetos que serão criados.
Exemplo, se deseja-se criar vários objetos, chamados CarroX, sendo Carro1,
42

Carro2, Carro3, Carro4, etc, a Classe Carro trará definido por padrão o que cada
objeto ao ser criado conterá, por exemplo, cada CarroX terá seus “atributos”, que
será por exemplo Cor, Ano, Combustível, Marca. Já Método, são ações que os
objetos podem realizar, por exemplo, na classe Carro, pode ser definido como
método Ligar, Acender Faróis, etc;
Em navegadores Web, que é a parte do cliente, o Javascript é incorporado
em um arquivo HTML, entre as tags Script. Pode também ser incorporado através de
um arquivo externo, e ser chamado ao código, ou através de um endereço URL.
43

3 PROJETO DO SISTEMA

3.1 DESCRIÇÃO GERAL

O projeto consiste na modelagem de um sistema remoto de medição de


energia, de forma a utilizar um medidor existente, e integrar neste medidor todas as
funcionalidades descritas neste trabalho, aprimorando assim suas funcionalidades
para que seja possível medir a energia elétrica numa planta, de forma remota,
através de IoT, ESP 32 e Web.
O sistema deverá entregar as informações tais como energia total, energia
importada, energia exportada, tensão, corrente, potência ativa, ◦ potência reativa,
fator de potência e frequência da rede. Será também estudado de forma tórica o
funcionamento de outros medidores de energia comerciais e a possibilidade de
integração destes de forma remota.
Serão então coletadas as informações deste medidor, através de um
microcontrolador, que enviará, por Wi-fi os dados coletados, a um Broker MQTT, da
atuando este microcontrolador como Publisher.
Um Server do tipo Node.Js deve ser criado através de uma API, de forma a
ser o subscriber do Broker MQTT, e então esta API armazenará em um banco de
Dados, e fornecer os dados para uma página Web.
Por fim, será desenvolvido o Front End, que será uma página Web, na
estrutura HTML5/CSS e com o uso da linguagem JavaScript.
O fluxograma do projeto é exibido na Figura 9.

FIGURA 9 - FLUXOGRAMA DO PROJETO DE MEDIÇÃO REMOTA ENERGIA


Medidor de Protocolo Modbus ESP-32 Broker MQTT
De Energia RS-485 ( Publicação (Recebe Eventos)
Mede Grandezas (Comunicação Serial) Eventos)

Banco de Dados API Node.Js REST + WebSocket Aplicação Web


Armazena Dados Gerencia Eventos ( Comunica com Front-End) Exibe Dados Usuário

Fonte: O Autor
44

3.1.1 Dados do Medidor

Para atender ao projeto, como o Disjuntor de Entrada é 50A, e a tensão é


220V Bifásico, precisa-se de um medidor que atenda essas características, medindo
as grandezas já especificadas, e tenha disponibilidade de porta RS485, com
protocolo Modbus RTU. O medidor deve ler diretamente a energia que entra no
estabelecimento, e deve ser possível coletar em seus registradores as informações
coletadas, tais como :
• Energia total;
• Energia importada;
• Energia exportada;
• Tensão;
• Corrente;
• Potência ativa;
• Potência reativa;
• Fator de potência;
• Frequência da rede;
Essas informações então, precisam ser trabalhadas por uma interface de
forma a enviar para a Web.

3.1.1.1 Medidor Siemens

Analisou-se alguns medidores da Siemens, da família Sentron, Modelos


PAC3100, PAC3200 e PAC4200. Estes medidores realizam medição de energia
Elétrica CA, possui porta de comunicação RS485 e protocolo Modbus.
O padrão utilizado na fabricação atende, segundo manual do fabricante,
normas como IEC 62053-21 / 62053-22 e IEC 62053-23, e suas regras de
comunicação de dados atendem aos requisitos de MODBUS-RTU e WIFI 802.11 b /
g / n.
As grandezas medidas são Tensão, Corrente, Potência Ativa, Reativa, e
Aparente, além de fator de potência e frequência.
45

Alguns parâmetros básicos do medidor podem ser visualizados no Tabela 3

TABELA 3: ESPECIFICAÇÕES TÉCNICAS MEDIDOR DDS-238-4

Fonte: Manual do Fabricante Siemens:


(“SENTRON measuring devices and power monitoring”, [s.d.])
46

O custo deste medidor, quando foi orçado em Julho/21, foi cotado a R$


3.500,00, o que inviabilizou sua aquisição para o projeto.

3.1.1.2 Medidor TOMZIN HIKING DDS238-4-W

O segundo medidor analisado foi o medidor DDS-238-4 que é um medidor


fabricado pela empresa Chinesa Tomzn Hiking.
Esse medidor realiza medição de energia Elétrica CA, possui porta de
comunicação RS485. É um medidor que possui de longa vida útil ( 10 anos) com a
vantagem de alta estabilidade, alta capacidade de sobrecarga, baixa perda de
energia e pequeno volume. O consumo do medidor é de 2W.
O padrão utilizado na fabricação atende, segundo manual do fabricante,
normas como IEC62053-21 e suas regras de comunicação de dados atendem aos
requisitos de MODBUS-RTU e WIFI 802.11 b / g / n.
Alguns parâmetros básicos do medidor podem ser visualizados na Tabela 4

TABELA 4: ESPECIFICAÇÕES TÉCNICAS MEDIDOR DDS-238-4


Grandeza Valor
Frequência 50 ou 60 Hz
Corrente nominal 5 a 60A
Tensão Nominal 120V – 220V – 230 - 240V
Faixa de tensão normal 90% - 110%
Limite de Faixa de Tensão 70% - 120%
Precisão de kWh Classe 1
Precisão R.M.S Classe 0,5
Porta RS485 Modbus RTU protocol, 1200 – 9600bps,
Wi-fi 802.11b / g / n, (Rede 2,4 GHz)
Tempo para ligar / desligar 60 +-5s
Sobretensão / Subtensão / Tempo de 3s
julgamento de evento de sobrecarga
Valor de proteção de sobretensão 270V – Podendo ser configurado
Valor de proteção de Subtensão 170V +1 padrao – Podendo ser configurado
Valor de proteção contra sobrecarga 65A( padrão) – Podendo ser configurado
Atraso liga / desliga controle 00:01 -24:00 Horas
Fonte: (TOMZIN HIKING DDS238-4W User Manual “TOMZIN HIKING -
DDS238-4 SMART-METER MANUAL USER”, [s.d.])
47

Assim, os recursos do medidor consistem em medir a energia coletada da


rede da concessionária, ou então injetada na rede ( quando há a geração própria,
por exemplo, com placas solares). Esses valores também são exibidos de forma
acumulada.
Além da energia, também é medido, pelo equipamento tensão real, a
corrente real, a potência ativa, o fator de potência e a frequência.
O medidor ainda possui a possibilidade de comunicação via rede industrial
Modbus ( que será explorado neste projeto) além de porta de comunicação RS485
para realizar a implementação deste protocolo.
O funcionamento do medidor consiste na amostragem da tensão e a
corrente, transformação destas amostras em sinal adequado, que é transportado
para o circuito integrado, que realiza as operações com as demais grandezas e
fornece a saída. Segue o diagrama de blocos que pode ser visto na Figura 10.

FIGURA 10 - DIAGRAMA DE BLOCOS FUNCIONAMENTO MEDIDOR DDS238-4

Current
Current Input Sampling
Integrated Saída de
Circuit Dados
Voltage
Voltage Input Sampling
Fonte: o Autor ( Adaptado de Manual Tomzn Hiking)

Para se ler as informações do Medidor, a função utilizada é a função 03, do


protocolo MODBUS, do QUADRO 2. A Tabela de Endereços Registros do Medidor,
conforme Manual do fabricante pode ser visto no QUADRO 3.

QUADRO 3: TABELA DE REGISTROS MEDIDOR DDS-238-4


Register Adress Data Number Dado Formato Unidade
0x0000 2 Total kWh XXXXXX. XX kWh
0x0001
0x0008 2 Export kWh XXXXXX. XX kWh
0x0009
0x000A 2 Import kWh XXXXXX. XX kWh
48

0x000B
0x000C 1 Voltage XXX. X V
0x000D 1 Current XX. XX A
0x000E 1 Active power XXX. XXX kW
0x000F 1 Reactive power XXX. XXX kvar
0x0010 1 Power factor X. XXX
0x0011 1 frequency XX. XX Hz
0x0015 1 ID + baud rate O primeiro byte é o ID, o
segundo byte é a taxa de transmissão, 01-
04 é a média. Respectivamente 9600,
4800, 2400, 1200.
Fonte: Manual Fabricante

Quando se realiza a comunicação via protocolo Modbus, utilizando a função


03 para ler os registros do medidor ( que é a função que será implementada neste
projeto), o frame pode ser mostrado no QUADRO 4.

QUADRO 4: FRAME MODBUS -SOLICITAÇÃO -MASTER→ SLAVE


ID Medidor Function Code Register Address Data Number Check Code
( CRC)
1byte 1 byte 2 byte 2 byte 2 byte
Fonte: O Autor

O Slave então responde, com um Frame que pode ser visto no QUADRO 5.

QUADRO 5: FRAME - MODBUS -RESPOSTA -SLAVE → MASTER


ID Medidor Function Code Data lenght n Data area Check Code
( CRC)
1byte 1 byte 1 byte n byte 2 byte
Fonte: O Autor

Assim, analisando o QUADRO 3, percebe-se que um endereço de registro


armazena dados de 2 bytes, de modo que o comprimento dos dados é lido como 4
bytes quando o número dos dados é 2.
Por fim, quando se liga o medidor, no QUADRO 6 é possível visualizar quais
informações são exibidos no display físico do equipamento, de acordo com o
49

número setado. Por exemplo, se utilizar a seta para cima, e ir na opção 11 será
exibido o Fator de Potência.

QUADRO 6: INFORMAÇÕES EXIBIDAS NO DISPLAY MEDIDOR.


Item Grandeza Display LCD
01 Constante de Impulso C
02 Total active energy 00
03 Import active energy 01
04 Export active energy 02
05 Total reactive energy 10
06 Balance Energy E
07 Real Voltage VR
08 A phase real current IR
09 Active power P
10 Potência Reativa Total Q
11 Fator de Potência total PF
12 Frequência F
13 Taxa de transmissão RS485 b
14 Medidor serial alto 6 dígitos H
15 Medidor serial baixo 6 dígitos L
16 RS485 ID Id
Fonte: O Autor
50

4 IMPLEMENTAÇÃO DAS FUNCIONALIDADES

Neste capítulo será detalhada a implementação das funcionalidades. Para


esta implementação, realizou-se a divisão em cinco passos:

• Etapa 1 – Aquisição do Medidor Comercial, instalação física, Instalação do


Conversor RS485 ao medidor e ao microcontrolador, para comunicação serial
entre os dois dispositivos;

• Etapa 2 – Programação do Microcontrolador para coleta dos dados, através


da interface serial, e envio dos dados a Web, ao Broker MQTT ( após a sua
instalação);

• Etapa 3 – Desenvolvimento dos softwares (API) que farão tanto a coleta dos
dados no Broker MQTT, quanto o armazenamento no Banco de Dados, sua
leitura, e envio para a Web;

• Etapa 4 – Desenvolvimento da interface Web ( Front-End) para exibir ao


usuário de forma amigável os dados lidos;

4.1.1 Etapa 1 – Instalação Física Medidor

A etapa 1 do projeto consiste na instalação física. O diagrama da instalação a


ser realizada pode ser visto na Figura 11.
51

FIGURA 11 - DIAGRAMA DE INSTALAÇÃO MEDIDOR – RS485-TTL E ESP-32

Fonte: O Autor

A instalação física consiste então, conforme Figura 11 na conexão da Fase 1,


na entrada 1 do medidor, a saída da Fase 1 da porta 02 do medidor, a entrada da
Fase 2 na Porta 3 do Medidor e a saída a Fase 2 da porta 4 do Medidor.

A porta 11 e 12 do Medidor fornecem os sinais A+ e A-, respectivamente, para


a comunicação serial RS-485, respectivamente, que serão conectadas nas entradas
A+ e A- da placa conversora RS-485 to TTL.

A saída desta placa conversora RS-485-TTL contém 4 pinos, sendo dois de


alimentação e aterramento ( Vcc e Gnd), um para transmissão (Tx) e outro para
52

recepção (Rx). A alimentação será conectada a porta 3V3 da placa ESP, que fornece
uma tensão de 3,3V para alimentar a placa conversora. Já o GND da placa será
conectado ao Gnd do microcontrolador ESP. Já a saída da placa Conversora (Tx)
será conectada ao pino 12 da placa ESP e entrada (Rx) da placa conversora será
conectada ao pino 14 do microcontrolador ESP32.

Na Figura 12, são exibidas as imagens referentes a este procedimento,


sendo:

• Passo 1 – Aquisição do Medidor, fixação em quadro sobreposto, e


Alimentação das fases, com o disjuntor desligado;

• Passo 2 – Instalação do Conversor RS485-TTL, conectando-o a saida


Modbus ( Portas 11 e 12) do Medidor;

• Passo 3 – Alimentação do Microcontrolador;

FIGURA 12 - INSTALAÇÃO FÍSICA PARTE 1

Fonte: O Autor.

Na Figura 13, são exibidas imagens referentes ao restante do procedimento,


sendo:
53

• Passo 4 – Conexão do Microcontrolador ao Conversor RS485-TTL ( saída Tx


e Rx do conversor, conectadas nas portas 12 e 14 do microcontrolador,
respectivamente).

• Passo 5 – Acomodação das Placas no Quadro de Distribuição.

FIGURA 13 - INSTALAÇÃO FÍSICA PARTE 2

Fonte: O Autor.

O término da instalação física pode ser visto na figura 14.

FIGURA 14 - INSTALAÇÃO FÍSICA PARTE 3

Fonte: O Autor.
54

4.1.2 Etapa 1 – Programação Microcontrolador

Para se coletar os dados, realizou-se a programação do microcontrolador


escolhido, que é o ESP32.

Utilizou-se o ambiente IDE Arduino para se programar o microcontrolador,


com a devida configuração deste ambiente de desenvolvimento para o ESP32.

Começou com a importação das bibliotecas a serem utilizadas no projeto, e


em seguida com a definição das constantes, que nesta seção traz as senhas da
rede Wi-fi em que o microcontrolador deverá se conectar. Nesta seção também é
atribuído o IP do Broker que será o destino para o qual, periodicamente, o
microcontrolador enviará os eventos referentes aos tópicos lidos (grandezas
coletadas nos registradores do medidor), conforme pode ser vista na Figura 15.

FIGURA 15 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 1

FONTE: O autor .

São formatadas ainda as as variáveis do tipo “String” que definirão o formato


de dado de cada grandeza que será medida;
55

Então, cria-se os feeds ( tópicos) que serão publicados no Broker MQTT e


em seguida inicia-se o objeto Modbus, para se conectar ao Medidor, utilizando, na
biblioteca, a função 03 e configura as portas GPIO do microcontrolador 14 para RX e
12 para TX, conforme pode ser visto na Figura 16.

FIGURA 16 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 2

FONTE: O autor

São iniciadas, na função Setup do Microcontrolador, funções para se conectar


na Wi-fi, tais como WiFi.mode e WiFI.begin. Então, se realiza um laço While para
verificar se a conexão obteve sucesso. Se não houver sucesso, o microcontrolador é
reiniciado, conforme pode ser vista na Figura 17.

FIGURA 17 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 3

Fonte: O Autor
56

Então, entra na função de se conectar ao Broker MQTT, utiliza-se um laço


para validar se a conexão ocorreu com sucesso. São realizadas até três tentativas, e
se não houver sucesso, as tentativas são retomadas a cada 5 segundos, conforme
pode ser vista na Figura 18.

FIGURA 18 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 4

FONTE: O Autor

Em seguida, por fim se entra no bloco do Loop, que será o bloco que será
executado continuamente pelo microcontrolador. Define-se várias variáveis, do tipo
“float” que armazenarão as informações, conforme pode ser vista na Figura 19.

FIGURA 19 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 5

FONTE: O Autor
57

Começa então a fase da leitura das informações nos registradores.


Inicialmente começa-se com a Energia Total. É armazenada na variável “result” o
retorno da função de leitura do registrador e então chamada a função de transformar
para “float” a grandeza e armazenada na variável de TotalkWh. É então, realizada a
leitura do segundo registrador e realizado o mesmo procedimento. Realiza-se então
a publicação da informação no Broker. O mesmo procedimento é realizado para as
demais grandezas, conforme pode ser vista na Figura 20.

FIGURA 20 - PROGRAMAÇÃO MICROCONTROLADOR PASSO 6

Fonte: O Autor

4.1.3 Etapa 3 – Desenvolvimento da programação Back-End;

Para início da programação da interface entre Hardware e Front End ( Back


End), inicialmente começou com a preparação do ambiente. Toda a estrutura do
sistema foi hospedada nos servidores AWS (Amazon Web Services). Então, para o
funcionamento do projeto foi inicialmente necessária a criação de uma conta de
58

desenvolvedor na AWS e também configurar os serviços conforme os passos


abaixo:

• Passo 1 - Ambientar o EC2 – que armazenará na Amazon o Servidor


Linux – Ubuntu versão 20;
• Passo 2 - Configuração do novo usuário no servidor Linux;
• Passo 3 - Instalação do NodeJS – que é um software de código aberto
que permite a execução de códigos JavaScript fora de um navegador web;
• Passo 4 e Passo 5 - Instalação do Docker e Docker-compose, para criar
“containers” do broker RabbitMQ ( que foi o Broker MQTT escolhido para o
projeto) e do Banco de Dados MariaDB (que foi o Banco de Dados
escolhido). Se optou pela utilização do Docker devido à facilidade que ele
oferece para trabalhar com infraestrutura desses serviços, ou seja, ele facilita
o procedimento caso haja posterior necessidade de alterar a versão de algum
dos serviços que serão implementados.
• Passo 6: Instalação do PM2, que foi utilizado para, toda vez que o
servidor reiniciar, este serviço automaticamente inicia a API (Interface de
Programação de Aplicações).
• Passo 7: Instalação do Nginx – Para criar um proxy reverso e qualquer
usuário que acessar o IP na porta 80 seja automaticamente redirecionado
para a API;
• Passo 8 - Configuração do Banco de Dados Maria DB, com o Docker. O
Banco de Dados escolhido foi o MariaDb, que Banco de Dados muito utilizado
nas aplicações de desenvolvimento, e foi criado pelos mesmos
desenvolvedores do MySQL.
• Passo 9 - Criação do Banco de Dados;
• Passo 10 - Configuração do Broker MQTT. O Broker escolhido foi o
RabbitMQ, que é também um software de código aberto que implementa os
protocolos MQTT, STOMP, AMQP, entre outros;
• Passo 11 - Iniciação da API com o PM2;
• Passo 12 - Preparação do S3 – Local para armazenar os arquivos de front-
end da aplicação;
59

O detalhamento de cada passo é descrito nos itens a seguir.

4.1.3.1 Passo 1 – Ambientação - Configuração do Servidor EC2

Para iniciar o servidor EC2 realizou-se o acesso ao console de administração


da AWS no link: https://signin.aws.amazon.com/signin, e se inseriu as credenciais
para acessar o console. Feito isso, realizou-se a procura por “EC2”, conforme
Figura 21.

FIGURA 21 - CREDENCIAS – CONSOLE EC2

Fonte: O Autor

Dentro do EC2, em “Launch Instances”, conforme Figura 22 se escolheu a


máquina que desejaria trabalhar na AWS.

FIGURA 22 - LAUNCHE INSTANCES

Fonte: O Autor.

Nesta opção, se marcou “Free tier only” para ter acesso a 1 ano grátis para
teste concedido pela AWS , conforme Figura 23.
60

FIGURA 23 - FREE TIER ONLY - AWS

Fonte: O Autor.

Após este procedimento, selecionou-se a máquina e escolheu-se “Review


and Launch”. Na tela seguinte, então foi escolhida a opção “Launch”. Com isso, em
alguns minutos o servidor estava disponível para ser acessado, conforme pode ser
visto na Figura 24.

FIGURA 24 - SERVIDOR INICIADO AWS

Fonte: O Autor.

Após esse passo, também foi necessário configurar uma chave para acessar
esse servidor posteriormente, conforme pode ser visto na Figura 25.
Realizou-se o download dessa chave e armazenou-se em um diretório do
computador, para usar essa chave posteriormente quando realizasse o acesso ao
servidor via SSH.
61

FIGURA 25 - CRIAÇÃO DA CHAVE DE ACESSO

Fonte: O Autor.

Para liberar as portas necessárias para acesso ao Servidor EC2,


primeiramente se verificou qual era o “Security Group” que o EC2 estava vinculado,
conforme Figura 26.

FIGURA 26 - SECURITY GROUP

Fonte: O Autor.

Em seguida, se clicou na opção “Security Group” e na opção “Edit inbound


rules”, quando se adicionou todas as regras conforme Figura 27 e então salvou a
edição, na opção “Save rules”.
62

FIGURA 27 - REGRAS SECURITY GROUP

Fonte: O Autor.

Para configurar o acesso ao servidor Linux por SSH, selecionou-se a


instância, e foi até a opção “actions” e se escolheu “Connect”, conforme Figura 28.

FIGURA 28 - ACESSO SERVIDOR LINUX POR SSH

Fonte: O Autor.

Em seguida, após habilitar a aba “SSH client”, a AWS se disponibilizou um


tutorial de como acessar por SSH o servidor conforme Figura 29.

FIGURA 29 - ACESSO SERVIDOR LINUX POR SSH

Fonte: O Autor.

O tutorial fornecido pela AWS traz informações sobre como acessar via
63

terminal o diretório onde a chave “.pem” está e também sobre como dar permissões
nesse arquivo com comando Linux “chmod”. Além disto, explica como executar o
comando do SSH com o DNS publico do servidor e com isso obter acesso ao
servidor Linux.

4.1.3.2 Passo 2 – Ambientação - Novo usuário servidor Linux:

Este passo visou configurar um novo usuário com permissões no servidor


Linux, então para realizar este procedimento, utilizou-se os comandos Linux abaixo:

• sudo adduser
• app sudo usermod -aG sudo app

Após realizado pela primeira vez, nas próximas conexões SSH, pôde-se
substituir o SSH ubuntu@dns_amazon por SSH app@dns_amazon, pois “app” é o
novo usuário criado para manipular esse servidor.

4.1.3.3 Passo 3 – Ambientação - Instalando NodeJS no servidor Ubuntu:

Para realizar esse procedimento, utilizou-se basicamente a biblioteca


disponível de forma online sobre o assunto, no link:
https://github.com/nodesource/distributions/blob/master/README.md, através da
sessão (Node.JS LTS (v14.x)), e se executou os comandos mencionados na sessão.
É Importante destacar que LTS é a última versão estável do Node que foi a
versão utilizada.

4.1.3.4 Passo 4 – Ambientação - Instalando Docker no servidor Ubuntu:

Para realizar esse procedimento, utilizou-se basicamente a biblioteca


disponível sobre o assunto, no link: Install Docker Engine on Ubuntu | Docker
64

Documentation, na sessão “Instalation methods \ Install using the repository” e se


seguiu os comandos mencionados nas instruções.

4.1.3.5 Passo 5 – Ambientação - docker-compose no servidor Ubuntu:

Para realizar esse procedimento, utilizou-se basicamente a biblioteca


disponível sobre o assunto, no link,: Install Docker Compose | Docker
Documentation, e dentro de “Install Compose”, selecionou-se a Aba Linux e após
isso executou-se os comandos mencionados no tutorial.

4.1.3.6 Passo 6 – Ambientação - Instalando PM2:

Para realizar esse procedimento, utilizou-se basicamente a biblioteca


disponível sobre o assunto, no link: PM2 - Quick Start (keymetrics.io), e se executou
o comando mencionado no tutorial. No momento do tutorial é: npm install
pm2@latest -g.

4.1.3.7 Passo 7 – Ambientação - Instalando NGINX:

Para realizar este procedimento, utilizou-se os comandos abaixo:

• sudo apt install nginx

Em seguida, configurou o Nginx para redirecionar as requisições na porta 80


para o servidor que futuramente será iniciado com o PM2. Então, para este passo se
realizou os comandos:

• cd /etc/nginx/sites-available
• rm -rf default
• cd /etc/nginx/sites-enabled
• rm -rf default
65

Então se criou o arquivo de redirecionamento da API, utilizando os


comandos:

• cd /etc/nginx/sites-available
• sudo vi app

Dentro deste arquivo, se adicionou o conteúdo:

• server {
◦ location / {
▪ proxy_pass http://localhost:3000;
▪ proxy_http_version 1.1;
▪ proxy_set_header Upgrade $http_upgrade;
▪ proxy_set_header Connection 'upgrade';
▪ proxy_set_header Host $host;
▪ proxy_cache_bypass $http_upgrade; }}

Então, mediante o comando “ESC” e “:” e depois “wq”, se finalizou o


procedimento.
Nesta etapa, já se tinha o arquivo de configuração de proxy da API, e então
se precisava criar um link simbólico desse arquivo para a pasta do “nginx sites-
enabled” para que esse arquivo fique ativo. Executou-se, então, o comando:

• sudo ln -s /etc/nginx/sites-available/app
• etc/nginx/sites-enabled/app

Com isso, foi criado um link do arquivos “sites-available/app” na pasta“sites-


enabled/app” e por fim reiniciou-se o serviço do “nginx”, através do comando: “sudo
service nginx restart”.
Neste momento, já tinha o proxy reverso para a aplicação, ou seja, todas as
requisições que chegassem para o IP do servidor (EC2) na porta 80, seriam
redirecionados para a API que iria futuramente ser iniciada na porta 3000.
66

4.1.3.8 Passo 8 – Ambientação - Banco de dados MariaDB com DOCKER

Para se realizar este procedimento, executou-se o comando para iniciar o


banco de dados MariaDB que foi o sistema escolhido para se utilizar neste projeto.

• mariadb: docker run -p 3306:3306 --name smart_meter_elielton -e


MYSQL_ROOT_PASSWORD="12345" -d mariadb:10.2.12

Neste momento, estava iniciado, então o Banco de Dados.

4.1.3.9 Passo 9 – Ambientação - Criando banco de dados

Conectou-se na instancia do banco de dados com as seguintes informações:

• IP: Endereço IP da máquina EC2 (nas informações do EC2 conseguiu-se


obter esta informação);
• Usuário: root
• Senha: 12345

Encontrou-se três opções de Clients para conexão com a instância de banco


de dados (Windows: HeidiSQL, Linux: Dbeaver ou MAC: Sequel Pro).
Escolheu-se o client (HeidiSQL), conectou-se na instancia do banco de
dados na Amazon, e através da opção de digitar comandos SQL executou-se o
comando:

• CREATE DATABASE smart_meter_elielton CHARACTER SET utf8 COLLATE


utf8_general_ci

Após execução deste comando, o banco de dados foi criado com sucesso,
com o nome “smart_meter_elielton”.

Em seguida, para se criar as tabelas iniciais para o banco de dados, dentro


do terminal SSH, se executou os comandos:
67

• cd ~/smart_meter_api
• npm run knex migrate:latest

Então, esta etapa foi necessária pois, como foi utilizado o “Knex” com
“migrations”, esse comando irá ler as migrations e criará todas as tabelas iniciais
necessárias no banco de dados.

4.1.3.10 Passo 10 – Ambientação - Broker MQTT RabbitMQ com Docker

O Broker escolhido, para gerenciamento das mensagens publicadas pelo


microcontrolador ESP32, foi o RabbitMQ, que é um gerenciador de mensagens de
código aberto. Então, para se instalar este gerenciador de mensagens, no ambiente,
executou os comandos:

• cd ~/
• mkdir RabbitMQ
• cd RabbitMQ
• sudo vi docker-compose.yml

Dentro deste último arquivo criado, se colou o conteúdo:

• version: '3'
• services:
◦ rabbit:
◦ image: "RabbitMQ:3-management"
◦ environment:
▪ RabbitMQ_ERLANG_COOKIE:
"ijdsijoadojafojiadsojidafjioa"
▪ RabbitMQ_DEFAULT_USER: "RabbitMQ"
▪ RabbitMQ_DEFAULT_PASS: "12345"
▪ RabbitMQ_DEFAULT_VHOST: "/"
◦ ports:
◦ - "15672:15672"
68

◦ - "5672:5672"
◦ - "1883:1883"

Feito isso, se concluiu o procedimento com a combinação de tecla: “ESC” e


depois : depois “wq” para salvar o arquivo. Então se executou o comando: docker-
compose up -d, que inicia o RabbitMQ em modo “detach”, ou seja, ele ficará
executando como um processo da máquina.
Uma outra forma que poderia ser acessado o broker RabbitMQ seria
acessando a url: http://ip_servidor_aws:15672, com o usuário e senha cadastrados
no arquivo “docker-compose.yml”.
Em seguida, realizou-se o procedimento de se ativar plugins no RabbitMQ
para funcionar o protocolo MQTT ( que será utilizado no projeto).
Primeiro, se consultou o nome do container do RabbitMQ utilizando o
comando: docker ps, conforme Figura 30.

FIGURA 30 - CONTEINER RABBITMQ - DOCKER

Fonte: O Autor.

Então se executou o procedimento abaixo, após entrar no terminal “Bash” do


RabbitMQ, através do comando: docker exec -it RabbitMQ_rabbit_1 bin/bash:

• RabbitMQ-plugins enable RabbitMQ_mqtt

4.1.3.11 Passo 11 – Ambientação - Iniciando a API com o PM2

Esse comando foi utilizado para vincular o “serviço” da API, com o PM2.
Desta forma, sempre que o servidor reiniciar, o PM2 automaticamente irá “subir” a
API novamente e deixar tudo funcionando. O PM2 também tem outras
funcionalidades como verificar logs, monitorar, reiniciar entre outras funcionalidades.
69

Para isto, então executou-se o seguinte comando:

• pm2 start ~/smart_meter_api/dist/src/server.js –name app

4.1.3.12 Passo 12 – Ambientação - Configurando S3 para hospedar o Front-End

Iniciou este procedimento, primeiramente pesquisando pelo serviço S3,


dentro do console de gerenciamento da AWS, conforme Figura 31.

FIGURA 31 - CONFIGURAÇÃO S3 AWS

Fonte: O Autor.
Então, dentro do S3 se escolheu “Create bucket” e em seguida digitou-se e o
nome do bucket, deixando, então este “bucket” como público para que todo mundo
possa acessá-lo, conforme Figura 32.

FIGURA 32 - DEIXANDO O “BUCKET” COMO PÚBLICO

Fonte: O Autor.
70

Após este procedimento, em “Creat Bucket”, ficou configurado conforme


Figura 33.

FIGURA 33 - BUCKET CRIADO

Fonte: O Autor.

Então, se clicou novamente no seu bucket e dentro dele se selecionou a aba


Properties. conforme Figura 34.

FIGURA 34 - PROPRIEDADES DO BUCKET

Fonte: O Autor.

Então, na Opção Static website hosting e foi ativada a opção. Nesta aba, o
S3 já disponibilizou uma URL no qual poderá ser acessado o front-end
posteriormente, conforme Figura 35.

FIGURA 35 - LINK DE ACESSO FUTURO AO FRONT-END

Fonte: O Autor.
71

Em seguida, se selecionou a aba Permissions. conforme Figura 36.

FIGURA 36 - PERMISSIONS DO BUCKET

Fonte: O Autor.

E em “Bucket Policy” foi adicionado o conteúdo, conforme Figura 37.

FIGURA 37 - ARQUIVOS ADICIONADOS NO BUCKET POLICY

Fonte: O autor

Então, se realizou o Upload dos arquivos do Front-End para o bucket S3. Para isto,
dentro do bucket, se clicou em Upload, conforme Figura 38.

FIGURA 38 - UPLOAD DE ARQUIVOS DO FRONT END NO BUCKET

Fonte: O Autor.

É importante salientar que esse procedimento iniciou-se criando o ambiente,


e nesta etapa foi suspenso o procedimento até a conclusão da programação da API
72

e Front-End (que serão detalhados nos tópicos seguintes). Então, se realizou a


conclusão da preparação do ambiente AWS, selecionando, assim, todos os arquivos
do front-end ( neste caso .html e .js .) e, após o upload os arquivos ficaram conforme
Figura 39.

FIGURA 39 - UPLOAD DE ARQUIVOS DO FRONT END NO BUCKET PARTE 2

Fonte: O Autor.

E então, com isso se conseguiu hospedar a API e o Front-end na AWS.

4.1.3.13 Programação da API

Uma API é uma Interface de Programação de Aplicações, e consiste em um


conjunto de regras e procedimentos utilizados por um software para prestar
“serviços” a outros aplicativos que irão utilizar estes serviços, sendo o acesso a
esses serviços através de programação.
Para criação da API do projeto, criou-se primeiro a estrutura onde a aplicação
seria armazenada, ficando conforme Figura 40.

FIGURA 40 - ESTRUTURA DA API

Fonte: O Autor.
73

Ficaram então as pastas:

• database: Pasta que seria armazenadas as “migrations” e configurações para


acesso ao banco de dados pelo terminal;
• Migrations: Criado para dar possibilidade de versionamento de banco de
dados, dessa forma se o projeto está sendo codificado por um time de
programadores, o banco de dados sempre estaria atualizado. Cada alteração
no banco de dados deve ser criado uma nova “migration”, por exemplo:
• Criação de uma nova tabela
• Modificacão de um campo de uma tabela

Os comandos utilizados, neste caso, são:

• npm run knex migrate:latest – Executa todas as migrations no banco de


dados;
• npm run knex migrate:down – Executa o método down de todas as
migrations, ou seja, desfaz tudo que foi feito nas migrations. No final
desse comando, todas as tabelas do banco de dados são excluídas e
desfeitas;
• Npm run knex migrate: make NomeMigration – Cria uma nova
migration;

Nesta estrutura foi criado um arquivo,


“20210605015456_CreateEnergyInput.ts”, que pode ser visto na Figura 41.
74

FIGURA 41 - ESTRUTURA ARQUIVO API

Fonte: O Autor.

Nesse arquivo temos 2 métodos:

• up – Nesse método foi criada uma tabela “energy_inputs” com vários campos
que será utilizado para sincronizar os dados da energia;
• down – Método que excluí a tabela “energy_inputs" se for executado;
• knexFile.ts – Arquivo de configuração para acessar o banco de dados pelos
comandos executados no terminal;
• src: Pasta que tem os arquivos do projeto, como conexão com o mqtt, rotas
da aplicação, e o core do servidor;
• mqtt.ts - Nessa parte do arquivo é importado todos os arquivos necessários
para comunicação do mqtt e sincronização dos dados com o banco de
dados, conforme Figura 42.

FIGURA 42 - ARQUIVO MQTT IMPORTADO NA API

Fonte: O Autor.
75

Após isso foi criado uma função runMqtt que recebeu por parâmetro a
instância do websocket. Essa função tem o conteúdo que pode ser visto na Figura
43. Esta parte do código que foi responsável por se conectar no Broker do
RabbitMQ.

FIGURA 43 - ARQUIVO RUNMQTT

Fonte: O Autor.

Em seguida, criou-se todas as variáveis que armazenarão o nome das filas do


RabbitMQ e também as variáveis que armazenarão os valores que é recebido pelo
ESP.32, conforme pode ser vista na Figura 44.

FIGURA 44 - VARIÁVEIS E VALORES RECEBIDOS RABBITMQ

Fonte: O Autor.
76

Depois disso foi criada uma função para limpar todos os valores das
variáveis, conforme pode ser visto na Figura 45.

FIGURA 45 - FUNÇÃO PARA LIMPAR VALORES DAS VARIÁVEIS

Fonte: O Autor.

Em seguida, foi criada uma função para verificar se todas as variáveis estão
preenchidas ou não, conforme pode ser visto na Figura 46.

FIGURA 46 - FUNÇÃO PARA VALIDAR O PREENCHIMENTO DAS VARIÁVEIS

Fonte: O Autor.

Então, chegou a parte do código responsável por inserir os dados no banco


de dados e também emitir um sinal de websocket informando que um novo valor foi
sincronizado. Esse sinal de websocket será utilizado no front-end, conforme pode
ser visto na Figura 47.
77

FIGURA 47 - FUNÇÃO PARA INSERIR VALORES NO BANCO DE DADOS

Fonte: O Autor.

Em seguida utilizou-se a variável client para se conectar nas filas do


RabbitMQ, conforme pode ser visto na Figura 48.

FIGURA 48 - FUNÇÃO PARA CONECTAR NAS FILAS DO RABBITMQ

Fonte: O Autor.
78

Então, se desenvolveu a etapa do código é responsável por ouvir todos os


eventos do RabbitMQ, alocar esses eventos nas variáveis corretas e após todas
estarem preenchidas, é executado a função insertData(), conforme pode ser visto na
Figura 49.
FIGURA 49 - FUNÇÃO PARA OUVIR EVENTOS RABBITMQ

Fonte: O Autor
79

E, por fim é exportado a função runMqtt que será utilizado posteriormente no


arquivo server.ts, conforme pode ser visto na Figura 50.

FIGURA 50 - FUNÇÃO PARA EXPORTAR “RUNMQTT”.

Fonte: O Autor

• routes.ts – Arquivo responsável por receber as rotas do front-end e retornar


os valores do banco de dados de acordo com a rota:
◦ / - Rota que retorna um JSON de bem vindo a API
◦ /dashboard – Rota que retorna um JSON com o registro mais atualizado
dos campos do banco de dados/;
◦ /kwh_consume – Rota que retorna um json com dados de consumo da
ultima semana e dessa semana;
◦ /energy_import_export – Rota que retorna a energia importada,
exportada e o total por mês;
◦ /q_current - Rota que retorna os últimos 50 registros de corrente.
◦ /q_voltage – Rota que retorna os últimos 50 registros de tensão elétrica.
◦ /potencia_at_reat – Rota que retorna o último registro de potencia ativa e
reativa.
◦ /potencia_aparente – Rota que retorna os últimos 50 registros de
potencia aparente.
◦ /fator_potencia – Rota que retorna os últimos 50 registros de fator
potencia.
◦ /frequency – Rota que retorna os últimos 50 registros da frequência.
• server.ts – Arquivo principal da API, nesse arquivo configuramos, websocket,
chamamos o arquivo responsável pelo rabbitmq, configuramos o cors da
aplicação, é iniciado as rotas, é iniciado o servidor na porta 3000, conforme
pode ser visto na Figura 51.
80

FIGURA 51 - ARQUIVO SERVER.TS

Fonte: O Autor

4.1.4 ETAPA 4 - PROGRAMAÇÃO FRONT END

As aplicações chamadas “Front End”, são chamadas de aplicações


desenvolvidas voltadas para o aspecto visual gráfico, mediante interface gráfica.
Para este desenvolvimento, é comum utilizar linguagens do tipo HTML, CSS e
Javascript, conforme já revisado no projeto.
O desenvolvimento da aplicação FrontEnd começou com a elaboração da
estrutura de aplicação WEB, conforme pode ser visto na Figura 52.
81

FIGURA 52 - ESTRUTURA DA APLICAÇÃO WEB – FRONT END

Fonte: O Autor

Na Figura 52 os arquivos são detalhados abaixo:

• Arquivos
◦ Index.html – Arquivo responsável por exibir o conteúdo no navegador;
◦ correnteElétrica.js – Arquivo responsável pelo gráfico de corrente
elétrica;
◦ energiaConsumidaSemana.js – Arquivo responsável pelo gráfico energia
consumida;
◦ fatorPotencia.js – Arquivo responsável pelo gráfico fator potencia;
◦ frequencia.js – Arquivo responsável pelo gráfico frequência;
◦ potenciaAparente.js – Arquivo responsável pelo gráfico potencia
aparente;
◦ potenciaAtivaReativa.js – Arquivo responsável pelo gráfico de potencia
Ativa / Reativa;
◦ socket.js – Arquivo responsável pelo arquivo que inicializa o websocket;
◦ table.js – Arquivo responsável pelos dados da tabela html;
82

◦ tensaoEletrica.js – Arquivo responsável pelo gráfico de tensão elétrica;

• Arquivo index.html

No head do HTML sã importados todos os scripts e CSS necessários para


criação dos gráficos, estilização e comunicação com a API. No Bloco Figura 53 é
criado a tabela, essa tabela é populada pelo arquivo table.js.

FIGURA 53 - CRIAÇÃO DAS TABELAS

Fonte: O Autor
No Bloco Figura 54, são criados os gráficos de Energia Consumida e
Energia Importada e Exportada.

FIGURA 54 - CRIAÇÃO DOS GRÁFICOS DE ENERGIA

Fonte: O Autor
83

No Bloco Figura 55, são criados os gráficos de Energia Consumida e


Energia Importada e Exportada.

FIGURA 55 - CRIAÇÃO DOS GRÁFICOS DA CORRENTE ELÉTRICA

Fonte: O Autor

No Bloco Figura 56, são criados os gráficos da Tensão Elétrica.

FIGURA 56 - CRIAÇÃO DOS GRÁFICOS DA TENSÃO ELÉTRICA

Fonte: O Autor

Nos Blocos Figura 57, são criados os gráficos da Tensão Elétrica.


84

FIGURA 57 - CRIAÇÃO DOS GRÁFICOS DAS POTÊNCIAS

Fonte: O Autor

Por fim, no final do arquivo HTML são importados todos os scripts que são
responsáveis por alimentar todos os gráficos via REST e Websocket, conforme pode
ser visto na Figura 58.

FIGURA 58 - IMPORTAÇÃO DOS SCRIPTS – ALIMENTAÇÃO DE GRÁFICOS

Fonte: O Autor
85

Nos Bloco da Figura 59, são há o detalhamento do arquivo responsável pela


parametrização do gráfico da Corrente Elétrica.

FIGURA 59 - DETALHAMENTO GRÁFICO DA CORRENTE ELÉTRICA

Fonte: O Autor
86

Este arquivo, ao se executar o script pela primeira vez ele carrega o gráfico
e depois a cada nova sincronização, ele também o atualiza.
Nos Bloco da Figura 60, são há o detalhamento do arquivo responsável pela
parametrização do gráfico da Energia Consumida

FIGURA 60 - DETALHAMENTO GRÁFICO DA ENERGIA CONSUMIDA

Fonte: O Autor
87

Esse arquivo ao executar o script pela primeira vez ele carrega o gráfico e
depois a cada nova sincronização ele também atualiza o gráfico.
Os demais gráficos, para as grandezas Tensão, Fator de Potência,
frequência, potência aparente são criados usando o mesmo procedimento.
No Bloco da Figura 61, é mostrado o detalhamento do arquivo responsável
pela criação da tabela de valores, do Front-End.

FIGURA 61 - DETALHAMENTO CRIAÇÃO DA TABELA DO FRONT-END

Fonte: O autor
88

Por fim, no Bloco da Figura 62, é mostrado o detalhamento do arquivo


responsável pela criação do Socket ( conexão), com o IP do servidor hospedado na
Amazon.
FIGURA 62 - DETALHAMENTO ARQUIVO DE CRIAÇÃO DO SOCKET

Fonte: O autor

Dessa forma, então se conclui toda a programação do Back End:

• MicroControlador ESP32,
• Programação do Broker MQTT (RabbitMQ),
• Preparação do Ambiente AWS,
• Hospedagem AWS, Programação da API,
• Programação do Banco de Dados,

Também se concluiu a programação do Front-End:

• HTML,
• CSS
• Server
• Gráficos
• Tabelas

Na Figura 63, é mostrado o diagrama completo das aplicações


desenvolvidas durante o projeto.
89

FIGURA 63 - DIAGRAMA COMPLETO DO PROJETO

Fonte: O autor
90

5 RESULTADOS

5.1.1 APRESENTAÇÃO FRONT-END

Após conclusão da programação Front-End, se iniciou os testes e correções,


e se obteve, com o acesso ao link da Amazon (onde está hospedada a aplicação), o
resultado mostrado na na Figura 64, e que também pode ser acessado através do
link http://elieltonsmartmeter.s3-website.us-east-2.amazonaws.com/.

FIGURA 64 - RESULTADO FRONT-END PARTE 1

Fonte: O autor

A Figura 65 exibe o gráfico da tensão Elétrica e da Corrente elétrica.

FIGURA 65 - RESULTADO FRONT-END PARTE 2

Fonte: O autor
91

A Figura 66 exibe o gráfico do Triângulo das Potências, exibindo, assim,


valores da Potência Ativa, Potencia Reativa, e Potência Aparente.

FIGURA 66 - RESULTADO FRONT-END PARTE 3

Fonte: O autor

Já a Figura 67 exibe o gráfico da Potência Ativa e Potência Reativa.

FIGURA 67 - RESULTADO FRONT-END PARTE 3

Fonte: O autor

5.1.2 TESTES

Embora o medidor seja certificado por normas internacionais, para conferir


algumas medições, selecionou-se algumas cargas conforme abaixo:

• 1 aquecedor 1500W;
92

• 1 chuveiro 5000W;

• 1 ferro elétrico 1250W;

5.1.2.1 Cenário Inicial

Iniciou-se os testes com essas cargas desligadas, conforme pode ser visto
na Figura 68, a partir de 16h41m do dia 18/07. Os eventos foram medidos em média
de intervalo de 9 segundos.

FIGURA 68 - CORRENTE ELÉTRICA E TENSÃO ELÉTRICA INICIAL

Fonte: O autor

Analisando a Figura 68, percebe-se que a corrente elétrica, neste momento


estava em 70mA, e tensão em 216V.

Neste momento, o gráfico que exibe a relação inicial entre potência ativa e
reativa pode ser visto na Figura 69.
93

FIGURA 69 - POTÊNCIA ATIVA E POTÊNCIA REATIVA INICIAL

Fonte: O autor

Analisando a Figura 69, o gráfico trás justamente o valor dessas grandezas,


sendo a potência ativa e reativa, nos valores 0,009kW e 0,011kVar, respectivamente.

O Fator de Potência estava próximo a 0,62, e a frequência estava oscilando


próximo a 60Hz, conforme pode ser visto na Figura 70, a partir de 16h41m do dia
18/07.

FIGURA 70 - FATOR DE POTÊNCIA E FREQUÊNCIA INICIAL

Fonte: O autor
94

A Potência Ativa, Reativa e Aparente puderam ser vistas na Figura 71, a


partir de 16h41m do dia 18/07, em intervalos de 9s, sendo a Potência Ativa
oscilando entre 0,009kW e 0,010kW, a Potência Reativa entre 0,011 e 0,013kVar, e a
Potência Aparente entre 0,015 e 0,017 kVA.

FIGURA 71 - POTÊNCIA ATIVA, REATIVA E APARENTE INICIAIS

Fonte: O autor

Analisando a Figura 71, se realizar o cálculo, considerando Potência Ativa:


0,009kW e Potência Reativa: 0,011kVar, então pode se calcular a Potência Aparente
(S) através da Equação 25.

S=√ (0,009.103)2 +(0,011.103 )2=0,014 kVA Equação 25

Pode se perceber, então, que na Figura 71, o valor da relação entre as


potências é apresentado conforme o calculado.

5.1.2.2 Teste 01

Como primeiro teste, ligou-se o aquecedor de 1500W, com corrente de 11A,


conforme pode ser visto na Figura 72, a partir de 16h48m do dia 18/07.
95

FIGURA 72 - TESTE 1 - CORRENTE E TENSÃO ELÉTRICA

Fonte: O autor

Analisando a Figura 72, percebe-se que a corrente elétrica, neste momento


estava foi apresentada no gráfico do FrontEnd, em 11A, e a tensão em 220V,
conforme era o valor esperado.

Iniciou-se os testes com essas cargas desligadas, conforme pode ser visto
na Figura 73, a partir de 16h41m do dia 18/07.

FIGURA 73 - TESTE 1 – POTÊNCIAS ATIVA, REATIVA E APARENTE

Fonte: O autor

Analisando a Figura 73, se realizar o cálculo, considerando Potência Ativa:


2,196kW e Potência Reativa:1,25kVar, então pode se calcular a Potência Aparente
(S) através da Equação 26.
96

S=√ (2.196.10 ) +(1,25.10 ) =2,52 kVA


3 2 3 2
Equação 26

Pode se perceber, então, que na Figura 73, o valor da relação entre as


potências é apresentado também conforme o calculado.

5.1.2.3 Teste 02

Como segundo teste, ligou-se o um ferro elétrico na potência de 1250W


( que demanda uma corrente de 9,44A), e se manteve o aquecedor ligado, então a
corrente subiu para 21,29A conforme pode ser visto na Figura 74, a partir de
16h52m do dia 18/07.

FIGURA 74 - TESTE 2 - CORRENTE E TENSÃO ELÉTRICA

Fonte: O autor

Analisando a Figura 74, percebe-se que a corrente elétrica se comportou


conforme o esperado, ou seja, estava em 11,49A e subiu para 21,29, com a ligação
do ferro elétrico que demandava uma corrente aproximada de 9,44A. A tensão, por
sua vez, se manteve dentro do valor esperado, oscilando entre 219,8V e 220,20V,
neste intervalo de tempo.

A potência Ativa, Reativa e Aparente, neste momento da ligação da segunda


carga resistiva ( a partir de 16h52m do dia 18/07) também foram majoradas,
conforme pode ser visto na Figura 75.
97

FIGURA 75 - TESTE 2 – POTÊNCIAS ATIVA, REATIVA E APARENTE

Fonte: O autor

Analisando a Figura 75, se realizar o cálculo, considerando a corrente de


21,29A, para tensão de 220V, e um fator de potência de 0,867 tem-se a Potência
Aparente (S) através da Equação 27, a Potência Ativa através da Equação 28 e a
Potência Reativa através da Equação 29.

S=21,29 . 220=4,68 kVA Equação 27

P=21,29 . 220. cos (θ )=4683,8 .0,867=4,060 kW Equação 28

Q=21,29 . 220 sen(cos1 (0,867))=2,443 kVar Equação 29

Pode se perceber, então, que na Figura 75, o valor da relação entre as


potências é apresentado também conforme o calculado.

Já o fator de potência e a frequência também foram exibidos nos seus


respectivos gráficos seguindo os valores da tabela online do site, conforme pode ser
visto na Figura 76.
98

FIGURA 76 - TESTE 2 – FATOR DE POTÊNCIA E FREQUÊNCIA

Fonte: O autor

5.1.2.4 Teste 03

Como terceiro teste, desligou-se o ferro elétrico e ligou-se o chuveiro elétrico


e se manteve o aquecedor ligado, então a corrente subiu para 32,43A, conforme
pode ser visto na Figura 77, a partir de 16h56m do dia 18/07.

FIGURA 77 - TESTE 3 - CORRENTE E TENSÃO ELÉTRICA

Fonte: O autor

Analisando a Figura 77, percebe-se que a corrente elétrica, neste momento


estava em 11,49A subiu para 32,43A, assim como também o Fator de Potência, que,
com esta carga, se elevou de 0,867 para 0,988.
99

Seguindo então com o teste 3, se analisou a potência Ativa, Reativa e


Aparente, que neste momento da ligação do chuveiro elétrico ( a partir de 16h56m
do dia 18/07) também foram majoradas, conforme pode ser visto na Figura 78.

FIGURA 78 - TESTE 3 – POTÊNCIAS ATIVA, REATIVA E APARENTE

Fonte: O autor

Analisando a Figura 78, percebe-se que, neste momento, com o fator de


Potência próximo de 1, a Potência Ativa se aproxima da Potência Aparente,
conforme era o esperado.

Já na Figura 79 pode se verificar que no período analisado o fator de


Potência se elevou também para próximo da unidade, assim como era o resultado
esperado.

FIGURA 79 - TESTE 3 - FATOR DE POTÊNCIA E FREQUÊNCIA

Fonte: O autor
100

5.1.2.5 Teste 04

Como quarto teste, se desligou o chuveiro elétrico e só manteve ligado o


aquecedor de 1500W, com corrente de 11A, conforme pode ser visto na Figura 80, a
partir de 17h00m do dia 18/07.

FIGURA 80 - TESTE 4 – CORRENTE E TENSÃO ELÉTRICA

Fonte: O autor

Analisando a Figura 80, percebe-se que a corrente elétrica, neste momento


estava em 11A, e Tensão em torno de 219,0 a 221V.

O mesmo ocorreu para as Potências ( Ativa, Reativa e Aparente). Como pode


ser visto na Figura 81, ao se desligar as demais cargas e só manter o aquecedor,
com a redução da corrente, passou a ser exibido no gráfico das potências o valor
esperado:

• Potência Ativa – 2,23kW

• Potência Reativa – 1,31kVar

• Potência Aparente – 2,59kVA


101

FIGURA 81 - TESTE 4 – POTÊNCIAS ATIVA, REATIVA E APARENTE

Fonte: O autor

5.1.3 ANÁLISE DOS RESULTADOS

Analisando os resultados, percebeu-se que foi possível cumprir com o


planejado, que foi a implementação da sistemática da exibição de forma remota e
amigável, através de um medidor fisicamente instalado.

No período analisado, constatou-se que, durante boa parte do dia, com o uso
das cargas da planta, o fator de potência oscila entre 0,6 e 0,9, o que representa
bastante energia reativa presente na instalação.

Encontrou-se muitas dificuldades em se conseguir medir as grandezas, de


acordo com os endereços de registros informados pelo manual do fabricante do
medidor DDS 238-4. Por exemplo, muitos registradores, quando acessados seus
endereços, não retornaram os valores que deveriam retornar.

Realizou-se então um procedimento e retirar o conversor RS485 – TTL e,


mediante o software Modbus Poll se realizou o mapeamento do endereço correto
dos registradores. Com isso, se adequou esses registros na programação do
microcontrolador.

Mesmo após esse novo mapeamento, se identificou que nenhum registrador


trazia a medida da Tensão Elétrica. Para isto, então, optou-se por realizar a medida
da tensão elétrica de forma indireta, para isto utilizando o fator de potência, a
potência ativa, e a corrente elétrica.
102

6 CONCLUSÃO

O projeto desenvolvido neste trabalho consistiu em realizar um


desenvolvimento prático utilizando diversas áreas da Engenharia Elétrica.

No projeto foi realizado uma revisão bibliográfica dos principais tópicos


utilizados no desenvolvimento do projeto, tais como estudo de Potências, Internet
das Coisas, Comunicação Serial, Microcontrolador, e alguns tópicos voltados a
programação, tais como Banco de Dados, Back End, Front End, Linguagens
Javascript, CSS e HTML, além de sistema de mensageria, com a abordagem do
protocolo Broker MQTT.

Foi, também, estudado o funcionamento de um medidor de Energia


Comercial, com suas principais funcionalidades, incluindo grandezas medidas,
registradores, e formas de comunicação utilizada pelo equipamento ( RS485).

Implementou-se a interface serial para coleta de dados no Medidor de


Energia, e integrou-se este com um microcontrolador que foi programado, de forma
a realizar a aquisição dos dados e enviar, via Wi-fi, a Web, a um Broker MQTT
devidamente hospedado em um servidor na nuvem, na Amazon AWS.

Foi realizada a programação de uma API, para que recebesse as mensagens


do Broker, armazenasse e lesse as informações em um banco de dados,
fornecesse rotas para uma aplicação Front End, que, por sua vez, serviu para exibir
para o usuário, em uma interface amigável, informações referentes ao custo da
Energia ( Energia Total, Energia mensal, custo aproximado da energia, Energia
Importada e Exportada), e informações referentes a qualidade da energia ( Tensão,
Corrente, Potência Ativa, Reativa e Aparente, Fator de Potência e Frequência).

O painel Front-End também fornece gráficos que são responsivos, ou seja, se


adequam ao tamanho da tela do computador.

Como dificuldades encontradas, teve-se conseguir ler, inicialmente os


registradores do medidor, que estavam diferentes do que apresentado no manual do
fabricante, então, para se conseguir, utilizou-se o mapeamento de todos os
medidores através do uso do software Modbus Poll, comunicando-se ao medidor
através de um conversor RS485-RS232 e utilizando a funçao 03 para se ler os
103

dados. Com isso, identificou-se o endereço correto dos registros, que então foram
atualizados no código de programação do microcontrolador ESP-32.

Também se obteve dificuldades na leitura de alguns dados ( corrente e


tensão), que precisaram então ser tratados antes de serem exibidos no gráfico.

Realizou-se alguns testes para certificação da precisão das medidas,


ligando-se cargas com valores conhecidos e se aferindo as medições.

A interface desenvolvida entre medidor e web pode ser aplicada em vários


projetos, uma vez que tendo informações chegando a um Broker, facilmente se
adapta dali em diante as aplicações até o front-end, logo, conclui-se que o projeto é
adaptativo para outras aplicações, bastando, para isso, poucas modificações.

O estudo deste projeto foi muito enriquecedor, pois proporcionou ao


acadêmico estudar um pouco do funcionamento de comunicação serial, que é muito
utilizada na indústria, além de ter a oportunidade de se mapear registradores e se
coletar informações, além de aplicar, neste projeto vários conceitos do curso de
Engenharia Elétrica.
104

REFERÊNCIAS

ALBINI, L. C. P. REDES DE COMPUTADORES I. p. 95, [s.d.].

ALISON P. DE MOURA. Análise de Circuitos em Corrente Alternada para


Sistemas de Potência. [s.l.] Artliber Editora, [s.d.].

CHARLES K. ALEXANDER; MATTHEW N. O SADIKU. Fundamentos de Circuitos


Elétricos. 5. ed. [s.l.] MC Graw Hill, 2013.

DAVID FLANAGAN. JAVASCRIPT: O Guia Definitivo. 6a ed. Porto Alegre:


Bookman, 2013.

EDUARDO MAGRANI. A Internet das Coisas. 1o ed. Rio de Janeiro: FGV, 2018.

FREITAS, C. M. Saiba mais sobre redes de comunicação em RS-485 -


Embarcados, [s.d.]. Disponível em: <https://www.embarcados.com.br/redes-de-
comunicacao-em-rs-485/>. Acesso em: 16 jun. 2021

GUSTAVO TEIXEIRA. ESP32 Tutorial com Primeiros Passos. Disponível em:


<https://www.usinainfo.com.br/blog/esp32-tutorial-com-primeiros-passos/>. Acesso
em: 16 jun. 2021.

Interfaces Modbus de entradas e saídas analógicas e digitais. Disponível em:


<https://alfacomp.net/produto/interfaces-modbus/>. Acesso em: 17 jun. 2021.

JAHNO, P. H. S. Implementação do protocolo MODBUS utilizando redes sem fio


baseado no protocolo IEEE 802.15.4. 21 out. 2016.

MAURÍCIO SAMY SILVA. CSS3. 1a ed. São Paulo: Novatec, 2012.

Modbus RTU. Disponível em: <https://ozeki.hu/p_5854-ozeki-modbus-rtu.html>.


Acesso em: 12 jul. 2021.

PEDRO BERTOLETI. Projetos com ESP32 e LoRA. 1a ed. [s.l.] NCB, 2019.

Protocolo MQTT - Redes 1. Disponível em:


<https://www.gta.ufrj.br/ensino/eel878/redes1-2019-1/vf/mqtt/>. Acesso em: 17 jun.
2021.

REZENDE, J. O. Energia elétrica e sustentabilidade. 1. ed. [s.l.] Antonella


Carvalho de Oliveira, 2018.

ROMANCINI, E. M. R. Desenvolvimento de Smart Meter integrado com IoT para


monitoramento da energia elétrica em residências. p. 42, 2020.

SENTRON measuring devices and power monitoring. newton_ps-detail.


Disponível em: <https://new.siemens.com/br/pt/produtos/energia/produtos-baixa-
tensao/multimedidores.html>. Acesso em: 29.mai. 2021.
105

SÉRGIO LUIZ STEVAN JÚNIOR. IOT - Internet das Coisas. 1a ed. São Paulo:
Saraiva, 2018.

TOMZIN HIKING - DDS238-4 SMART-METER MANUAL USER. , [s.d.]. Disponível


em: <https://directvoltage.com/wp-content/uploads/WiFi-Meter-manual_OLD.pdf>.
Acesso em: 29.mai. 2021

VINÍCIUS CARVALHO. MySQL - Comece com o principal banco de dados open


source do mercado. [s.l.] Casa do Código, 2015.

Você também pode gostar