From 10b55e5aa575154f9946e2e0805b444aba36c21f Mon Sep 17 00:00:00 2001 From: Siwat Sirichai Date: Fri, 13 Oct 2023 23:10:41 +0700 Subject: [PATCH] build in adc reference table --- src/espmega_iot_emon.cpp | 16 +++++++++++++++- src/espmega_iot_emon.hpp | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/espmega_iot_emon.cpp b/src/espmega_iot_emon.cpp index 2cb6054..863de9f 100644 --- a/src/espmega_iot_emon.cpp +++ b/src/espmega_iot_emon.cpp @@ -3,8 +3,8 @@ ESPMega_CT::ESPMega_CT(uint8_t analog_pin, float (*adc_to_watts)(uint16_t adc_value), uint32_t fram_address) { this->analog_pin = analog_pin; - this->adc_to_watts = adc_to_watts; this->fram_address = fram_address; + this->adc_to_watts = adc_to_watts; } void ESPMega_CT::begin() @@ -36,4 +36,18 @@ long double ESPMega_CT::get_energy() float ESPMega_CT::get_power() { return this->power; +} + +float ESPMega_CT::adc_to_watts_builtin(uint16_t adc_value) +{ + const float RATIO = 0.1; + const float BURDEN_RESISTANCE = 20; + const float VOLTAGE = 220; + const uint16_t ADC_RANGE_START = 500; + const uint16_t ADC_RANGE_END = 16000; + const float ADC_RANGE = 12; + float burden_voltage = (adc_value - ADC_RANGE_START) / (ADC_RANGE_END - ADC_RANGE_START) * ADC_RANGE; + float secondary_current = burden_voltage / BURDEN_RESISTANCE; + float primary_current = secondary_current / RATIO; + return primary_current * VOLTAGE; } \ No newline at end of file diff --git a/src/espmega_iot_emon.hpp b/src/espmega_iot_emon.hpp index e4993b8..818ce36 100644 --- a/src/espmega_iot_emon.hpp +++ b/src/espmega_iot_emon.hpp @@ -15,4 +15,5 @@ class ESPMega_CT { float power; long double energy; float (*adc_to_watts)(uint16_t adc_value); + float adc_to_watts_builtin(uint16_t adc_value); }; \ No newline at end of file