O projeto foi dividido em partes:
1- Aquisição dos sensores zptm101b e SCT013-50;
2- Montagem do circuito;
3- Programação do código pela interface do arduino IDE;
4- Criação do banco de dados através do Google Sheet;
5- Criação do aplicativo através da plataforma Blynk.
Aquisição dos sensores zptm101b e SCT013-50
Inicialmente, o projeto envolvia o uso do sensor ZPTM101B, um transformador de corrente 200/1, e um sensor de corrente ACS712. No entanto, ao trabalhar com correntes baixas (0~10A), foi observada uma discrepância nos valores de corrente obtidos. Essa inconsistência foi atribuída à interferência eletromagnética e à limitação do transformador em transformar correntes muito altas quando estava sendo utilizado para medir correntes muito baixas.
Para solucionar esse problema, optou-se por substituir tanto o transformador quanto o sensor de corrente, adotando o uso direto do sensor SCT013-50. Esse sensor possui a capacidade de transformar correntes de até 50A em uma saída analógica de 1V, eliminando as limitações identificadas anteriormente.
Montagem do circuito
A montagem do circuito envolve a configuração do sensor de corrente e do circuito de tensão.
Para o sensor de corrente, é utilizado um divisor de corrente composto por dois resistores de 10k Ω ligados em paralelo. Essa configuração permite que o ESP32 leia as variações de tensão de forma adequada, transformando-as de negativas para positivas. Além disso, é adicionado um capacitor de 10uF para filtrar o sinal recebido e reduzir interferências. O sensor de corrente é conectado ao divisor de corrente e ao terra. É importante ressaltar que o sensor é posicionado em apenas uma fase do cabo, permitindo a leitura do campo magnético ao redor do cabo por meio do efeito Hall.
No circuito de tensão, são necessárias três conexões: VCC, OUT e GND. O pino VCC é conectado à alimentação de 3,3V do ESP32, o pino OUT é conectado ao pino 35 do ESP32 através de uma resistência de 10k Ω, pois assim, é garantido que a corrente de volta para o ESP32 não chegará a queimar a porta, e o pino GND é ligado ao terra do microcontrolador. Para a leitura da tensão, são conectados dois cabos à rede elétrica, um na fase e outro no neutro. Essa configuração permite que o sensor realize a medição da tensão.
Programação do código pela interface do arduino IDE
O código foi dividido em três partes principais: sensores, banco de dados e Blynk;
Primeiramente o código foi separado em duas partes de processamento chamadas de "task1" e "task2", isso se deu pelo fato da task1 ficar responsável por toda a parte lógica dos sensores e do blynk, já a task2 ficou responsável por enviar os dados obtidos pela task1 para o banco de dados, ambas trabalham simultaneamente, garantindo eficiência e precisão.
Na parte dos sensores, foi utilizada a biblioteca "EmonLib.h", que desempenha um papel fundamental na medição de energia elétrica. Essa biblioteca permite a leitura dos sinais provenientes dos sensores e a calibração para obter a melhor precisão nas medições. No entanto, é importante mencionar que o sensor de corrente apresenta uma limitação para medições abaixo de 0,5A, devido a uma perturbação inicial. No contexto do projeto, que busca medir o consumo mensal de uma residência, essa limitação não afeta o projeto, pois considera-se que os eletrodomésticos comuns, como geladeira e micro-ondas, têm um consumo acima desse valor. Os sensores foram calibrados utilizando um alicate amperímetro (sensor de corrente) e um multímetro (sensor de tensão), resultando em medições bastante próximas ao consumo real de energia elétrica.
A parte do banco de dados tem como objetivo garantir que os dados medidos não sejam perdidos em caso de interrupção no fornecimento de energia. Para isso, foi criada uma planilha no Google Sheets para armazenar informações como kWh consumidos, preço do kWh e gastos diários durante uma semana inteira, a necessidade disso vem para se fazer a projeção futura de quanto o usuário terá de pagar se os gastos continuarem do jeito que está. Foram utilizadas as bibliotecas "Wifi.h", "HTTPClient.h" e "WifiClient.h" para realizar a comunicação com a planilha.
Quanto ao Blynk, as bibliotecas "string.h" e "BlynkSimpleEsp32.h" foram utilizadas para implementar a plataforma de criação do aplicativo. Através do aplicativo no celular, é possível visualizar os seguintes dados: kWh gastos, Possivel gasto energético no fim do mês, valor atual da fatura de energia elétrica, previsão de gastos até o final do mês com base na média atual, além de ter a opção de inserir o valor do kWh e definir um limite máximo de gasto na fatura. Quando o valor da fatura se aproxima do limite estabelecido, é enviada uma notificação para o celular e um e-mail informando que o gasto está próximo do valor estipulado. Essas adições foram realizadas fora do escopo primário do projeto, que originalmente consistia em registrar os kWh consumidos desde o início da contagem, estimar gastos futuros com base nas medições atuais e calcular o custo em reais dos kWh desde o início do mês, porém para uma visualização melhor do projeto, foi decidido juntos aos docentes da disciplina, fazer esses acréscimos de escopo.
Criação do banco de dados através do Google Sheet
A planilha de banco de dados, intitulada "Banco de dados PI2", está hospedada em uma conta de e-mail pessoal do Gmail. Durante as primeiras tentativas de criação, as contas de e-mail institucional e específica para a disciplina foram bloqueadas pelo Google devido à falta de validação completa dos dados pessoais. No entanto, esse obstáculo foi superado e a planilha foi criada com sucesso.
A automação da planilha foi realizada por meio do uso do recurso "Apps Script", disponível nas opções do Gmail. Esse recurso permite a automação por meio da linguagem de programação Java. No meu caso, foi necessário criar uma nova implantação do "app da web" dentro do Apps Script. Essa etapa foi crucial, pois gerou um URL que, combinado com o ESP32, permite a realização de solicitações (requests) para a inserção de valores no sistema. Com os valores inseridos na planilha, caso ocorra uma interrupção de energia no microcontrolador, o código desenvolvido é responsável por ler esses valores e substituí-los nos locais apropriados.
A planilha contém os dados essenciais para o correto funcionamento do sistema, como kWh gastos, preço do kWh e dias da semana para a projeção dos gastos com base na média da última semana. A fim de evitar sobrecarga nos sistemas do Google, foi estabelecido um limite de 10.000 amostras por dia. No entanto, esse número é mais do que suficiente para o escopo do projeto. Foi definido que a cada 15 segundos, uma nova linha é adicionada à planilha. Dessa forma, em um dia de uso normal, teríamos uma média de 5.760 amostras.
Para automatizar esse processo, foi implementado um script em JavaScript dentro da planilha. Esse script possibilita a conexão com o ESP32, permitindo que o microcontrolador acesse a planilha e insira os dados coletados pelos sensores de tensão e corrente. Essa integração facilita o registro contínuo das medições realizadas pelo sistema.
Criação do aplicativo através da plataforma Blynk
O Blynk é uma plataforma de Internet das Coisas (IoT) que proporciona a criação de aplicativos e o controle de dispositivos eletrônicos de forma fácil e intuitiva. É uma solução amplamente utilizada por desenvolvedores e entusiastas que desejam desenvolver projetos personalizados de IoT, sem necessidade de conhecimento extensivo em programação ou desenvolvimento de aplicativos.
No projeto em questão, o Blynk desempenha um papel fundamental, sendo responsável pela conexão entre o usuário e o projeto. Através dessa plataforma, é possível controlar variáveis do sistema e visualizar informações relevantes para o usuário.
Com o ESP32 conectado à rede, o usuário pode acessar o aplicativo de qualquer lugar e acompanhar em tempo real seus gastos com energia elétrica. Além disso, o Blynk permite a automatização do envio de e-mails e notificações conforme necessário. No projeto atual, o Blynk é configurado para enviar um e-mail e uma notificação para o usuário quando o valor da fatura atinge 90% do valor máximo estipulado por ele, alertando-o sobre o consumo próximo ao limite estabelecido.
Essa integração com o Blynk proporciona uma experiência interativa e conveniente para o usuário, permitindo um acompanhamento eficiente e oportuno do consumo de energia elétrica.