added pump specific power level (requires controller that supports this or dc motor)
This commit is contained in:
parent
dba39869d1
commit
2c8645121e
@ -98,7 +98,7 @@
|
|||||||
#define BATTSENSOR_INDEX_BATTERY 1
|
#define BATTSENSOR_INDEX_BATTERY 1
|
||||||
|
|
||||||
#define MQTT_TIMEOUT (1000 * 60) /**< After 10 seconds, MQTT is expected to be connected */
|
#define MQTT_TIMEOUT (1000 * 60) /**< After 10 seconds, MQTT is expected to be connected */
|
||||||
#define ESP_STALE_TIMEOUT (MQTT_TIMEOUT+(120*1000))
|
#define ESP_STALE_TIMEOUT (MQTT_TIMEOUT+(700*1000))
|
||||||
|
|
||||||
#define MAX_PLANTS 7
|
#define MAX_PLANTS 7
|
||||||
#define SOLAR_CHARGE_MIN_VOLTAGE 7 /**< Sun is rising (morning detected) */
|
#define SOLAR_CHARGE_MIN_VOLTAGE 7 /**< Sun is rising (morning detected) */
|
||||||
|
@ -106,7 +106,8 @@ HomieSetting<const char *> ntpServer("ntpServer", "NTP server (pool.ntp.org as d
|
|||||||
HomieSetting<bool> mPumpOnlyWhenLowLight##plant = HomieSetting<bool>("lowLight" strplant, "Plant" strplant " - Enable the Pump only, when there is no sunlight"); \
|
HomieSetting<bool> mPumpOnlyWhenLowLight##plant = HomieSetting<bool>("lowLight" strplant, "Plant" strplant " - Enable the Pump only, when there is no sunlight"); \
|
||||||
HomieSetting<long> mPumpCooldownInMinutes##plant = HomieSetting<long>("delay" strplant, "Plant" strplant " - How long to wait until the pump is activated again (minutes)"); \
|
HomieSetting<long> mPumpCooldownInMinutes##plant = HomieSetting<long>("delay" strplant, "Plant" strplant " - How long to wait until the pump is activated again (minutes)"); \
|
||||||
HomieSetting<long> pPumpDuration##plant = HomieSetting<long>("pumpDuration" strplant, "Plant" strplant " - time seconds or ml (if using flowmeter) to water when pump is active"); \
|
HomieSetting<long> pPumpDuration##plant = HomieSetting<long>("pumpDuration" strplant, "Plant" strplant " - time seconds or ml (if using flowmeter) to water when pump is active"); \
|
||||||
PlantSettings_t mSetting##plant = {&mSensorDry##plant, &mPumpAllowedHourRangeStart##plant, &mPumpAllowedHourRangeEnd##plant, &mPumpOnlyWhenLowLight##plant, &mPumpCooldownInMinutes##plant, &pPumpDuration##plant}; \
|
HomieSetting<long> pPowerLevel##plant = HomieSetting<long>("powerLevel" strplant, "Plant" strplant " - pwm duty cycle in percent"); \
|
||||||
|
PlantSettings_t mSetting##plant = {&mSensorDry##plant, &mPumpAllowedHourRangeStart##plant, &mPumpAllowedHourRangeEnd##plant, &mPumpOnlyWhenLowLight##plant, &mPumpCooldownInMinutes##plant, &pPumpDuration##plant, &pPowerLevel##plant}; \
|
||||||
/**< Generate all settings for one plant \
|
/**< Generate all settings for one plant \
|
||||||
* \
|
* \
|
||||||
* Feature to start pumping only at morning: @link{SOLAR_CHARGE_MIN_VOLTAGE} and @link{SOLAR_CHARGE_MAX_VOLTAGE} \
|
* Feature to start pumping only at morning: @link{SOLAR_CHARGE_MIN_VOLTAGE} and @link{SOLAR_CHARGE_MAX_VOLTAGE} \
|
||||||
|
@ -28,6 +28,7 @@ typedef struct PlantSettings_t
|
|||||||
HomieSetting<bool> *pPumpOnlyWhenLowLight;
|
HomieSetting<bool> *pPumpOnlyWhenLowLight;
|
||||||
HomieSetting<long> *pPumpCooldownInMinutes;
|
HomieSetting<long> *pPumpCooldownInMinutes;
|
||||||
HomieSetting<long> *pPumpDuration;
|
HomieSetting<long> *pPumpDuration;
|
||||||
|
HomieSetting<long> *pPumpPowerLevel;
|
||||||
} PlantSettings_t;
|
} PlantSettings_t;
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -19,6 +19,8 @@
|
|||||||
#include "MathUtils.h"
|
#include "MathUtils.h"
|
||||||
|
|
||||||
#define MOISTURE_MEASUREMENT_DURATION 400 /** ms */
|
#define MOISTURE_MEASUREMENT_DURATION 400 /** ms */
|
||||||
|
#define PWM_FREQ 50000
|
||||||
|
#define PWM_BITS 8
|
||||||
|
|
||||||
|
|
||||||
class Plant
|
class Plant
|
||||||
|
@ -55,12 +55,19 @@ void Plant::init(void)
|
|||||||
this->mSetting->pPumpDuration->setValidator([](long candidate) {
|
this->mSetting->pPumpDuration->setValidator([](long candidate) {
|
||||||
return ((candidate >= 0) && (candidate <= 1000));
|
return ((candidate >= 0) && (candidate <= 1000));
|
||||||
});
|
});
|
||||||
|
this->mSetting->pPumpPowerLevel->setDefaultValue(100);
|
||||||
|
this->mSetting->pPumpPowerLevel->setValidator([](long candidate) {
|
||||||
|
return ((candidate >= 0) && (candidate <= 100));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
/* Initialize Hardware */
|
/* Initialize Hardware */
|
||||||
Serial.println("Set GPIO mode " + String(mPinPump) + "=" + String(OUTPUT));
|
Serial.println("Init PWM controller for pump " + String(mPinPump) + "=" + String(OUTPUT));
|
||||||
Serial.flush();
|
Serial.flush();
|
||||||
pinMode(this->mPinPump, OUTPUT);
|
ledcSetup(this->mPlantId, PWM_FREQ, PWM_BITS);
|
||||||
|
ledcAttachPin(mPinPump, this->mPlantId);
|
||||||
|
ledcWrite(this->mPlantId, 0);
|
||||||
|
|
||||||
Serial.println("Set GPIO mode " + String(mPinSensor) + "=" + String(ANALOG));
|
Serial.println("Set GPIO mode " + String(mPinSensor) + "=" + String(ANALOG));
|
||||||
Serial.flush();
|
Serial.flush();
|
||||||
pinMode(this->mPinSensor, INPUT);
|
pinMode(this->mPinSensor, INPUT);
|
||||||
@ -140,7 +147,7 @@ void Plant::deactivatePump(void)
|
|||||||
{
|
{
|
||||||
int plantId = this->mPlantId;
|
int plantId = this->mPlantId;
|
||||||
Serial << "deactivating pump " << plantId << endl;
|
Serial << "deactivating pump " << plantId << endl;
|
||||||
digitalWrite(this->mPinPump, LOW);
|
ledcWrite(this->mPlantId, 0);
|
||||||
if (this->mConnected)
|
if (this->mConnected)
|
||||||
{
|
{
|
||||||
const String OFF = String("OFF");
|
const String OFF = String("OFF");
|
||||||
@ -158,8 +165,10 @@ void Plant::publishState(String state) {
|
|||||||
void Plant::activatePump(void)
|
void Plant::activatePump(void)
|
||||||
{
|
{
|
||||||
int plantId = this->mPlantId;
|
int plantId = this->mPlantId;
|
||||||
|
|
||||||
Serial << "activating pump " << plantId << endl;
|
Serial << "activating pump " << plantId << endl;
|
||||||
digitalWrite(this->mPinPump, HIGH);
|
long desiredPowerLevelPercent = this->mSetting->pPumpPowerLevel->get();
|
||||||
|
ledcWrite(this->mPlantId, desiredPowerLevelPercent*PWM_BITS);
|
||||||
if (this->mConnected)
|
if (this->mConnected)
|
||||||
{
|
{
|
||||||
const String OFF = String("ON");
|
const String OFF = String("ON");
|
||||||
|
Loading…
Reference in New Issue
Block a user