analog water measurement added
This commit is contained in:
@@ -51,7 +51,10 @@ extern "C" bool verifyRollbackLater(){
|
||||
* DEFINES
|
||||
******************************************************************************/
|
||||
#define AMOUNT_SENOR_QUERYS 8
|
||||
#ifdef ANALOG_WATER
|
||||
#else
|
||||
#define MAX_TANK_DEPTH 5000
|
||||
#endif
|
||||
#define REBOOT_LOOP_DETECTION_ERROR 5
|
||||
|
||||
/******************************************************************************
|
||||
@@ -354,68 +357,35 @@ void readPowerSwitchedSensors()
|
||||
Plant plant = mPlants[i];
|
||||
switch (plant.getSensorMode())
|
||||
{
|
||||
case FREQUENCY_MOD_RESISTANCE_PROBE: {
|
||||
case FREQUENCY_MOD_RESISTANCE_PROBE:
|
||||
Serial << "Plant " << i << " measurement: " << mPlants[i].getCurrentMoistureRaw() << " hz " << mPlants[i].getCurrentMoisturePCT() << "%" << endl;
|
||||
break;
|
||||
}
|
||||
case ANALOG_RESISTANCE_PROBE : {
|
||||
case ANALOG_RESISTANCE_PROBE :
|
||||
Serial << "Plant " << i << " measurement: " << mPlants[i].getCurrentMoistureRaw() << " mV " << mPlants[i].getCurrentMoisturePCT() << "%" << endl;
|
||||
break;
|
||||
}
|
||||
case NONE : {
|
||||
|
||||
}
|
||||
default:
|
||||
case NONE:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Wire.begin(SENSOR_TANK_SDA, SENSOR_TANK_SCL);
|
||||
// Source: https://www.st.com/resource/en/datasheet/vl53l0x.pdf
|
||||
tankSensor.setAddress(0x52);
|
||||
tankSensor.setBus(&Wire);
|
||||
delay(50);
|
||||
Serial << "Distance sensor init" << endl;
|
||||
long start = millis();
|
||||
bool distanceReady = false;
|
||||
while ((start + WATERSENSOR_TIMEOUT) > millis())
|
||||
#ifdef ANALOG_WATER
|
||||
Serial << "Analog water measurement " << WATERSENSOR_CYCLE << " cycles.." << endl;
|
||||
Serial.flush();
|
||||
|
||||
/* Read analog Water sensor*/
|
||||
for(int i=0; i < WATERSENSOR_CYCLE; i++)
|
||||
{
|
||||
if (tankSensor.init())
|
||||
{
|
||||
distanceReady = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
delay(200);
|
||||
}
|
||||
}
|
||||
if (distanceReady)
|
||||
{
|
||||
waterRawSensor.clear();
|
||||
tankSensor.setSignalRateLimit(0.1);
|
||||
// increase laser pulse periods (defaults are 14 and 10 PCLKs)
|
||||
tankSensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
|
||||
tankSensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
|
||||
tankSensor.setMeasurementTimingBudget(200000);
|
||||
Serial << "Distance sensor measuring" << endl;
|
||||
for (int readCnt = 0; readCnt < WATERSENSOR_CYCLE; readCnt++)
|
||||
|
||||
{
|
||||
if (!tankSensor.timeoutOccurred())
|
||||
{
|
||||
uint16_t distance = tankSensor.readRangeSingleMillimeters();
|
||||
if (distance < MAX_TANK_DEPTH)
|
||||
{
|
||||
waterRawSensor.add(distance);
|
||||
}
|
||||
}
|
||||
delay(50);
|
||||
}
|
||||
Serial << "Distance sensor " << waterRawSensor.getMedian() << " mm" << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
log(LOG_LEVEL_WARN, LOG_TANKSENSOR_FAIL_DETECT, LOG_TANKSENSOR_FAIL_DETECT_CODE);
|
||||
int value = analogRead(SENSOR_TANK_ANALOG);
|
||||
Serial << "Round " << i << " measurement: " << value << " mV " << endl;
|
||||
waterRawSensor.add(value);
|
||||
delay(5);
|
||||
}
|
||||
Serial << "Analog water measurement done" << endl;
|
||||
#else
|
||||
Serial << "Analog water measurement deactivated" << endl;
|
||||
#endif
|
||||
Serial.flush();
|
||||
|
||||
/* deactivate the sensors */
|
||||
digitalWrite(OUTPUT_ENABLE_SENSOR, LOW);
|
||||
@@ -792,6 +762,10 @@ void safeSetup()
|
||||
|
||||
pinMode(OUTPUT_ENABLE_SENSOR, OUTPUT);
|
||||
|
||||
#ifdef ANALOG_WATER
|
||||
pinMode(SENSOR_TANK_ANALOG, INPUT);
|
||||
#endif
|
||||
|
||||
static_assert(HomieInternals::MAX_CONFIG_SETTING_SIZE >= MAX_CONFIG_SETTING_ITEMS, "Limits.hpp not adjusted MAX_CONFIG_SETTING_ITEMS");
|
||||
if (HomieInternals::MAX_CONFIG_SETTING_SIZE < MAX_CONFIG_SETTING_ITEMS)
|
||||
{
|
||||
@@ -819,9 +793,6 @@ void safeSetup()
|
||||
deepSleepNightTime.setDefaultValue(600);
|
||||
ntpServer.setDefaultValue("pool.ntp.org");
|
||||
|
||||
/* waterLevelMax 1000 */ /* 100cm in mm */
|
||||
waterLevelMin.setDefaultValue(50); /* 5cm in mm */
|
||||
waterLevelWarn.setDefaultValue(500); /* 50cm in mm */
|
||||
waterLevelVol.setDefaultValue(5000); /* 5l in ml */
|
||||
lipoSensorAddr.setDefaultValue("");
|
||||
waterSensorAddr.setDefaultValue("");
|
||||
@@ -1082,7 +1053,7 @@ void plantcontrol()
|
||||
|
||||
readOneWireSensors();
|
||||
|
||||
Serial << "W : " << waterRawSensor.getAverage() << " mm (" << String(waterLevelMax.get() - waterRawSensor.getAverage()) << " mm left)" << endl;
|
||||
Serial << "W : " << waterRawSensor.getAverage() << " mm " << endl;
|
||||
|
||||
mBatteryVoltage = battery.getVoltage(BATTSENSOR_INDEX_BATTERY);
|
||||
float chipTemp = battery.getTemperature();
|
||||
@@ -1093,14 +1064,11 @@ void plantcontrol()
|
||||
/* Publish water values, if available */
|
||||
if (waterRawSensor.getCount() > 0)
|
||||
{
|
||||
float remaining = (waterLevelMax.get() - waterRawSensor.getAverage());
|
||||
if (!isnan(remaining))
|
||||
{
|
||||
/* measuring the distance from top -> smaller value means more water: */
|
||||
sensorWater.setProperty("remaining").send(String(100.0 - (remaining/100)));
|
||||
}
|
||||
if (!isnan(waterRawSensor.getAverage()))
|
||||
{
|
||||
/* measuring the distance from top -> smaller value means more water: */
|
||||
sensorWater.setProperty("remaining").send(String(100.0 * (waterRawSensor.getAverage()/ESP_ADC_MAX)));
|
||||
|
||||
sensorWater.setProperty("distance").send(String(waterRawSensor.getAverage()));
|
||||
}
|
||||
}
|
||||
@@ -1141,11 +1109,7 @@ bool isLowLight = (mSolarVoltage <= SOLAR_CHARGE_MAX_VOLTAGE);
|
||||
if (waterRawSensor.getCount() > 0)
|
||||
{
|
||||
//surface of water is still nearer the sensor than required to cover the pumps
|
||||
hasWater = waterRawSensor.getAverage() < waterLevelMin.get();
|
||||
if (waterRawSensor.getAverage() > waterLevelMax.get()) {
|
||||
log(LOG_LEVEL_ERROR, LOG_PUMP_FULLTANK_MESSAGE, LOG_PUMP_FULLTANK_CODE);
|
||||
hasWater = true;
|
||||
}
|
||||
hasWater = waterRawSensor.getAverage() > WATER_LEVEL_MINIMUM;
|
||||
}
|
||||
|
||||
// FIXME no water warning message
|
||||
|
Reference in New Issue
Block a user