Sistema Monitor de Cargas Elétricas com Arduino

O Consumo de energia elétrica seja residencial ou industrial é um ponto de suma relevância no orçamento financeiro seja familiar ou de uma companhia corporativa.Este projeto tem o intuito de desenvolver um monitor de cargas elétricas (corrente e potência consumida instantaneamente em uma carga). Utilizaremos para este, o sensor de corrente SCT013.

Montando o projeto

Será necessária uma placa Arduino Uno, onde ela será responsável por receber os sinais do Sensor de Corrente não Invasivo 100A SCT013.

O Sensor de Corrente SCT 013 entrega na saída sinais de corrente, portanto é necessário um circuito auxiliar para enviar os dados para o microcontrolador.

O Circuito pode ser observado pela figura abaixo:

A determinação do resistor é definido através da formula:

Resistor = (V Alimentação * N Voltas Secundário) / (2√¯2 * Corrente máx Primario)

Tensão de Alimentação = 5V

N Voltas Secundário = 2000

Corrente Máxima no Primário = 100A

Portanto o resistor ideal encontrado tem o valor de 35,4 ohms, mas para este projeto utilizaremos 33 ohms por ser comercial.

 

Componentes Utilizados:

Arduino Uno

Sensor de Corrente não Invasivo 100A SCT013

Display LCD 16×2 BackLight Azul

4x Resistor 10k ohm

Resistor 33 ohm

– Capacitor Eletrolítico 10uF

–  2x Push Button
 


 


 


 


 


 


 

 
 
 
 
 

A montagem do protótipo pode ser observada pela figura abaixo:

 

 

Inicialmente vamos ligar o display LCD aos pinos do Arduino conforme imagem acima, os pinos digitais de 2 ao 7 são de controle do LCD (demonstrados com fios de cor amarela), Alimentação 5V e GND são ligados em comum ao Arduino. O display também necessita de um potenciômetro de 10k para ajuste de contraste conforme acima.

Na sequência, montamos o sensor de corrente conforme demonstrado anteriormente, ligando sua saída a entrada analógica A0 do Arduino UNO.

Os dois Buttons serão ligados com resistores PULL DOWN de 10k e assim conectados sucessivamente aos pinos 10 e 11 do Arduino (Entradas Digitais).

 

Abaixo vemos na prática o protótipo montado:

O vídeo demonstrando o funcionamento desse projeto pode ser acessado pela página no Instagram:

Laboratório dos Fundos

https://www.instagram.com/laboratorio_dosfundos/

Desenvolvendo o código

Após montagem do hardware, prosseguimos para o código onde receberá os sinais do sensor de corrente.

O Código como pode ser observado abaixo, será carregado para o microcontrolador ATMEGA328 do Arduino UNO:


#include <LiquidCrystal.h> //Biblioteca para o display LCD
#include "EmonLib.h" //Biblioteca para o sensor de corrente
#include <SPI.h> //Biblioteca SPI
EnergyMonitor emon1; //cria objeto para sensor de corrente
#define botao 10 // define o pino 10 com o nome botao
#define botaoB 11 // define o pino 11 com o nome botaoB
#define pin_sct A0 //sensor de corrente
#define menu 8 // define o pino 8 com o nome menu
#define tempoMaximoDeUmToque 200 // define o tempo maximo de um toque no botao de 200 milisegundos
int rede; // cria uma variavel int de nome rede
int contaToques = 0; //cria a variavel contaToques int
long tempoEspera = 0; //cria a variavel tempoEspera long

LiquidCrystal lcd(7,6,5,4,3,2); // pinos para a comunicaçao do lcd

void setup()
{
pinMode(botao , INPUT); // define o pino botao como entrada digital
pinMode(botaoB , INPUT); // define o pino botaoB como entrada digital
pinMode(pin_sct, INPUT); //entrada para sensor de corrente
pinMode(menu, INPUT); // define o pino menu como entrada digital
lcd.begin(16,2); //Inicializa LCD 16 x 2
emon1.current(pin_sct, 60); //Pino, calibracao - Cur Const= Ratio/BurdenR. 2000/33 = 60

// apresentacao inicial no display
lcd.setCursor(5,0); lcd.print("Energy ");
lcd.setCursor(0,1); lcd.print(">"); delay(125); lcd.setCursor(1,1); lcd.print(">"); delay(125);
lcd.setCursor(2,1); lcd.print(">"); delay(125); lcd.setCursor(3,1); lcd.print(">"); delay(125);
lcd.setCursor(4,1); lcd.print(">"); delay(125); lcd.setCursor(5,1); lcd.print(">"); delay(125);
lcd.setCursor(6,1); lcd.print(">"); delay(125); lcd.setCursor(7,1); lcd.print(">"); delay(125);
lcd.setCursor(8,1); lcd.print(">"); delay(125); lcd.setCursor(9,1); lcd.print(">"); delay(125);
lcd.setCursor(10,1); lcd.print(">"); delay(125); lcd.setCursor(11,1); lcd.print(">"); delay(125);
lcd.setCursor(12,1); lcd.print(">"); delay(125); lcd.setCursor(13,1); lcd.print(">"); delay(125);
lcd.setCursor(14,1); lcd.print(">"); delay(125); lcd.setCursor(15,1); lcd.print(">"); delay(125);lcd.clear();
lcd.setCursor(1,0); lcd.print("Voltage Select");
lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(1,1); lcd.print("127V"); lcd.setCursor(5,1); lcd.print(" "); delay(700);
lcd.setCursor(6,1); lcd.print("220V"); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(10,1); lcd.print(" "); delay(700);
lcd.setCursor(11,1); lcd.print("380V"); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(15,1); lcd.print(" "); delay(700);
lcd.setCursor(0,1); lcd.print(" ");
// apresentacao inicial no display
}
void loop(){

//MENU************************************************
int botao_menu = digitalRead(botao); // variavel de nome botao_menu que armazena dados digitais da leitura do botao
int botaoB_menu = digitalRead(botaoB); // variavel de nome botaoB_menu que armazena dados digitais da leitura do botao B

if (botao_menu == HIGH) { //detectou toque no botao, executa o codigo abaixo

//espera um tempo para nao detectar o mesmo toque no botao mais de uma vez
if (tempoEspera == 0) {
tempoEspera = millis();
contaToques++;}
else if ((millis() - tempoEspera) >= tempoMaximoDeUmToque) {
tempoEspera = 0;}
}

if (contaToques == 0 ){ // se nao houver toques no botao apresenta a tensao de 127V
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(1,1); lcd.print("127V");
lcd.setCursor(5,1); lcd.print(" ");
if(botaoB_menu == HIGH){ // se durante 127V pressionar o botao B, seleciona 127V
digitalWrite(menu,HIGH);
rede = 127;
lcd.clear();
}
}
if (contaToques == 1 ){ // se houver 1 toque no botao apresenta a tensao de 220V
lcd.setCursor(6,1); lcd.print("220V");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(10,1); lcd.print(" ");
if(botaoB_menu == HIGH){ // se durante 220V pressionar o botao B, seleciona 220V
digitalWrite(menu,HIGH);
rede = 220;
lcd.clear();
}
}
if (contaToques == 2 ){ // se houverem 2 toque no botao apresenta a tensao de 380V
lcd.setCursor(11,1); lcd.print("380V");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(15,1); lcd.print(" ");
if(botaoB_menu == HIGH){ // se durante 380V pressionar o botao B, seleciona 380V
digitalWrite(menu,HIGH);
rede = 380;
lcd.clear();
}
}
if (contaToques == 3 ){ // se houverem 3 toque no botao, zera o contador (inicia novamente) e limpa o display
contaToques = 0;
lcd.setCursor(0,1); lcd.print(" ");
}

//FIM MENU************************************************

int menu_select = digitalRead(menu);
while(menu_select == HIGH){ // após selecionar a tensao desejada, o programa roda dentro do laço while
int menu_select = digitalRead(menu);

//Calculo da corrente
double Irms = emon1.calcIrms(1480);
double corrente = Irms;
if(corrente < 0.15){
corrente = Irms*0;
lcd.setCursor(13,1); lcd.print(" ");
lcd.setCursor(13,0); lcd.print(" ");}
//Calculo da potencia
float potencia = corrente*rede;

lcd.setCursor(0,0); lcd.print("Energy "); //imprime valores de tensão, corrente e potencia
lcd.setCursor(3,1); lcd.print("V");
lcd.setCursor(7,0); lcd.print("I=");
lcd.setCursor(7,1); lcd.print("P=");
lcd.setCursor(14,1); lcd.print("VA");
lcd.setCursor(14,0); lcd.print("A");
lcd.setCursor(9,0); lcd.print(corrente);
lcd.setCursor(9,1); lcd.print(potencia);
lcd.setCursor(0,1); lcd.print(rede);
delay(10);
}

}

Você pode consultar, baixar, modificar e compartilhar o código deste tutorial em nosso repositório do GitHub! E lá você encontra todos os códigos já publicados aqui no blog! Venha compartilhar conhecimento com toda a comunidade maker!

 

Mergulhando no projeto

Software

Inicialmente iremos incluir a biblioteca LCD <LiquidCrystal.h>.

A biblioteca “EmonLib.h” será necessária para utilização do sensor de corrente SCT013, ela está disponível para download na nossa página do GitHub (https://github.com/omegacomponenteseletronicos).

O mapeamento dos pinos utilizados no display LCD é definido em:

LiquidCrystal lcd (7, 6, 5, 4, 3, 2).

 

Função Setup

Na função Setup definimos as seguintes portas como entradas:


pinMode(botao  , INPUT);

pinMode(botaoB  , INPUT);

pinMode(pin_sct, INPUT);

pinMode(menu, INPUT);

Em lcd.begin(16,2); é iniciada a comunicação com o display LCD.

emon1.current(pin_sct, 60); é uma opção para calibração do sensor de corrente.

Após essas definições o programa segue uma série de comandos para o display que apresenta um layout de inicialização ao ligar.

lcd.setCursor(5,0); lcd.print(“Energy “);

Uma barra de Loading é preenchida como mostrado acima.

Função Loop

 

Temos botao e botaoB para comandos do menu inicial do programa onde se seleciona a tensão desejada ( 127V ,220V ou 380V).


int botao_menu = digitalRead(botao); </strong>

int botaoB_menu = digitalRead(botaoB);</strong>

A cada vez que botao é pressionado, esse dado é armazenado na variável botao_menu e no display acontece uma alternância de apresentações dos valores

(127V ,220V ou 380V).

Essa variação acontece até que o botaoB seja pressionado selecionando uma tensão.

Assim que definida a tensão desejada, uma segunda tela é apresentada onde já acontece a monitoração dos valores lidos pelo sensor de corrente SCT 013.


lcd.setCursor(9,0); lcd.print(corrente);</strong>

lcd.setCursor(9,1); lcd.print(potencia);</strong>

lcd.setCursor(0,1); lcd.print(rede);</strong>

Hardware

Sensor de Corrente não Invasivo 100A SCT013

Sensor de corrente não invasivo de 100A, os sinais na saída no secundário variam de

0 a 50mA.

Pinagem:

CABO VERMELHO: Sinal de saída de referência positiva

CABO BRANCO: Sinal de saída de referência negativa

Display LCD 16×2 BackLight Azul

O Display LCD 16×2 possibilita e interação do programa com o usuário.

As mensagens podem ser enviadas simultaneamente com o processamento no programa possibilitando assim o envio de dados, texto e sinais lidos nas entradas do microprocessador.

O LCD possui 16 colunas e 2 linhas com luz de fundo azul e escrita branca.

Pinagem:

Conclusão

Com o desenvolvimento deste projeto podemos medir em tempo real o consumo de uma carga elétrica, sua corrente e a potência instantânea.

Diversas aplicações podem ser implementadas, por exemplo, um acionamento de comando digital a certos níveis de correntes lidos.

Deixem suas sugestões e perguntas, compartilhe conhecimento!

Referências

Data Sheet SCT 013

https://www.mcielectronics.cl/website_MCI/static/documents/Datasheet_SCT013.pdf

Avatar
Sobre Pedro Pereira 8 artigos
Engenheiro Eletricista, Técnico em Eletrônica e Entusiasta na área de Sistemas Embarcados. https://www.instagram.com/laboratorio_dosfundos/

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*