- Materiais requisitados:
- Funcionamento do Sensor de Corrente ACS712:
- Diagrama de circuito
- Código e explicação:
- Aplicativo Android para monitoramento do consumo de eletricidade:
Todos nós conhecemos medidores de energia elétrica que são instalados em todas as casas ou escritórios para medir o consumo de eletricidade. No final de cada mês, muitos de nós nos preocupamos com a alta conta de luz e temos que olhar o medidor de energia de vez em quando. Mas e se pudermos monitorar nosso consumo de eletricidade de qualquer lugar do mundo e receber um SMS / e-mail quando seu consumo de energia atingir um valor limite. Aqui estamos construindo um projeto de medidor de energia baseado em IoT.
Anteriormente, construímos um circuito medidor de energia que envia SMS sobre a conta usando o módulo GSM. Neste projeto fazemos um medidor de energia elétrica inteligente usando Arduino e módulo Wi-Fi ESP8266 que pode não só enviar um SMS / e-mail de sua conta de eletricidade, mas também monitorar o consumo de energia a qualquer hora e de qualquer lugar do mundo. Aqui, usamos um Sensor de Corrente ACS712 para medir o consumo de energia, discutiremos sobre isso em breve.
Teremos ajuda da plataforma IFTTT para vincular nosso Wi-Fi a notificações por SMS / e-mail. Também usaremos o aplicativo MQTT Dashboard Android para monitorar o uso de energia. Então vamos começar….
Materiais requisitados:
- Arduino Uno
- ESP12 / NodeMCU
- Sensor de corrente ACS712-30Amp
- Qualquer aparelho AC
- Fios macho-fêmea
Funcionamento do Sensor de Corrente ACS712:
Antes de começarmos a construir o projeto, é muito importante entendermos o funcionamento do sensor de corrente ACS712, pois é o componente chave do projeto. Medir a corrente, especialmente a corrente AC, é sempre uma tarefa difícil devido ao ruído acoplado ao problema de isolamento impróprio etc. Mas, com a ajuda deste módulo ACS712 que foi projetado pela Allegro, as coisas se tornaram muito mais fáceis.
Este módulo trabalha com o princípio do efeito Hall, que foi descoberto pelo Dr. Edwin Hall. De acordo com seu princípio, quando um condutor de corrente é colocado em um campo magnético, uma voltagem é gerada em suas bordas perpendiculares às direções da corrente e do campo magnético. Não vamos nos aprofundar muito no conceito, mas simplesmente usar um sensor Hall para medir o campo magnético ao redor de um condutor de corrente. Essa medição será em termos de milivolts, que chamamos de tensão hall. Essa tensão hall medida é proporcional à corrente que estava fluindo através do condutor.
A principal vantagem de usar o Sensor de Corrente ACS712 é que ele pode medir as correntes CA e CC e também fornece isolamento entre a Carga (carga CA / CC) e a Unidade de Medição (parte do Microcontrolador). Conforme mostrado na imagem, temos três pinos no módulo que são Vcc, Vout e Ground respectivamente.
O bloco de terminais de 2 pinos é onde o fio condutor de corrente deve ser passado. O módulo trabalha em + 5V, portanto, o Vcc deve ser alimentado por 5V e o aterramento deve ser conectado ao aterramento do sistema. O pino Vout tem uma tensão de deslocamento de 2500mV, ou seja, quando não há corrente fluindo através do fio, a tensão de saída será 2500mV e quando a corrente fluindo for positiva, a tensão será maior que 2500mV e quando a corrente fluindo for negativa, o a tensão será inferior a 2500mV.
Estaremos usando o pino analógico do Arduino para ler a tensão de saída (Vout) do módulo, que será 512 (2500mV) quando não houver corrente fluindo pelo fio. Este valor reduzirá conforme a corrente flui na direção negativa e aumentará conforme a corrente flui na direção positiva. A tabela a seguir o ajudará a entender como a tensão de saída e o valor ADC variam com base na corrente que flui pelo fio.
Esses valores foram calculados com base nas informações fornecidas na Folha de Dados do ACS712. Você também pode calculá-los usando as fórmulas abaixo:
Tensão Vout (mV) = (Valor ADC / 1023) * 5000 Corrente através do fio (A) = (Vout (mv) -2500) / 185
Agora que sabemos como funciona o Sensor ACS712 e o que podemos esperar dele. Vamos prosseguir para o diagrama do circuito.
Usamos este sensor para fazer o circuito do amperímetro digital usando o microcontrolador PIC e o ACS712.
Diagrama de circuito
Etapa 1: Faça login no IFTTT com suas credenciais.
Etapa 2: Em Meus miniaplicativos, clique em Novo miniaplicativo
Etapa 3: Clique em + this
Passo 4: Pesquise AdaFruit e clique nele.
Etapa 5: clique em Monitorar um feed no AdaFruit IO.
Etapa 6: escolha Feed como fatura, Relacionamento como ' igual a' e o valor limite no qual deseja um e-mail. Clique em Criar ação . Usei 4 como meu valor de disparo limite.
Etapa 7: Clique em + isso . Pesquise por G-mail e clique nele e faça o Login com suas credenciais de g-mail.
Etapa 8: Clique em enviar um e-mail para você mesmo.
Passo 9: Escreva seu assunto e corpo conforme mostrado e clique para criar.
Etapa 10: Sua ' receita ' está pronta. Revise-o e clique em Concluir.
Agora, concluímos a integração com a web. Vamos passar para a parte de codificação..
Código e explicação:
Estamos usando comunicação serial entre ESP12 e Arduino. Portanto, temos que escrever código para Arduino e NodeMCU para transmissão e recepção.
Código para a parte do transmissor, ou seja, para Arduino Uno:
O código Arduino completo é fornecido no final deste tutorial. Usaremos uma biblioteca para sensor de corrente que pode ser baixada deste link.
Esta biblioteca possui função embutida para calcular a corrente. Você pode escrever seu código para calcular a corrente, mas esta biblioteca tem algoritmos de medição atuais precisos.
Primeiro, inclua a biblioteca do sensor atual como:
#include "ACS712.h"
Faça uma matriz para armazenar energia para enviá-la ao NodeMCU.
char watt;
Crie uma instância para usar ACS712-30Amp no PIN A0. Altere o primeiro argumento se estiver usando a variante de 20 Amp ou 5 Amp.
Sensor ACS712 (ACS712_30A, A0);
Na função de configuração , defina a taxa de transmissão de 115200 para se comunicar com o NodeMCU. Chame a função sensor.calibrate () para calibrar o sensor de corrente para obter leituras precisas.
configuração vazia () { Serial.begin (115200); sensor.calibrate (); }
Na função de loop , chamaremos sensor.getCurrentAC (); para obter o valor atual e armazenar na variável flutuante I. Após obter a corrente, calcule a potência usando a fórmula P = V * I. Usamos 230 V porque é o padrão comum em países europeus, mude para o seu local, se necessário
loop vazio () { float V = 230; float I = sensor.getCurrentAC (); flutuante P = V * I;
Essas linhas convertem a potência em Wh.
last_time = current_time; current_time = millis (); Wh = Wh + P * ((hora_atual - última_hora) / 3600000,0);
Agora, temos que converter este Wh em forma de caractere para enviá-lo ao NodeMCU, para este dtostrf (); irá converter um float em um array char para que possa ser impresso facilmente:
dtostrf (Wh, 4, 2, watt);
O formato é:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Grave esta matriz de caracteres no buffer serial usando Serial.write () ; função. Isso enviará o valor Wh para NodeMCU.
Serial.write (watt); atraso (10000); }
Código para a peça do receptor NodeMCU ESP12:
Para isso, precisamos da biblioteca AdaFruit MQTT, que pode ser baixada deste link.
Agora, abra o IDE do Arduino. Vá para exemplos -> biblioteca AdaFruit MQTT -> mqtt_esp8266
Vamos editar este código de acordo com nossas chaves AIO e credenciais de Wi-Fi e dados seriais de entrada do Arduino.
Primeiro, incluímos todas as bibliotecas para ESP12 Wi-Fi Module e AdaFruit MQTT.
#incluir
Nós definimos o SSID e a senha para o seu Wi-Fi, a partir do qual você deseja conectar seu ESp-12e.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Esta seção define o servidor AdaFruit e a porta do servidor, fixados como “io.adafruit.com” e “1883”, respectivamente.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Substitua esses campos pelo seu nome de usuário e chaves AIO que você copiou do site AdaFruit ao criar o Feed.
#define AIO_USERNAME "********" #define AIO_KEY "******************************"
Em seguida, criamos uma classe WiFiClient ESP12 para se conectar ao servidor MQTT.
Cliente WiFiClient;
Configure a classe do cliente MQTT passando o cliente WiFi e o servidor MQTT e os detalhes de login.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Configure um feed chamado 'Power' e 'bill' para publicar as alterações.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
Na função de configuração , conectamos o módulo Wi-Fi ao ponto de acesso Wi-Fi.
configuração vazia () { Serial.begin (115200); atraso (10); Serial.println (F ("Adafruit MQTT demo")); // Conecte ao ponto de acesso WiFi. Serial.println (); Serial.println (); Serial.print ("Conectando a"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); … … … }
Na função de loop , verificaremos os dados de entrada do Arduino e publicaremos esses dados no AdaFruit IO.
void loop () { // Certifique-se de que a conexão com o servidor MQTT esteja ativa (isso fará a primeira // conexão e reconectará automaticamente quando desconectado). Consulte a definição da função MQTT_connect // mais abaixo. MQTT_connect (); int i = 0; float watt1;
Esta função verifica os dados de entrada do Arduino e armazena esses dados no array watt usando a função serial.read ().
if (Serial.available ()> 0) { delay (100); // permite que todos os números seriais enviados sejam recebidos juntos enquanto (Serial.available () && i <5) { watt = Serial.read (); } watt = '\ 0'; }
A função atof () converte os caracteres em valores flutuantes e vamos armazenar esse valor flutuante em outra variável flutuante watt1.
watt1 = atof (watt);
Calcule o valor da conta multiplicando a potência (em Wh) pela tarifa de energia e divida por 1000 para obter a potência em KWh.
bill_amount = watt1 * (tarifa de energia / 1000); // 1unidade = 1kwH
Agora podemos publicar coisas!
Serial.print (F ("\ nPoder de envio val")); Serial.println (watt1); Serial.print ("…");
Esta parte do código está publicando valores de poder para o feed de energia
if (! Power.publish (watt1)) { Serial.println (F ("Falha")); } else { Serial.println (F ("OK!")); }
Isso publicará a conta de eletricidade no feed de contas .
if (! bill.publish (bill_amount)) { Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }
O valor da nossa fatura pode mudar rapidamente, mas o IFTTT leva tempo para acionar o miniaplicativo, então essas linhas darão tempo para acionar para que possamos receber e-mail de limite.
Altere o valor bill_amount sobre o qual deseja obter o e-mail. Além disso, altere a configuração do IFTTT AdaFruit IO.
if (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); atraso (5000); } bill_amount = 6; }
O código completo para Arduino e NodeMCU ESP12 é fornecido no final deste tutorial.
Agora, carregue os códigos para ambas as placas. Conecte seu hardware conforme mostrado no diagrama de circuito e abra io.adafruit.com. Abra o painel que você acabou de criar. Você verá que a conta de consumo de energia e eletricidade está sendo atualizada.
Quando sua conta chegar a INR 4 , você receberá um e-mail como este.
Aplicativo Android para monitoramento do consumo de eletricidade:
Você pode usar o aplicativo Android para monitorar os valores. Para isso, baixe o aplicativo Android MQTT Dashboard na Play store ou neste link.
Para configurar a conexão com io.adafruit.com, siga estas etapas:
Passo 1: Abra o aplicativo e clique no sinal “+”. Preencha o ID do cliente o que quiser. O servidor e a porta permanecem iguais aos mostrados na imagem. Você obterá o nome de usuário e a senha (chave ativa) no painel do AdaFruit IO, conforme mostrado abaixo.
A chave ativa é sua senha.
Etapa 2: Selecione Medidor de eletricidade e selecione Assinar. Na assinatura, forneça um nome amigável e um tópico. O formato do tópico é ' seunomedeusuario' / feeds / 'feedname' e clique em criar.
Passo 3: Da mesma forma, faça a assinatura do feed de contas.
Etapa 4: À medida que seus aparelhos consomem energia, os valores atualizados serão exibidos em Energia e Conta .
É assim que você pode criar um Medidor de Energia Elétrica Inteligente, que pode não só ser monitorado de qualquer lugar do mundo, mas também acionar e-mail quando houver alto consumo de Eletricidade.
Verifique também todos os nossos projetos de IoT.