Ваттметр на Arduino своими руками

Ваттметр измеряет потребляемую устройством мощность, выражаемую в ваттах (Вт). Сегодня ваттметры можно купить в электротехническом магазине, а можно сделать самому, что выйдет дешевле и полезнее в плане приобретения инженерных навыков.

Благодаря широкому распространению и разносторонней поддержке платы Arduino создание ваттметра на ее основе не составит особого труда. Принцип работы и подключение в данном случае схожи с примером создания амперметра на Arduino.

Здесь также в качестве датчика выступает шунтирующий резистор, через который протекает ток. С шунта выходят два дополнительных провода, подключаемые к двум каналам АЦП платы Arduino. Разница напряжений с этих двух линий пропорциональна проходящему через резистор электрическому току. Ток можно рассчитать по формуле I = (V2 – V1) / R. Поскольку мощность представляет собой произведение напряжения и тока, то P = V2 * I. Таким образом, благодаря простой формуле можно из амперметра сделать ваттметр и измерять потребляемую мощность.

Схема подключения и код (скетч для Arduino) представлены ниже.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/542-vattmetr-na-arduino-svoimi-rukami/images/vattmetr-na-arduino-1.jpg
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


int adc_value = 0;

int voltage_peak_value = 0;

float voltage_average_value = 0;

float dc_voltage_V0 = 0;

float ac_voltage_V0 = 0;

float dc_voltage_V1 = 0;

float ac_voltage_V1 = 0;

float dc_current_I0 = 0;

float ac_current_I0 = 0;

float dc_power = 0;

float ac_power = 0;

unsigned long resistance;

unsigned long sample_count = 0;



void setup()

{

  lcd.begin(16, 2);

  lcd.print("    Wattmeter    ");

  pinMode(13, OUTPUT);

}



void loop()

{



//=============================== НАПРЯЖЕНИЕ ========================================



  voltage_peak_value = 0;

  for(sample_count = 0; sample_count < 5000; sample_count ++)

  {

      adc_value = analogRead(A0);

      if(voltage_peak_value < adc_value)

          voltage_peak_value = adc_value;

      else;

      delayMicroseconds(10);

  }



  dc_voltage_V0 = voltage_peak_value * 0.00488;

  ac_voltage_V0 = dc_voltage_V0 / 1.414;





//================================ ТОК ========================================



  voltage_peak_value = 0;

  for(sample_count = 0; sample_count < 5000; sample_count ++)

  {

      adc_value = analogRead(A2);

      if(voltage_peak_value < adc_value)

          voltage_peak_value = adc_value;

      else;

      delayMicroseconds(10);

  }



  dc_voltage_V1 = voltage_peak_value * 0.00488;

  ac_voltage_V1 = dc_voltage_V1 / 1.414;



  dc_current_I0 = (dc_voltage_V1 - dc_voltage_V0) * 100;

  ac_current_I0 = (ac_voltage_V1 - ac_voltage_V0) * 100;



  //================================= МОЩНОСТЬ =========================================



  dc_power = dc_current_I0 * dc_voltage_V1;

  ac_power = ac_current_I0 * ac_voltage_V1;



  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print(dc_power);

  lcd.print(" mW");


 //=================================================================================

  delay(1000);

}