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