Este é um projeto baseado em placa Arduino que pode medir o consumo de energia dos dispositivos. Quando conectamos este wattímetro a um dispositivo que está em operação, o LCD 16*2 exibe seu valor de consumo de energia em Watts. O projeto utiliza um Miniplaca Arduino Pro cujo recurso ADC é usado junto com o conceito da lei de Ohm e do circuito divisor de tensão para desenvolver este Wattímetro.
Figura 1: Protótipo de medidor de watts baseado em Arduino
Descrição
Todo o projeto pode ser dividido em três blocos básicos;
1) Unidade Sensora de Potência
2) Unidade de Processamento
3) Unidade de exibição
Figura 2: Diagrama de blocos do medidor de watts baseado em Arduino
A Unidade Sensora de Potência permite que a corrente flua através de um dispositivo cujo consumo de energia precisa ser medido. A Unidade Sensora produz duas tensões, uma é a saída de tensão da fonte de alimentação e outra é uma tensão que varia de 0 a 5V. A diferença entre essas duas tensões é proporcional à quantidade de corrente que flui através da unidade do sensor.
A Unidade do Processador pode aceitar duas tensões de entrada, ambas na faixa de 0 a 5V. Esta unidade considera a saída da unidade do sensor como tensões de entrada e usa o ADC para ler essas tensões. Um algoritmo é então aplicado para calcular o consumo de energia do dispositivo. A unidade então envia dados de 4 bits para a unidade de exibição para exibir o consumo de energia em Watts.
A unidade de exibição pega os dados de 4 bits da unidade do processador e produz uma exibição de 16*2 para o consumo atual do dispositivo.
1) Unidade Sensora de Potência
O Sensor de Potência neste projeto é um único resistor de baixo valor através do qual a corrente flui para o dispositivo de carga. A tensão através do resistor e do o fluxo de corrente através do resistor é medido para calcular o consumo de energia do dispositivo.
Em nosso projeto implementamos o resistor 'R' no caminho do fluxo de corrente cujo valor de resistência é conhecido. Em seguida, medimos a tensão em ambas as extremidades do resistor para calcular o fluxo de corrente com a ajuda da seguinte equação.
Eu = (V2 – V1) /R
Figura 3: Diagrama de circuito do circuito de detecção de potência
Nós temos selecionado um valor de R = 10 ohms, agora fica a equação para cálculo da potência;
Eu = V2 – V1/10
Uma vez obtido o valor da corrente 'I', a potência consumida pelo dispositivo 'P' pode ser calculada através da seguinte equação;
P = V2 * I
2) Unidade de Processamento
A unidade processadora neste projeto é a placa Arduino e utiliza o módulo ADC para ler as tensões de saída V1 e V2 da Unidade Sensor. Na placa Arduino estamos usando um ADC de 8 canais e 10 bits com o pino de tensão de referência conectado a 5 V. O ADC lê a tensão V1, V2 e gera um valor equivalente 'ValorADC'no registro ADC. A partir deste valor o algoritmocalcula as tensões V1 e V2 e depois o consumo de energia.
Uma vez obtidos os valores de V1 e V2 o valor do fluxo de corrente 'I' é calculado utilizando os valores conhecidos de R = 10 ohms, com o auxílio da equação;
Eu = (V2 – V1) / 10
O consumo de energia é então calculado usando a equação;
P = V2 * I
O código a seguir calcula a potência e a exibe no LCD.
dc_power = dc_corrente_I0 * dc_voltage_V1;
lcd.claro ;
lcd.setCursor(0, 0);
lcd.print(dc_power);
lcd.print(”mW DC”);
Unidade de exibição e explicação do código
3) Unidade de exibição
A unidade de exibição usa um LCD padrão 16*2 no qual o Arduino exibe o valor de consumo de energia. O LCD foi conectado no modo de quatro bits para reduzir o número de pinos de saída da placa Arduino a serem usados.
Figura 4: Imagem mostrando o módulo LCD usado para exibir a resistência
Descrição do código
O código lê continuamente os canais ADC A0 e A2 um após o outro, calculando cada vez os valores de V1 e V2. Quando ambos os valores de V1 e V2 são obtidos, o código calcula então o valor do consumo de energia do dispositivo e que o valor é exibido no LCD 16*2.
O código rodando no Arduino usou a função de biblioteca analogRead para obter o valor ADC e lcd.print para exibir os dados no LCD 16*2.
Figura 5: Diagrama de fluxo do código Arduino para medição de potência
Limitações:
O resistor de 10 ohms é um valor alto comparado ao resistor de precisão de 0,05 ohms dentro de um multímetro. Mais fluxo de corrente, mais queda de tensão no resistor, e essa queda de tensão é proporcional ao valor da resistência. Para valores de corrente acima de 500mA, crie uma resistência baixa conectando tantas resistências em paralelo quanto possível. Como o ADC do Arduino pode ler no máximo apenas 5V, não use uma fonte de corrente com tensão superior a 5V.
Código fonte do projeto
###
// inclui o código da biblioteca:
#incluir
// inicializa a biblioteca com os números dos pinos da interface
LCD de cristal líquido (12, 11, 5, 4, 3, 2);
int valor_adc = 0;
int voltage_peak_value = 0;
float voltage_average_value = 0;
flutuante tensão_cc_V0 = 0;
flutuante tensão_ac_V0 = 0;
flutuante dc_voltage_V1 = 0;
flutuante tensão_ac_V1 = 0;
float dc_current_I0 = 0;
float ac_current_I0 = 0;
float dc_power = 0;
float ac_power = 0;
resistência longa não assinada;
sample_count longo sem sinal = 0;
configuração nula
{
// configura o número de colunas e linhas do LCD:
lcd.begin(16, 2);
// Imprime uma mensagem no LCD.
lcd.print("EG LABS");
pinMode(13, SAÍDA);
}
loop vazio
{
// Serial.println("=============================== TENSÃO =========== =============================");
voltage_peak_value = 0;
for(contagem_amostra = 0; contagem_amostra < 5000; contagem_amostra ++)
{
adc_value = analogRead(A0);
if(tensão_pico_valor < valor_adc)
voltage_peak_value = adc_value;
outro;
atrasoMicrossegundos(10);
}
dc_voltage_V0 = voltage_peak_value * 0,00488;
tensão_ac_V0 = tensão_cc_V0 / 1,414;
// Serial.println("================================ ATUAL ========== ==============================");
voltage_peak_value = 0;
for(contagem_amostra = 0; contagem_amostra < 5000; contagem_amostra ++)
{
adc_value = analogRead(A2);
if(tensão_pico_valor < valor_adc)
voltage_peak_value = adc_value;
outro;
atrasoMicrossegundos(10);
}
dc_voltage_V1 = voltage_peak_value * 0,00488;
tensão_ac_V1 = tensão_cc_V1 / 1,414;
dc_corrente_I0 = (dc_voltage_V1 - dc_voltage_V0) * 100;
ac_current_I0 = (ac_voltage_V1 - ac_voltage_V0) * 100;
//================================ PODER ============== ===========================
dc_power = dc_corrente_I0 * dc_voltage_V1;
potência_ac = corrente_ac_I0 * voltagem_ac_V1;
lcd.claro ;
lcd.setCursor(0, 0);
lcd.print(dc_power);
lcd.print("mW");
//============================================== ================================
atraso(1000);
}
###
Diagramas de circuito
Diagrama de Circuito-Arduino-Wattímetro | ![]() |