JXCT Soil Sensor 7-in-1 3.10.1
IoT система мониторинга почвы на базе ESP32
Загрузка...
Поиск...
Не найдено
sensor_compensation_service.h
См. документацию.
1
7#ifndef SENSOR_COMPENSATION_SERVICE_H
8#define SENSOR_COMPENSATION_SERVICE_H
9
10#include <Arduino.h>
11#include <map>
12#include "../../include/business/ISensorCompensationService.h"
13#include "../../include/sensor_types.h"
14#include "../../include/validation_utils.h"
15
16<<<<<<< HEAD
17// ===================== КОНСТАНТЫ ДЛЯ КОМПЕНСАЦИИ =====================
18constexpr float UNIVERSAL_GAS_CONSTANT = 8.314F;
19constexpr float FARADAY_CONSTANT = 96485.0F;
20constexpr float STANDARD_TEMP_K = 298.15F;
21constexpr float DEFAULT_POROSITY = 0.45F;
22constexpr float DEFAULT_CEMENTATION = 1.5F;
23constexpr float DEFAULT_SATURATION = 2.0F;
24constexpr float DEFAULT_EPSILON_N = 0.01F;
25constexpr float DEFAULT_EPSILON_P = 0.008F;
26constexpr float DEFAULT_EPSILON_K = 0.012F;
27constexpr float DEFAULT_DELTA_N = 0.0041F;
28constexpr float DEFAULT_DELTA_P = 0.0053F;
29constexpr float DEFAULT_DELTA_K = 0.0032F;
30constexpr float NPK_SAND_EPSILON_N = 0.011F;
31constexpr float NPK_SAND_EPSILON_P = 0.009F;
32constexpr float NPK_SAND_EPSILON_K = 0.013F;
33constexpr float NPK_LOAM_DELTA_N = 0.0039F;
34constexpr float NPK_LOAM_DELTA_P = 0.0050F;
35constexpr float NPK_LOAM_DELTA_K = 0.0030F;
36constexpr float NPK_LOAM_EPSILON_N = 0.010F;
37constexpr float NPK_LOAM_EPSILON_P = 0.008F;
38constexpr float NPK_LOAM_EPSILON_K = 0.012F;
39constexpr float NPK_CLAY_DELTA_N = 0.0033F;
40constexpr float NPK_CLAY_DELTA_P = 0.0043F;
41constexpr float NPK_CLAY_DELTA_K = 0.0025F;
42constexpr float NPK_CLAY_EPSILON_N = 0.009F;
43constexpr float NPK_CLAY_EPSILON_P = 0.007F;
44constexpr float NPK_CLAY_EPSILON_K = 0.011F;
45constexpr float NPK_PEAT_DELTA_N = 0.0029F;
46constexpr float NPK_PEAT_DELTA_P = 0.0036F;
47constexpr float NPK_PEAT_DELTA_K = 0.0019F;
48constexpr float NPK_PEAT_EPSILON_N = 0.013F;
49constexpr float NPK_PEAT_EPSILON_P = 0.010F;
50constexpr float NPK_PEAT_EPSILON_K = 0.016F;
51constexpr float NPK_SANDPEAT_DELTA_N = 0.0041F;
52constexpr float NPK_SANDPEAT_DELTA_P = 0.0052F;
53constexpr float NPK_SANDPEAT_DELTA_K = 0.0032F;
54constexpr float NPK_SANDPEAT_EPSILON_N = 0.011F;
55constexpr float NPK_SANDPEAT_EPSILON_P = 0.009F;
56constexpr float NPK_SANDPEAT_EPSILON_K = 0.013F;
57// ===================== КОНСТАНТЫ ДЛЯ КОМПЕНСАЦИИ =====================
58
64struct ArchieCoefficients
65{
66 float m; // Коэффициент цементации
67 float n; // Коэффициент насыщенности
68 float a; // Коэффициент пористости
69
70 ArchieCoefficients() : m(DEFAULT_CEMENTATION), n(DEFAULT_SATURATION), a(DEFAULT_POROSITY) {}
71 ArchieCoefficients(float cementation, float saturation, float porosity) : m(cementation), n(saturation), a(porosity)
72 {
73 }
74};
75=======
76
77>>>>>>> develop
78
85{
86 float porosity; // Пористость
87 float bulkDensity; // Объемная плотность
88 float fieldCapacity; // Полевая влагоемкость
89
90 SoilParameters() : porosity(DEFAULT_POROSITY), bulkDensity(1.40F), fieldCapacity(0.20F) {}
91 SoilParameters(float por, float density, float capacity)
92 : porosity(por), bulkDensity(density), fieldCapacity(capacity)
93 {
94 }
95};
96
104{
105 float delta_N, delta_P, delta_K; // Температурные коэффициенты
106 float epsilon_N, epsilon_P, epsilon_K; // Влажностные коэффициенты
107
109 : delta_N(DEFAULT_DELTA_N), delta_P(DEFAULT_DELTA_P), delta_K(DEFAULT_DELTA_K), epsilon_N(DEFAULT_EPSILON_N), epsilon_P(DEFAULT_EPSILON_P), epsilon_K(DEFAULT_EPSILON_K)
110 {
111 }
112 NPKCoefficients(float dN, float dP, float dK, float eN, float eP, float eK)
113 : delta_N(dN), delta_P(dP), delta_K(dK), epsilon_N(eN), epsilon_P(eP), epsilon_K(eK)
114 {
115 }
116};
117
127{
128 private:
129 // Параметры почвы для разных типов
130 std::map<SoilType, SoilParameters> soilParameters;
131
132 // Коэффициенты NPK для разных типов почвы
133 std::map<SoilType, NPKCoefficients> npkCoefficients;
134
135 // Константы для расчетов
136 static constexpr float R = UNIVERSAL_GAS_CONSTANT; // Универсальная газовая постоянная (Дж/(моль·К))
137 static constexpr float F = FARADAY_CONSTANT; // Постоянная Фарадея (Кл/моль)
138 static constexpr float T0 = STANDARD_TEMP_K; // Стандартная температура (25°C в Кельвинах)
139
140 // Инициализация коэффициентов типов почвы
141 void initializeSoilTypeCoefficients();
142
143 // Инициализация параметров почвы
144 void initializeSoilParameters();
145
146 // Инициализация коэффициентов NPK
147 void initializeNPKCoefficients();
148
149 // Расчет температуры в Кельвинах
150 static float temperatureToKelvin(float celsius);
151
152 // УДАЛЕНО: Старые функции заменены на научные формулы модели Арчи
153 // static float calculateECTemperatureFactor(float temperature); - УДАЛЕНО
154 // float calculateECHumidityFactor(float humidity, SoilType soilType) const; - УДАЛЕНО
155
156 public:
163
167 virtual ~SensorCompensationService() = default;
168
175 void applyCompensation(SensorData& data, SoilType soilType) override;
176
186 float correctEC(float ec25, SoilType soilType, float temperature) override;
187
195 float correctPH(float temperature, float phRaw) override;
196
205 void correctNPK(float temperature, float humidity, SoilType soilType, NPKReferences& npk) override;
206
213 float getPorosity(SoilType soilType) const override;
214
223 bool validateCompensationInputs(SoilType soilType, float humidity, float temperature) const override;
224
232
233
234
242};
243
244#endif // SENSOR_COMPENSATION_SERVICE_H
Интерфейс для сервиса компенсации датчиков
Definition ISensorCompensationService.h:21
Сервис компенсации датчиков
Definition sensor_compensation_service.h:127
SensorCompensationService()
Конструктор
Definition sensor_compensation_service.cpp:21
bool validateCompensationInputs(SoilType soilType, float humidity, float temperature) const override
Проверяет валидность входных данных для компенсации
Definition sensor_compensation_service.cpp:168
float correctEC(float ec25, SoilType soilType, float temperature) override
Компенсирует EC по модели Арчи
Definition sensor_compensation_service.cpp:46
void applyCompensation(SensorData &data, SoilType soilType) override
Применяет компенсацию к данным датчика
Definition sensor_compensation_service.cpp:28
SoilParameters getSoilParameters(SoilType soilType) const
Получает параметры почвы для типа
Definition sensor_compensation_service.cpp:295
virtual ~SensorCompensationService()=default
Деструктор
float getPorosity(SoilType soilType) const override
Получает пористость для типа почвы
Definition sensor_compensation_service.cpp:158
float correctPH(float temperature, float phRaw) override
Компенсирует pH по уравнению Нернста
Definition sensor_compensation_service.cpp:89
NPKCoefficients getNPKCoefficients(SoilType soilType) const
Получает коэффициенты NPK для типа почвы
Definition sensor_compensation_service.cpp:307
void correctNPK(float temperature, float humidity, SoilType soilType, NPKReferences &npk) override
Компенсирует NPK по алгоритму Delgado et al. (2020)
Definition sensor_compensation_service.cpp:113
Definition fake_sensor.cpp:26
SoilType
Типы почвы
Definition sensor_types.h:16
Коэффициенты NPK для разных типов почвы
Definition sensor_compensation_service.h:104
NPKCoefficients(float dN, float dP, float dK, float eN, float eP, float eK)
Definition sensor_compensation_service.h:112
float epsilon_K
Definition sensor_compensation_service.h:106
float delta_P
Definition sensor_compensation_service.h:105
NPKCoefficients()
Definition sensor_compensation_service.h:108
float epsilon_P
Definition sensor_compensation_service.h:106
float epsilon_N
Definition sensor_compensation_service.h:106
float delta_K
Definition sensor_compensation_service.h:105
float delta_N
Definition sensor_compensation_service.h:105
NPK значения
Definition sensor_types.h:101
Данные датчика
Definition sensor_types.h:77
Параметры почвы
Definition sensor_compensation_service.h:85
SoilParameters(float por, float density, float capacity)
Definition sensor_compensation_service.h:91
float bulkDensity
Definition sensor_compensation_service.h:87
float fieldCapacity
Definition sensor_compensation_service.h:88
SoilParameters()
Definition sensor_compensation_service.h:90
float porosity
Definition sensor_compensation_service.h:86