Merge branch 'main' into cud
This commit is contained in:
		
						commit
						00d0bc634f
					
				
					 2 changed files with 72 additions and 0 deletions
				
			
		
							
								
								
									
										53
									
								
								src/espmega_iot_emon.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/espmega_iot_emon.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
#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;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								src/espmega_iot_emon.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/espmega_iot_emon.hpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
#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…
	
	Add table
		Add a link
		
	
		Reference in a new issue