Compare commits
No commits in common. "00d0bc634f770461b4c85716f654b9aa8ec5d152" and "5b329e79baba6ed89ef2dc2a8a3573444757a127" have entirely different histories.
00d0bc634f
...
5b329e79ba
|
@ -1,53 +0,0 @@
|
||||||
#include "espmega_iot_emon.hpp"
|
|
||||||
|
|
||||||
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->fram_address = fram_address;
|
|
||||||
this->adc_to_watts = adc_to_watts;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ESPMega_CT::begin()
|
|
||||||
{
|
|
||||||
this->last_conversion_timestamp = millis();
|
|
||||||
ESPMega_FRAM.read(fram_address, (uint8_t *)&this->energy, 16);
|
|
||||||
this->power = adc_to_watts(ESPMega_analogRead(this->analog_pin));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ESPMega_CT::loop()
|
|
||||||
{
|
|
||||||
this->energy += (millis() - this->last_conversion_timestamp) / 3600000 * this->power;
|
|
||||||
this->power = adc_to_watts(ESPMega_analogRead(this->analog_pin));
|
|
||||||
this->last_conversion_timestamp = millis();
|
|
||||||
ESPMega_FRAM.write(fram_address, (uint8_t *)&this->energy, 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ESPMega_CT::reset_energy()
|
|
||||||
{
|
|
||||||
this->energy = 0;
|
|
||||||
ESPMega_FRAM.write16(fram_address, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
long double ESPMega_CT::get_energy()
|
|
||||||
{
|
|
||||||
return this->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;
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
#pragma once
|
|
||||||
#include <ESPMegaPRO.h>
|
|
||||||
class ESPMega_CT {
|
|
||||||
public:
|
|
||||||
ESPMega_CT(uint8_t analog_pin,float(*adc_to_watts)(uint16_t adc_value), uint32_t fram_address);
|
|
||||||
void begin();
|
|
||||||
void loop();
|
|
||||||
float get_power();
|
|
||||||
long double get_energy();
|
|
||||||
void reset_energy();
|
|
||||||
private:
|
|
||||||
uint8_t analog_pin;
|
|
||||||
uint32_t fram_address;
|
|
||||||
unsigned long last_conversion_timestamp;
|
|
||||||
float power;
|
|
||||||
long double energy;
|
|
||||||
float (*adc_to_watts)(uint16_t adc_value);
|
|
||||||
float adc_to_watts_builtin(uint16_t adc_value);
|
|
||||||
};
|
|
Loading…
Reference in New Issue