add YF-S201 Water Flow sensor

This commit is contained in:
interfisch 2023-04-07 18:03:41 +02:00
parent c90e106ba6
commit f1b4a26338
1 changed files with 36 additions and 0 deletions

View File

@ -55,10 +55,23 @@ float waterlevelMean[WATERLEVELMEAN_SIZE];
uint16_t waterlevelMean_pos=0;
// ######## Flow Rate
#define FLOW_PIN 19
uint16_t flow_counter=0; //maximum counts/s measured with Eden 128 Pump was 171
void IRAM_ATTR isr_flow();
unsigned long last_read_flow=0;
#define READINTERVAL_FLOW 1000
float flow_factor=7.5; //F=7.5*flowrate[L/min]
float flow;
uint32_t flow_counter_sum=0;
unsigned long last_print=0;
float getMean(uint16_t *parray,uint16_t psize);
float getMeanf(float *parray,uint16_t psize);
uint16_t getMin(uint16_t *parray, uint16_t psize);
@ -127,6 +140,9 @@ void setup() {
sensors.setResolution(thermometerAir, TEMPERATURE_PRECISION);
pinMode(FLOW_PIN, INPUT_PULLUP);
attachInterrupt(FLOW_PIN, isr_flow, CHANGE);
Serial.println("Setup finished");
delay(500);
}
@ -205,6 +221,17 @@ void loop() {
waterlevelMean_pos%=WATERLEVELMEAN_SIZE;
}
static uint16_t _last_flowconter; //for debugging
if (loopmillis>=last_read_flow+READINTERVAL_FLOW) {
flow=flow_counter*1000.0/(loopmillis-last_read_flow)/2.0; //Frequency [Hz]
flow/=flow_factor; //[L/min]
_last_flowconter=flow_counter; //for debugging
flow_counter=0;
last_read_flow=loopmillis;
}
if (loopmillis>last_print+500) {
last_print=loopmillis;
@ -225,6 +252,9 @@ void loop() {
}else{
Serial.print("\t waiting for distance");
}
Serial.print("\t Flow="); Serial.print(flow,2); Serial.print(" ("); Serial.print(_last_flowconter); Serial.print(")");
Serial.print("\t Flowsum="); Serial.print(flow_counter_sum);
@ -305,3 +335,9 @@ void printAddress(DeviceAddress deviceAddress)
Serial.print(deviceAddress[i], HEX);
}
}
void IRAM_ATTR isr_flow() {
flow_counter++;
flow_counter_sum++;
}