Corrected pin configuration to 0.7final PCB

This commit is contained in:
Ollo 2021-02-16 22:52:47 +01:00
parent 55d66b763c
commit 093b7c7fc3
2 changed files with 32 additions and 110 deletions

View File

@ -46,7 +46,7 @@
/** \addtogroup Configuration /** \addtogroup Configuration
* @{ * @{
*/ */
#define FIRMWARE_VERSION "1.0.10" #define FIRMWARE_VERSION "1.1.0"
#define ADC_TO_VOLT(adc) ((adc) * 3.3 ) / 4095) #define ADC_TO_VOLT(adc) ((adc) * 3.3 ) / 4095)
#define ADC_TO_VOLT_WITH_MULTI(adc, multi) (((adc)*3.3 * (multi)) / 4095) #define ADC_TO_VOLT_WITH_MULTI(adc, multi) (((adc)*3.3 * (multi)) / 4095)
@ -58,23 +58,21 @@
#define BATTSENSOR_INDEX_BATTERY 1 #define BATTSENSOR_INDEX_BATTERY 1
#define MS_TO_S 1000 #define MS_TO_S 1000
#define SENSOR_LIPO 34 /**< GPIO 34 (ADC1) */ #define SENSOR_PLANT0 32 /**< GPIO 32 (ADC1) */
#define SENSOR_SOLAR 35 /**< GPIO 35 (ADC1) */ #define SENSOR_PLANT1 33 /**< GPIO 33 (ADC1) */
#define SENSOR_PLANT0 12 /**< GPIO 32 (ADC1) */ #define SENSOR_PLANT2 25 /**< GPIO 25 (ADC2) */
#define SENSOR_PLANT1 14/**< GPIO 33 (ADC1) */
#define SENSOR_PLANT2 27 /**< GPIO 25 (ADC2) */
#define SENSOR_PLANT3 26 /**< GPIO 26 (ADC2) */ #define SENSOR_PLANT3 26 /**< GPIO 26 (ADC2) */
#define SENSOR_PLANT4 25 /**< GPIO 27 (ADC2) */ #define SENSOR_PLANT4 27 /**< GPIO 27 (ADC2) */
#define SENSOR_PLANT5 14 /**< GPIO 14 (ADC2) */ #define SENSOR_PLANT5 39 /**< SENSOR_VIN */
#define SENSOR_PLANT6 12 /**< GPIO 12 (ADC2) */ #define SENSOR_PLANT6 36 /**< SENSOR_VP */
#define OUTPUT_PUMP0 15 /**< GPIO 23 */ #define OUTPUT_PUMP0 17 /**< GPIO 17 */
#define OUTPUT_PUMP1 5 /**< GPIO 22 */ #define OUTPUT_PUMP1 5 /**< GPIO 5 */
#define OUTPUT_PUMP2 18 /**< GPIO 21 */ #define OUTPUT_PUMP2 18 /**< GPIO 18 */
#define OUTPUT_PUMP3 19 /**< GPIO 19 */ #define OUTPUT_PUMP3 19 /**< GPIO 19 */
#define OUTPUT_PUMP4 21 /**< GPIO 18 */ #define OUTPUT_PUMP4 21 /**< GPIO 21 */
#define OUTPUT_PUMP5 22 /**< GPIO 5 */ #define OUTPUT_PUMP5 22 /**< GPIO 22 */
#define OUTPUT_PUMP6 23 /**< GPIO 15 */ #define OUTPUT_PUMP6 23 /**< GPIO 23 */
#define OUTPUT_SENSOR 16 /**< GPIO 16 - Enable Sensors */ #define OUTPUT_SENSOR 16 /**< GPIO 16 - Enable Sensors */
#define OUTPUT_PUMP 13 /**< GPIO 13 - Enable Pumps */ #define OUTPUT_PUMP 13 /**< GPIO 13 - Enable Pumps */
@ -89,6 +87,8 @@
#define MINIMUM_SOLAR_VOLT 4.0f /**< Minimum voltage of the sun, to detect daylight */ #define MINIMUM_SOLAR_VOLT 4.0f /**< Minimum voltage of the sun, to detect daylight */
#define SOLAR_CHARGE_MIN_VOLTAGE 7 /**< Sun is rising (morning detected) */ #define SOLAR_CHARGE_MIN_VOLTAGE 7 /**< Sun is rising (morning detected) */
#define SOLAR_CHARGE_MAX_VOLTAGE 9 /**< Sun is shining (noon) */ #define SOLAR_CHARGE_MAX_VOLTAGE 9 /**< Sun is shining (noon) */
#define VOLT_MAX_BATT 4.2f
#define VOLT_MAX_SOLAR 20.0f
#define MAX_CONFIG_SETTING_ITEMS 50 /**< Parameter, that can be configured in Homie */ #define MAX_CONFIG_SETTING_ITEMS 50 /**< Parameter, that can be configured in Homie */
@ -104,7 +104,6 @@
#define TEMPERATUR_TIMEOUT 3000 /**< 3 Seconds timeout for the temperatur sensors */ #define TEMPERATUR_TIMEOUT 3000 /**< 3 Seconds timeout for the temperatur sensors */
#define TEMP_SENSOR_MEASURE_SERIES 5 #define TEMP_SENSOR_MEASURE_SERIES 5
#define VOLT_SENSOR_MEASURE_SERIES 5
/* @} */ /* @} */
#endif #endif

View File

@ -87,11 +87,9 @@ int readCounter = 0;
bool mConfigured = false; bool mConfigured = false;
long nextBlink = 0; /**< Time needed in main loop to support expected blink code */ long nextBlink = 0; /**< Time needed in main loop to support expected blink code */
RunningMedian lipoRawSensor = RunningMedian(VOLT_SENSOR_MEASURE_SERIES);
RunningMedian solarRawSensor = RunningMedian(VOLT_SENSOR_MEASURE_SERIES);
RunningMedian waterRawSensor = RunningMedian(5); RunningMedian waterRawSensor = RunningMedian(5);
RunningMedian lipoTempSensor = RunningMedian(TEMP_SENSOR_MEASURE_SERIES); float mTempLipo = 0.0f;
RunningMedian waterTempSensor = RunningMedian(TEMP_SENSOR_MEASURE_SERIES); float mTempWater = 0.0f;
float mBatteryVoltage = 0.0f; float mBatteryVoltage = 0.0f;
float mSolarVoltage = 0.0f; float mSolarVoltage = 0.0f;
float mChipTemp = 0.0f; float mChipTemp = 0.0f;
@ -181,8 +179,6 @@ void readSystemSensors()
int timeoutTemp = millis() + TEMPERATUR_TIMEOUT; int timeoutTemp = millis() + TEMPERATUR_TIMEOUT;
int sensorCount = 0; int sensorCount = 0;
rtcLastLipoTemp = lipoTempSensor.getAverage();
rtcLastWaterTemp = waterTempSensor.getAverage();
/* Required to read the temperature at least once */ /* Required to read the temperature at least once */
while (sensorCount == 0 && millis() < timeoutTemp) while (sensorCount == 0 && millis() < timeoutTemp)
@ -211,14 +207,10 @@ void readSystemSensors()
mSolarVoltage = battery.getVoltage(BATTSENSOR_INDEX_SOLAR) * SOLAR_VOLT_FACTOR; mSolarVoltage = battery.getVoltage(BATTSENSOR_INDEX_SOLAR) * SOLAR_VOLT_FACTOR;
mBatteryVoltage = battery.getVoltage(BATTSENSOR_INDEX_BATTERY); mBatteryVoltage = battery.getVoltage(BATTSENSOR_INDEX_BATTERY);
mChipTemp = battery.getTemperature(); mChipTemp = battery.getTemperature();
for (int i = 0; i < VOLT_SENSOR_MEASURE_SERIES; i++)
{
lipoRawSensor.add(analogRead(SENSOR_LIPO));
solarRawSensor.add(analogRead(SENSOR_SOLAR));
}
Serial << "Lipo " << lipoRawSensor.getAverage() << " -> " << mBatteryVoltage << endl;
rtcLastBatteryVoltage = mBatteryVoltage; rtcLastBatteryVoltage = mBatteryVoltage;
rtcLastSolarVoltage = mSolarVoltage; rtcLastSolarVoltage = mSolarVoltage;
rtcLastLipoTemp = mTempLipo;
rtcLastWaterTemp = mTempWater;
} }
long getCurrentTime() long getCurrentTime()
@ -324,87 +316,24 @@ void mode2MQTT()
Serial << "W : " << waterRawSensor.getAverage() << " cm (" << String(waterLevelMax.get() - waterRawSensor.getAverage()) << "%)" << endl; Serial << "W : " << waterRawSensor.getAverage() << " cm (" << String(waterLevelMax.get() - waterRawSensor.getAverage()) << "%)" << endl;
lastWaterValue = waterRawSensor.getAverage(); lastWaterValue = waterRawSensor.getAverage();
sensorLipo.setProperty("percent").send(String(100 * lipoRawSensor.getAverage() / 4095)); sensorLipo.setProperty("percent").send(String(100 * mBatteryVoltage / VOLT_MAX_BATT));
sensorLipo.setProperty("volt").send(String(mBatteryVoltage)); sensorLipo.setProperty("volt").send(String(mBatteryVoltage));
sensorSolar.setProperty("percent").send(String((100 * solarRawSensor.getAverage()) / 4095)); sensorSolar.setProperty("percent").send(String(100 * mSolarVoltage / VOLT_MAX_SOLAR));
sensorSolar.setProperty("volt").send(String(mSolarVoltage)); sensorSolar.setProperty("volt").send(String(mSolarVoltage));
startupReason.setProperty("startupReason").send(String(wakeUpReason)); startupReason.setProperty("startupReason").send(String(wakeUpReason));
rtcLipoTempIndex = lipoSensorIndex.get(); rtcLipoTempIndex = lipoSensorIndex.get();
rtcWaterTempIndex = waterSensorIndex.get(); rtcWaterTempIndex = waterSensorIndex.get();
float lipoTempCurrent = lipoTempSensor.getMedian();
float t2 = NAN;
if (! isnan(lipoTempCurrent))
{
sensorTemp.setProperty(TEMPERATUR_SENSOR_LIPO).send(String(lipoTempCurrent));
Serial << "Lipo Temperatur " << lipoTempCurrent << " °C " << endl;
t2 = waterTempSensor.getMedian(); sensorTemp.setProperty(TEMPERATUR_SENSOR_LIPO).send(String(mTempLipo));
if (! isnan(t2)) Serial << "Lipo Temperatur " << mTempLipo << " °C " << endl;
{
sensorTemp.setProperty(TEMPERATUR_SENSOR_WATER).send(String(t2));
Serial << "Water Temperatur " << lipoTempCurrent << " °C " << endl;
}
//give mqtt time, use via publish callback instead?
delay(100);
} else {
int j=0;
/* Activate the Sensors and measure the temperature again */
/* activate all sensors */
pinMode(OUTPUT_SENSOR, OUTPUT);
digitalWrite(OUTPUT_SENSOR, HIGH);
delay(100); sensorTemp.setProperty(TEMPERATUR_SENSOR_WATER).send(String(mTempWater));
sensors.begin(); Serial << "Water Temperatur " << mTempWater << " °C " << endl;
for(j=0; j < TEMP_SENSOR_MEASURE_SERIES && sensors.getDeviceCount() == 0; j++) {
delay(100);
sensors.begin();
Serial << "Reset 1-Wire Bus" << endl;
// Setup Battery sensor DS2438
battery.begin();
}
for(j=0; j < TEMP_SENSOR_MEASURE_SERIES && isnan(lipoTempCurrent); j++) {
delay(200);
readTemp();
lipoTempCurrent = lipoTempSensor.getMedian();
t2 = waterTempSensor.getMedian();
Serial << "Temperatur Lipo:" << lipoTempCurrent << " °C Water : " << t2 << " °C" << endl;
}
if (! isnan(lipoTempCurrent))
{
sensorTemp.setProperty(TEMPERATUR_SENSOR_LIPO).send(String(lipoTempCurrent));
Serial << "Lipo Temperatur " << lipoTempCurrent << " °C " << endl;
t2 = waterTempSensor.getMedian();
if (! isnan(t2))
{
sensorTemp.setProperty(TEMPERATUR_SENSOR_WATER).send(String(t2));
Serial << "Water Temperatur " << lipoTempCurrent << " °C " << endl;
}
}
if (! isnan(mChipTemp)) {
sensorTemp.setProperty(TEMPERATUR_SENSOR_CHIP).send(String(mChipTemp)); sensorTemp.setProperty(TEMPERATUR_SENSOR_CHIP).send(String(mChipTemp));
Serial << "Chip Temperatur " << mChipTemp << " °C " << endl; Serial << "Chip Temperatur " << mChipTemp << " °C " << endl;
}
/* deactivate the sensors */
digitalWrite(OUTPUT_SENSOR, LOW);
}
if (! isnan(lipoTempCurrent) && ! isnan(t2)) {
bool lipoTempWarning = (lipoTempCurrent != LIPO_MAX_TEMPERATUR) && abs(lipoTempCurrent - t2) > LIPO_MAX_TEMPERATUR_DIFF;
if (lipoTempWarning)
{
Serial.println("Lipo temp incorrect, panic mode deepsleep TODO");
//espDeepSleepFor(PANIK_MODE_DEEPSLEEP);
//return;
}
}
for (int i = 0; i < MAX_PLANTS; i++) for (int i = 0; i < MAX_PLANTS; i++)
{ {
@ -534,9 +463,7 @@ int readTemp() {
{ {
if (rtcLipoTempIndex != -1) if (rtcLipoTempIndex != -1)
{ {
float temp1Raw = sensors.getTempCByIndex(rtcLipoTempIndex); mTempLipo = sensors.getTempCByIndex(rtcLipoTempIndex);
//Serial << "lipoTempCurrent: " << temp1Raw << endl;
lipoTempSensor.add(temp1Raw);
} }
else else
{ {
@ -552,9 +479,8 @@ int readTemp() {
if (sensorCount > 1 && rtcWaterTempIndex != -1) if (sensorCount > 1 && rtcWaterTempIndex != -1)
{ {
float temp2Raw = sensors.getTempCByIndex(rtcWaterTempIndex); mTempWater = sensors.getTempCByIndex(rtcWaterTempIndex);
//Serial << "waterTempCurrent: " << temp2Raw << endl; //Serial << "waterTempCurrent: " << temp2Raw << endl;
waterTempSensor.add(temp2Raw);
} }
readAgain--; readAgain--;
@ -623,12 +549,12 @@ bool readSensors()
// check if chip needs to start into full operational mode // check if chip needs to start into full operational mode
leaveMode1 |= readTemp(); leaveMode1 |= readTemp();
if (abs(lipoTempSensor.getAverage() - rtcLastLipoTemp) > TEMPERATURE_DELTA_TRIGGER_IN_C) if (abs(mTempWater - rtcLastLipoTemp) > TEMPERATURE_DELTA_TRIGGER_IN_C)
{ {
leaveMode1 = true; leaveMode1 = true;
wakeUpReason = WAKEUP_REASON_TEMP1_CHANGE; wakeUpReason = WAKEUP_REASON_TEMP1_CHANGE;
} }
if (abs(waterTempSensor.getAverage() - rtcLastWaterTemp) > TEMPERATURE_DELTA_TRIGGER_IN_C) if (abs(mTempWater - rtcLastWaterTemp) > TEMPERATURE_DELTA_TRIGGER_IN_C)
{ {
wakeUpReason = WAKEUP_REASON_TEMP2_CHANGE; wakeUpReason = WAKEUP_REASON_TEMP2_CHANGE;
leaveMode1 = true; leaveMode1 = true;
@ -928,9 +854,6 @@ void setup()
mPlants[i].init(); mPlants[i].init();
} }
/* Intialize inputs and outputs */
pinMode(SENSOR_LIPO, ANALOG);
pinMode(SENSOR_SOLAR, ANALOG);
/* read button */ /* read button */
pinMode(BUTTON, INPUT); pinMode(BUTTON, INPUT);