Escolar Documentos
Profissional Documentos
Cultura Documentos
CURITIBA
2021
ELIELTON MATIAS DA SILVA
CURITIBA
2021
TERMO DE APROVAÇÃO
______________________________________
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
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.
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.
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
1.1 JUSTIFICATIVA
1.2 OBJETIVOS
1.3 METODOLOGIA
2 REVISÃO DE LITERATURA
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
p=v⋅i Equação 2
sendo:
t1
J
1Wh=1 ⋅3600 s=3600 J Equação 4
s
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
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
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
√
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.
√
2π
1
V RMS =
2π
∫ 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
Im
I RMS = Equação 19
√2
P=S⋅cos(θ ) Equação 21
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.
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.
(FREITAS, [s.d.], p. 1)
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.
por um intervalo silencioso de pelo menos 3,5 caracteres, conforme pode ser visto
na Figura 5.
• <script> → Representa um Script. Dentro dessa TAG, vai todo o código, por
exemplo Javascript quando se trabalha com este formato;
Então, uma regra CSS pode ser composta por várias declarações. Estas devem ser
separadas por “;”. Um exemplo, segue na Figura 8.
• Blueprint;
• Bootstrap;
• Cascad;
• Framework;
• Foundation;
• Materialize
• 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;
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
Fonte: O Autor
44
Current
Current Input Sampling
Integrated Saída de
Circuit Dados
Voltage
Voltage Input Sampling
Fonte: o Autor ( Adaptado de Manual Tomzn Hiking)
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
O Slave então responde, com um Frame que pode ser visto no QUADRO 5.
número setado. Por exemplo, se utilizar a seta para cima, e ir na opção 11 será
exibido o Fator de Potência.
• 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;
Fonte: O Autor
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.
Fonte: O Autor.
Fonte: O Autor.
Fonte: O Autor.
54
FONTE: O autor .
FONTE: O autor
Fonte: O Autor
56
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.
FONTE: O Autor
57
Fonte: O Autor
Fonte: O Autor
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
Fonte: O Autor.
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
Fonte: O Autor.
Fonte: O Autor.
Fonte: O Autor.
Fonte: O Autor.
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.
• 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.
• cd /etc/nginx/sites-available
• rm -rf default
• cd /etc/nginx/sites-enabled
• rm -rf default
65
• cd /etc/nginx/sites-available
• sudo vi app
• 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; }}
• sudo ln -s /etc/nginx/sites-available/app
• etc/nginx/sites-enabled/app
Após execução deste comando, o banco de dados foi criado com sucesso,
com o nome “smart_meter_elielton”.
• 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.
• cd ~/
• mkdir RabbitMQ
• cd RabbitMQ
• sudo vi docker-compose.yml
• 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"
Fonte: O Autor.
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
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.
Fonte: O Autor.
70
Fonte: O Autor.
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.
Fonte: O Autor.
71
Fonte: O Autor.
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.
Fonte: O Autor.
Fonte: O Autor.
Fonte: O Autor.
73
Fonte: O Autor.
• 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.
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.
Fonte: O Autor.
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.
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.
Fonte: O Autor.
Fonte: O Autor.
Fonte: O Autor.
78
Fonte: O Autor
79
Fonte: O Autor
Fonte: O Autor
Fonte: O Autor
• 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
• Arquivo index.html
Fonte: O Autor
No Bloco Figura 54, são criados os gráficos de Energia Consumida e
Energia Importada e Exportada.
Fonte: O Autor
83
Fonte: O Autor
Fonte: O Autor
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.
Fonte: O Autor
85
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
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.
Fonte: O autor
88
Fonte: O autor
• 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,
• HTML,
• CSS
• Server
• Gráficos
• Tabelas
Fonte: O autor
90
5 RESULTADOS
Fonte: O autor
Fonte: O autor
91
Fonte: O autor
Fonte: O autor
5.1.2 TESTES
• 1 aquecedor 1500W;
92
• 1 chuveiro 5000W;
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.
Fonte: O autor
Neste momento, o gráfico que exibe a relação inicial entre potência ativa e
reativa pode ser visto na Figura 69.
93
Fonte: O autor
Fonte: O autor
94
Fonte: O autor
5.1.2.2 Teste 01
Fonte: O autor
Iniciou-se os testes com essas cargas desligadas, conforme pode ser visto
na Figura 73, a partir de 16h41m do dia 18/07.
Fonte: O autor
5.1.2.3 Teste 02
Fonte: O autor
Fonte: O autor
Fonte: O autor
5.1.2.4 Teste 03
Fonte: O autor
Fonte: O autor
Fonte: O autor
100
5.1.2.5 Teste 04
Fonte: O autor
Fonte: O autor
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.
6 CONCLUSÃO
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.
REFERÊNCIAS
EDUARDO MAGRANI. A Internet das Coisas. 1o ed. Rio de Janeiro: FGV, 2018.
PEDRO BERTOLETI. Projetos com ESP32 e LoRA. 1a ed. [s.l.] NCB, 2019.
SÉRGIO LUIZ STEVAN JÚNIOR. IOT - Internet das Coisas. 1a ed. São Paulo:
Saraiva, 2018.