Wattímetro Arduino: mede a tensão, a corrente e o consumo de energia

Tempo de leitura: 9 minutes

Como engenheiros eletrônicos, sempre dependemos de medidores/instrumentos para medir e analisar o funcionamento de um circuito. Começando com um simples multímetro até um complexo analisador de qualidade de energia ou DSOs, tudo tem seus próprios aplicativos exclusivos. A maioria desses medidores estão prontamente disponíveis e podem ser adquiridos com base nos parâmetros a serem medidos e sua precisão. Mas às vezes podemos acabar em uma situação em que precisamos construir nossos próprios medidores. Digamos, por exemplo, que você esteja trabalhando em um projeto de energia solar fotovoltaica e gostaria de calcular o consumo de energia de sua carga, em tais cenários, podemos construir nosso próprio wattímetro usando uma plataforma de microcontrolador simples como o Arduino.

Construir seus próprios medidores não apenas reduz o custo dos testes, mas também nos dá espaço para facilitar o processo de teste. Da mesma forma, um wattímetro construído com o Arduino pode ser facilmente ajustado para monitorar os resultados no monitor Serial e traçar um gráfico no plotter Serial ou adicionar um cartão SD para registrar automaticamente os valores de tensão, corrente e potência em intervalos pré-definidos. Parece interessante certo !? Então vamos começar…

Materiais requisitados

  • Arduino Nano
  • LM358 Op-Amp
  • 7805 regulador de tensão
  • 16*2 display LCD
  • Resistor de derivação de 0,22 ohm 2Watt
  • Pote 10k Trimmer
  • Resistores de 10k, 20k, 2,2k, 1k
  • Capacitores 0,1uF
  • Carga de teste
  • ProtoBoard ou Placa PCB Universal
  • Kit de solda (opcional)

Diagrama de circuito

O diagrama de circuito completo do projeto do wattímetro arduino é fornecido abaixo.

Para facilitar a compreensão, o circuito do wattímetro Arduino é dividido em duas unidades. A parte superior do circuito é a unidade de medição e a parte inferior do circuito é a unidade de computação e exibição. Para quem é novo neste tipo de circuitos segue os rótulos. Exemplo +5V é etiqueta, o que significa que todos os pinos aos quais a etiqueta está conectada devem ser considerados como conectados juntos. As etiquetas são normalmente usadas para fazer com que o diagrama do circuito pareça organizado.

O circuito é projetado para caber em sistemas operando entre 0-24V com uma faixa de corrente de 0-1A, tendo em mente as especificações de um Solar PV. Mas você pode facilmente estender o alcance, uma vez que entenda o funcionamento do circuito. O princípio básico por trás do circuito é medir a tensão através da carga e a corrente através dela para calcular o consumo de energia por ela. Todos os valores medidos serão exibidos em um LCD alfanumérico 16*2.

Mais abaixo, vamos dividir o circuito em pequenos segmentos para que possamos ter uma imagem clara de como o circuito deve funcionar.

Unidade de medida

A unidade de medição consiste em um divisor de potencial para nos ajudar a medir a tensão e um resistor fechado com um Op-amp não inversor é usado para nos ajudar a medir a corrente através do circuito. A parte do divisor de potencial do circuito acima é mostrada abaixo

Aqui, a tensão de entrada é representada por Vcc, como dito anteriormente, estamos projetando o circuito para uma faixa de tensão de 0V a 24V. Mas um microcontrolador como o Arduino não pode medir valores tão altos de voltagem; ele só pode medir a tensão de 0-5V. Portanto, temos que mapear (converter) a faixa de tensão de 0-24V a 0-5V. Isso pode ser feito facilmente usando um circuito divisor de potencial, conforme mostrado abaixo. O resistor 10k e 2.2k juntos formam o circuito divisor de potencial. A tensão de saída de um divisor de potencial pode ser calculada usando as fórmulas abaixo.

Vout = (Vin × R2) / (R1 + R2)

O 0-5V mapeado pode ser obtido na parte do meio, que é rotulada como Tensão. Essa tensão mapeada pode então ser alimentada para o pino Arduino Analog posteriormente.

Em seguida, temos que medir a corrente através do LOAD. Como sabemos, os microcontroladores podem ler apenas a tensão analógica, então precisamos de alguma forma converter o valor da corrente em tensão. Isso pode ser feito simplesmente adicionando um resistor (resistor shunt) no caminho que, de acordo com a lei de Ohm, cairá um valor de voltagem que é proporcional à corrente que flui através dele. O valor desta queda de tensão será muito menor, então usamos um amplificador operacional para amplificá-lo. O circuito para o mesmo é mostrado abaixo

Aqui, o valor do resistor shunt (SR1) é de 0,22 Ohms. Como dissemos anteriormente, estamos projetando o circuito para 0-1A, portanto, com base na lei de Ohms, podemos calcular a queda de tensão neste resistor, que será em torno de 0,2V quando um máximo de 1A de corrente estiver passando pela carga. Esta tensão é muito pequena para um microcontrolador ler, usamos um Op-Amp no modo de amplificador não inversor para aumentar a tensão de 0,2 V para um nível mais alto para o Arduino ler.

O Op-Amp no modo Non-Inverting é mostrado acima. O amplificador é projetado para ter um ganho de 21, de modo que 0,2 * 21 = 4,2V. As fórmulas para calcular o ganho do Op-amp são fornecidas abaixo. Você também pode usar esta calculadora de ganho online para obter o valor do seu resistor se estiver redesenhando o circuito.

Gain = Vout / Vin = 1 + (Rf / Rin)

Aqui, em nosso caso, o valor de Rf é 20k e o valor de Rin é 1k, o que nos dá um valor gian de 21. A tensão amplificada do Op-amp é então fornecida a um filtro RC com resistor 1k e um capacitor 0,1uF para filtrar qualquer ruído acoplado. Finalmente, a tensão é alimentada ao pino analógico do Arduino.

A última parte que resta na unidade de medição é a parte do regulador de tensão. Como forneceremos uma tensão de entrada variável, precisamos de + 5V volt regulado para que o Arduino e o Op-amp funcionem. Esta tensão regulada será fornecida pelo regulador de tensão 7805. Um capacitor é adicionado na saída para filtrar o ruído.

 

Unidade de computação e exibição

Na unidade de medição, projetamos o circuito para converter os parâmetros de tensão e corrente em 0-5 V que podem ser alimentados para os pinos analógicos do Arduino. Agora, nesta parte do circuito, conectaremos esses sinais de tensão ao Arduino e também faremos a interface de um display alfanumérico 16 × 2 com o Arduino para que possamos visualizar os resultados. O circuito para o mesmo é mostrado abaixo

Como você pode ver, o pino de tensão está conectado ao pino analógico A3 e o pino de corrente está conectado ao pino analógico A4. O LCD é alimentado por + 5V do 7805 e é conectado aos pinos digitais do Arduino para funcionar no modo de 4 bits. Também usamos um potenciômetro (10k) conectado ao pino Con para variar o contraste do LCD.

Programando o Arduino

Agora que temos um bom conhecimento do hardware, vamos abrir o Arduino e começar a programar. O objetivo do código é ler a tensão analógica nos pinos A3 e A4 e calcular os valores de tensão, corrente e potência e, finalmente, exibi-los na tela LCD. O programa completo para fazer o mesmo é fornecido no final da página e pode ser usado como tal para o hardware discutido acima. Além disso, o código é dividido em pequenos fragmentos e explicado.

Como todos os programas com os quais começamos, definimos os pinos que usamos. Em nosso projeto, os pinos A3 e A4 são usados ​​para medir a tensão e a corrente, respectivamente, e os pinos digitais 3,4,8,9,10 e 11 são usados ​​para fazer a interface do LCD com o Arduino

int Read_Voltage  = A3;
int Read_Current  = A4;
const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; // Mencione o número do pino para conexão LCD
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

Também incluímos um arquivo de cabeçalho denominado cristal líquido para fazer a interface do LCD com o Arduino. Em seguida, dentro da função de configuração, inicializamos o display LCD e exibimos um texto de introdução como “Wattímetro Arduino” e esperamos dois segundos antes de apagá-lo. O código para o mesmo é mostrado abaixo.

void setup() {
  lcd.begin(16, 2); // Inicializar LCD 16*2
  lcd.print(" Wattímetro Arduino"); // Linha 1 da mensagem introdutória
  lcd.setCursor(0, 1);
  lcd.print("-CapSistema"); // Linha 2 da mensagem introdutória
  delay(2000);
  lcd.clear();
}

Dentro da função de loop principal, usamos a função de leitura analógica para ler o valor da tensão do pino A3 e A4. Como sabemos, o valor de saída do Arduino ADC de 0-1203, uma vez que tem um ADC de 10 bits. Este valor deve ser convertido para 0-5 V, o que pode ser feito multiplicando por (5/1023). Então, novamente no início do hardware, mapeamos o valor real da tensão de 0-24 V a 0-5 V e o valor real da forma de corrente 0-1 A a 0-5 V. Portanto, agora temos que usar um multiplicador para reverter esses valores de volta ao valor real. Isso pode ser feito multiplicando-o por um valor multiplicador. O valor do multiplicador pode ser calculado teoricamente usando as fórmulas fornecidas na seção de hardware ou se você tiver um conjunto conhecido de valores de tensão e corrente, pode calculá-lo de forma prática. Segui a última opção porque tende a ser mais precisa em tempo real. Portanto, aqui o valor dos multiplicadores é 6,46 e 0,239. Portanto, o código se parece com abaixo

float Voltage_Value = analogRead(Read_Voltage);
float Current_Value = analogRead(Read_Current);

Voltage_Value = Voltage_Value * (5.0/1023.0) * 6.46;
Current_Value = Current_Value * (5.0/1023.0) * 0.239;

Como medir com mais precisão?

A forma acima de calcular o valor da tensão real e da corrente funcionará perfeitamente. Mas tem uma desvantagem, que é a relação entre a tensão ADC medida e a tensão real não será linear, portanto, um único multiplicador não dará resultados muito precisos, o mesmo aplicado para a corrente também.

Portanto, para melhorar a precisão, podemos traçar um conjunto de valores de ADC medidos com valores reais usando um conjunto conhecido de valores e, em seguida, usar esses dados para traçar um gráfico e derivar a equação do multiplicador usando o método de regressão linear. Você pode consultar o medidor de dB do Arduino no qual usei um método semelhante.

Finalmente, depois de calcularmos o valor da tensão real e da corrente real através da carga, podemos calcular a potência usando as fórmulas (P = V * I). Em seguida, exibimos todos os três valores no display LCD usando o código abaixo.

lcd.setCursor(0, 0);
lcd.print("V=");  
lcd.print(Voltage_Value);
lcd.print("  ");
lcd.print("I=");
lcd.print(Current_Value);

float Power_Value = Voltage_Value * Current_Value;

lcd.setCursor(0, 1);
lcd.print("Power="); 
lcd.print(Power_Value);

Trabalho e Teste

Por causa do tutorial, usei uma placa de perf para soldar todos os componentes conforme mostrado no circuito. Usei um terminal de parafuso Phoenix para conectar a carga e o conector de barril CC normal para conectar minha fonte de alimentação. A placa Arduino Nano e o LCD são montados em um Bergstik feminino para que possam ser reutilizados se necessário posteriormente.

Depois de preparar o hardware, faça upload do código do Arduino para a placa Nano. Ajuste o potenciômetro do aparador para controlar o nível de contraste do LCD até ver um texto de introdução nítido. Para testar a placa, conecte a carga ao conector do terminal de parafuso e a fonte ao conector Barrel. A tensão da fonte deve ser superior a 6 V para que este projeto funcione, já que o Arduino precisava de + 5 V para operar. SE tudo estiver funcionando bem, você deverá ver o valor da tensão na carga e a corrente nela exibida na primeira linha do LCD e a potência calculada exibida na segunda linha do LCD, conforme mostrado abaixo.

A parte divertida de construir algo está em testá-lo para verificar até que ponto vai funcionar corretamente. Para fazer isso, usei bubs indicadores automotivos de 12V como carga e o RPS como fonte. Uma vez que o próprio RPS pode medir e exibir o valor da corrente e da tensão, será fácil verificarmos a precisão e o desempenho do nosso circuito. E sim, eu também usei meu RPS para calibrar o valor do meu multiplicador para que eu chegue perto do valor preciso.

O trabalho completo pode ser encontrado no vídeo disponibilizado no final desta página. Espero que você tenha entendido o circuito e o programa e aprendido algo útil. Se você tiver qualquer problema em fazer isso funcionar, poste-o na seção de comentários abaixo ou escreva em nossos fóruns para obter mais ajuda técnica.

Este projeto Wattímetro baseado em Arduino tem muito mais atualizações que podem ser adicionadas para aumentar o desempenho do registro automático de dados, plotagem de gráfico, notificação de sobretensão ou situações de sobrecorrente, etc. Portanto, fique curioso e me diga para que você usaria isso.

 

Código

/*
 * Wattímetro usando Arduino
 * Website: www.capsistema.com.br
 * 
 * Power LCD e circuitos do pino de + 5V do Arduino que é alimentado por 7805
 * LCD RS -> pin 2
 * LCD EN -> pin 3
 * LCD D4 -> pin 8
 * LCD D5 -> pin 9
 * LCD D6 -> pin 10
 * LCD D7 -> pin 11
 * Divisor de potencial para medir a tensão -> A3
 * Saída Op-Amp para medir corrente -> A4
 */

#include <LiquidCrystal.h>  // Biblioteca LCD Arduino padrão incluída

int Read_Voltage  = A3;
int Read_Current  = A4;
const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; // Mencione o número do pino para conexão LCD
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  lcd.begin(16, 2); // Inicializar LCD 16*2

  lcd.print(" Wattímetro Arduino"); // Linha 1 da mensagem introdutória
  lcd.setCursor(0, 1);
  lcd.print(" Com Arduino  "); // Linha 2 da mensagem introdutória

  delay(2000);
  lcd.clear();
}

void loop() {
 
  float Voltage_Value = analogRead(Read_Voltage);
  float Current_Value = analogRead(Read_Current);

  Voltage_Value = Voltage_Value * (5.0/1023.0) * 6.46;
  Current_Value = Current_Value * (5.0/1023.0) * 0.239;

  lcd.setCursor(0, 0);
  lcd.print("V="); lcd.print(Voltage_Value); 
  lcd.print("  "); 
  lcd.print("I=");lcd.print(Current_Value); 

  foat Power_Value = Voltage_Value * Current_Value;

  lcd.setCursor(0, 1);
  lcd.print("Power="); lcd.print(Power_Value); 
  delay(200);
}