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:
– Sensor de Corrente não Invasivo 100A SCT013
– Display LCD 16×2 BackLight Azul
– 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
Deixe uma resposta