From 92ec32304cdbd3aaee16aa5383ba7ba27896fcb5 Mon Sep 17 00:00:00 2001 From: Fisch Date: Tue, 20 Jun 2023 22:30:29 +0200 Subject: [PATCH] calibrate ec for graphite probe --- include/ec.h | 11 ++++----- include/wifi_functions.h | 4 +++- messung/20230620_NaCl.ods | Bin 0 -> 31804 bytes messung/20230620_NaCl_raw.csv | 41 ++++++++++++++++++++++++++++++++++ src/main.cpp | 24 ++++++++++++++------ 5 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 messung/20230620_NaCl.ods create mode 100644 messung/20230620_NaCl_raw.csv diff --git a/include/ec.h b/include/ec.h index c77a2de..5f7bde8 100644 --- a/include/ec.h +++ b/include/ec.h @@ -64,9 +64,10 @@ float ec_reference_adc=6016.88; //adc reference value for the calibration resist //x^0*p[0] + ... + x^n*p[n] //float ec_calibration_polynom[]={691.5992624638029,-1.4015367296761692,0.0008513503472324141,-2.2140576823179093e-07,2.8962580780180067e-11,-1.8577565383307114e-15,4.7162479484903865e-20}; //float ec_calibration_polynom[]={1033.928052655456,-3.8909104921922895,0.005627541436014758,-4.103988840997024e-06,1.7231981870816133e-09,-4.433707707721975e-13,7.203892111369395e-17,-7.406549810844244e-21,4.667420606439905e-25,-1.6439457516812463e-29,2.477292190335455e-34}; //20220505 -float ec_calibration_polynom[]={-323.68589929771457,0.5836096440900665,-0.000279737392438965,5.98673062873e-08,-5.4460235093798435e-12,1.8535134644431135e-16}; //20230509 +//float ec_calibration_polynom[]={-323.68589929771457,0.5836096440900665,-0.000279737392438965,5.98673062873e-08,-5.4460235093798435e-12,1.8535134644431135e-16}; //20230509 //float ec_calibration_polynom[]={212.6826331524675,-0.6043878865263305,0.000571551634082491,-1.827897106718841e-07,2.682337041246909e-11,-1.8368511021965982e-15,4.8269168538877025e-20}; //20230509 manuell -float ec_calibration_linearize_below_adc=6500; //use linear approximation below this adc value. 0=disable +float ec_calibration_polynom[]={-202.42892340068445,0.3775267988688599,-0.0001603031198536654,3.398964768344757e-08,-3.0277753798278316e-12,1.0137804308289433e-16}; //20230620, graphite electrodes +float ec_calibration_linearize_below_adc=4000; //use linear approximation below this adc value. 0=disable float ec_calibration_linear_lowADC=746; //x0 float ec_calibration_linear_lowEC=0; //y0 @@ -163,7 +164,7 @@ void ec_loop(unsigned long loopmillis) { if (loopmillis>last_read_ec+EC_READ_INTERVAL) { //take reading into array last_read_ec=loopmillis; - if (loopmillis>ec_last_change_relay+EC_RELAY_SWITCH_SETTLETIME) { //values have settled + if (loopmillis>ec_last_change_relay+EC_RELAY_SWITCH_SETTLETIME) { //values have settled uint16_t value = ADS.readADC(EC_ADS_CHANNEL); ec_array[ec_array_pos]=value; @@ -173,10 +174,10 @@ void ec_loop(unsigned long loopmillis) { } }else{ //measurement not running, then take calibration readings - if (loopmillis>last_read_ec+EC_CALIB_READ_INTERVAL) { //take reading into array + if (loopmillis>last_read_ec+EC_CALIB_READ_INTERVAL) { //take reading into arraysdf last_read_ec=loopmillis; - if (loopmillis>ec_last_change_relay+EC_RELAY_SWITCH_SETTLETIME) { //values have settled + if (loopmillis>ec_last_change_relay+EC_RELAY_SWITCH_SETTLETIME) { //values have settled uint16_t value = ADS.readADC(EC_ADS_CHANNEL); ec_calib_array[ec_calib_array_pos]=value; diff --git a/include/wifi_functions.h b/include/wifi_functions.h index 3d7a56b..cb6954b 100644 --- a/include/wifi_functions.h +++ b/include/wifi_functions.h @@ -8,6 +8,8 @@ #include "wifi_settings.h" #include "helpfunctions.h" +bool force_ec_measurement=false; + struct mqttValueTiming{ float minchange; @@ -25,7 +27,7 @@ MQTTClient client; bool sendallnext_flag=false; bool enableTiming=true; -bool force_ec_measurement=false; + void publishValueTimed(String topic,float value,uint8_t decimals,mqttValueTiming &mqttvt,unsigned long loopmillis); void publishValue(String topic,float value,uint8_t decimals); diff --git a/messung/20230620_NaCl.ods b/messung/20230620_NaCl.ods new file mode 100644 index 0000000000000000000000000000000000000000..a52bec99c4f64cb21ccac469568c2c9306eadba4 GIT binary patch literal 31804 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 literal 0 HcmV?d00001 diff --git a/messung/20230620_NaCl_raw.csv b/messung/20230620_NaCl_raw.csv new file mode 100644 index 0000000..4562d47 --- /dev/null +++ b/messung/20230620_NaCl_raw.csv @@ -0,0 +1,41 @@ +time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted,ecMeasured +174369,26.75,6026.45,768.41,767.19,15 +226453,26.75,6026.3,768.41,767.2,15 +254513,26.75,6026.81,768.57,767.31,15 +280571,26.75,6027.54,768.12,766.76,15 +298621,26.75,6027.7,768.15,766.77,15 +393748,26.75,6026.95,866.96,865.51,40 +564951,26.75,6026.5,1100.59,1098.84,55 +612030,26.75,6026.8,1240.29,1238.25,60 +676126,26.75,6026.96,1536.88,1534.3,80 +708190,26.75,6027.02,1834.7,1831.62,100 +740254,26.75,6027.66,2122.36,2118.56,120 +772318,26.75,6027.68,2586.95,2582.31,155 +805383,26.75,6027.63,3363.96,3357.96,220 +860470,26.75,6027.38,3874.01,3867.26,260 +906548,26.75,6027.63,4411.25,4403.39,320 +945619,26.78,6027.32,5086.8,5077.99,390 +992698,26.8,6026.66,5780.72,5771.34,470 +1040778,26.81,6026.3,6346.3,6336.38,560 +1095867,26.81,6026.54,6959.73,6948.58,650 +1125929,26.81,6026.76,7704.95,7692.32,780 +1152988,26.81,6026.91,8014.21,8000.88,850 +1184051,26.81,6026.74,8444.22,8430.4,940 +1240140,26.85,6026.3,9119.98,9105.73,1120 +1286218,26.87,6026.59,9769.52,9753.78,1310 +1322286,26.87,6026.39,10601.19,10584.46,1630 +1433429,26.88,6026.82,11137.44,11119.07,1890 +1463491,26.93,6027.01,11235.27,11216.38,1940 +1495555,26.94,6026.65,11451,11432.44,2060 +1524616,26.94,6026.15,11627.25,11609.36,2170 +1556680,26.94,6026.38,11886.32,11867.59,2340 +1590746,26.94,6026.27,12143.11,12124.2,2540 +1639827,26.95,6026.5,12335.04,12315.34,2700 +1676896,27,6026.65,12505.56,12485.29,2850 +1712964,27,6027.25,12673.08,12651.28,3010 +1749032,27,6027.5,12956.33,12933.5,3310 +1822169,27.02,6026.78,13440.36,13418.28,3940 +1853232,27.06,6026.5,13607.09,13585.36,4220 +1895306,27.06,6026.53,13765.66,13743.62,4590 +1935379,27.06,6026.66,13895.97,13873.41,4860 +1967443,27.06,6026.62,13885.23,13862.79,5120 diff --git a/src/main.cpp b/src/main.cpp index 24c0d79..da6be82 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,6 +6,8 @@ bool debug=true; //print Serial information bool mqtt=false; +bool eccalibrationoutput=false; //serial output for ec calibration + @@ -98,8 +100,6 @@ void setup() { delay(100000); */ - - //Serial.println("time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted,EC,EC25"); @@ -125,15 +125,23 @@ void loop() { static bool getReading=false; - if (!digitalRead(PIN_BUTTON)) { + if (!eccalibrationoutput && !digitalRead(PIN_BUTTON)) { valueError=false; Serial.println("Reset ValueError flag by user"); digitalWrite(PIN_LED,valueError); delay(100); } - /* - if (ec_flag_measurement_available && getReading) { + if (eccalibrationoutput && !digitalRead(PIN_BUTTON) && !getReading) { + getReading=true; + force_ec_measurement=true; + ec_flag_measurement_available=false; + digitalWrite(PIN_LED,HIGH); + } + + + if (eccalibrationoutput && ec_flag_measurement_available && getReading) { + ec_flag_measurement_available=false; getReading=false; digitalWrite(PIN_LED,LOW); @@ -143,7 +151,7 @@ void loop() { Serial.print(ec_adc); Serial.print(","); Serial.print(ec_adc_adjusted); Serial.println(); - }*/ + } if (loopmillis>last_check+2000) { //check values @@ -161,7 +169,9 @@ void loop() { } - digitalWrite(PIN_LED,valueError); + if (!eccalibrationoutput) { + digitalWrite(PIN_LED,valueError); + }