diff --git a/include/ec.h b/include/ec.h index 426b76c..ca6de35 100644 --- a/include/ec.h +++ b/include/ec.h @@ -29,7 +29,7 @@ uint16_t ec_calib_array_pos=0; uint16_t ec_array[EC_ARRAY_SIZE]; uint16_t ec_array_pos=EC_ARRAY_SIZE; unsigned long last_measurement_ec=0; -#define EC_MEASUREMENT_INTERVAL 60000 //complete filtered measurement every x ms +#define EC_MEASUREMENT_INTERVAL 30000 //complete filtered measurement every x ms //One filtered measurement takes EC_READ_INTERVAL*EC_ARRAY_SIZE*4 #define EC_READ_INTERVAL 10 //interval of reading adc value inside a measurement. one reading takes about 9-10ms @@ -57,10 +57,11 @@ 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}; -float ec_calibration_polynom[]={212.6826331524675,-0.6043878865263305,0.000571551634082491,-1.827897106718841e-07,2.682337041246909e-11,-1.8368511021965982e-15,4.8269168538877025e-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[]={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_linear_lowADC=750; //x0 +float ec_calibration_linear_lowADC=746; //x0 float ec_calibration_linear_lowEC=0; //y0 bool ec_measurementReady(); diff --git a/messung/20230509_Dauermessung.csv b/messung/20230509_Dauermessung.csv new file mode 100644 index 0000000..e5eb952 --- /dev/null +++ b/messung/20230509_Dauermessung.csv @@ -0,0 +1,32 @@ +time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted +101268,21.37,6017.88,8057.05,8055.72 +131325,21.44,6017.71,8031.89,8030.79 +161382,21.49,6017.91,8021.16,8019.78 +191439,21.54,6017.82,8007.08,8005.83 +221496,21.59,6017.95,7988.33,7986.92 +251553,21.63,6018.17,7974.48,7972.76 +281610,21.69,6018.26,7966.37,7964.54 +311667,21.75,6018.71,7956.08,7953.66 +341724,21.80,6018.76,7946.59,7944.11 +371781,21.84,6018.63,7940.63,7938.31 +401838,21.88,6018.53,7938.66,7936.48 +431895,21.94,6018.41,7951.11,7949.08 +461952,22.00,6018.60,7933.68,7931.41 +492009,22.01,6018.60,7924.54,7922.27 +522066,22.06,6018.66,7916.94,7914.60 +552123,22.12,6018.75,7911.43,7908.97 +582180,22.15,6018.97,7906.98,7904.23 +612237,22.19,6019.16,7904.89,7901.90 +642294,22.25,6018.83,7899.79,7897.24 +672351,22.27,6018.82,7898.05,7895.50 +702408,22.31,6018.77,7896.98,7894.51 +732465,22.37,6018.59,7890.25,7888.01 +762522,22.38,6018.69,7884.41,7882.04 +792579,22.44,6018.36,7880.67,7878.73 +822636,22.45,6018.04,7875.55,7874.03 +852693,22.50,6018.09,7872.04,7870.46 +882750,22.55,6018.07,7868.66,7867.10 +912807,22.56,6018.48,7865.01,7862.92 +942864,22.62,6018.35,7862.13,7860.21 +972921,22.63,6018.74,7857.67,7855.24 +1002978,22.69,6018.77,7858.07,7855.60 diff --git a/messung/20230509_NaCl_manuell.csv b/messung/20230509_NaCl_manuell.csv new file mode 100644 index 0000000..220b2e1 --- /dev/null +++ b/messung/20230509_NaCl_manuell.csv @@ -0,0 +1,49 @@ +ecMeasured,time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted +0,488810,25,6018.5,749.49,749.29 +0,500924,25,6018.5,749.85,749.65 +0,512968,25,6018.5,750.33,750.13 +470,607166,25,6018.38,6631.48,6629.84 +475,618283,25,6018.38,6632.4,6630.75 +480,630263,25,6018.38,6657.02,6655.37 +960,728530,25,6018.48,9028.83,9026.44 +965,739728,25,6018.48,9038.25,9035.85 +970,751586,25,6018.48,9085.94,9083.53 +1290,845876,25,6018.53,9975.25,9972.51 +1300,857889,25,6018.53,9956.18,9953.44 +1310,869129,25,6018.53,10024.26,10021.51 +3070,979125,25,6019,12369.85,12365.49 +3070,991238,25,6019,12391.81,12387.44 +3070,1003282,25,6019,12429.84,12425.47 +3620,1065510,25,6018.74,12577.39,12573.5 +3620,1079543,25,6018.86,12796.35,12792.14 +3620,1091656,25,6018.86,12823.02,12818.81 +30,1184837,25,6019.05,928.33,928 +30,1196950,25,6019.05,928.99,928.66 +30,1208340,25,6019.05,923.8,923.46 +380,1309239,25,6019.18,5713.99,5711.81 +380,1321252,25,6019.18,5718.64,5716.45 +380,1333296,25,6019.18,5738.1,5735.91 +710,1405519,25,6018.48,7862.59,7860.49 +710,1417563,25,6018.48,7861.14,7859.04 +710,1429607,25,6018.48,7859.18,7857.09 +1460,1488823,25,6018.43,10252.78,10250.14 +1460,1500836,25,6018.43,10266.79,10264.14 +1460,1511972,25,6018.43,10278.46,10275.82 +1960,1579122,25,6019.31,11072.54,11068.06 +1960,1596158,25,6019.48,11143.74,11138.92 +1960,1608171,25,6019.48,11162.37,11157.55 +2510,1661293,25,6019.38,11800.73,11795.82 +2510,1673306,25,6019.38,11757.97,11753.08 +2510,1684573,25,6019.38,11810.64,11805.73 +2840,1734501,25,6019.07,12125.58,12121.17 +2840,1746521,25,6019.07,12137.02,12132.61 +2840,1758704,25,6019.07,12165.2,12160.77 +3550,1821882,25,6018.94,12486.45,12482.18 +3550,1834006,25,6018.94,12587.85,12583.54 +3550,1845173,25,6018.94,12597,12592.7 +4220,1916439,25,6018.58,12688.82,12685.24 +4220,1928281,25,6018.58,12911.29,12907.65 +4220,1940325,25,6018.58,12946.13,12942.48 +5320,2164675,25,6018.38,13294.82,13291.5 +5320,2175910,25,6018.38,13343.59,13340.26 +5320,2187810,25,6018.38,13220.96,13217.66 diff --git a/messung/20230509_NaCl_manuell.ods b/messung/20230509_NaCl_manuell.ods new file mode 100644 index 0000000..2edffff Binary files /dev/null and b/messung/20230509_NaCl_manuell.ods differ diff --git a/messung/20230509_NaCl_raw.csv b/messung/20230509_NaCl_raw.csv new file mode 100644 index 0000000..a255cf0 --- /dev/null +++ b/messung/20230509_NaCl_raw.csv @@ -0,0 +1,36 @@ +ecMeasured,time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted +0,975348,24.75,6018.3,746.44,746.26 +0,986521,24.76,6018.3,746.37,746.19 +30,1058510,24.92,6018.8,883.8,883.52 +50,1093614,24.97,6018.78,1363.18,1362.75 +70,1125783,25.02,6018.88,1707.09,1706.52 +90,1167844,25.09,6018.88,2146.24,2145.53 +110,1211926,25.14,6018.93,2568.53,2567.65 +150,1258010,25.19,6018.48,3231.4,3230.54 +200,1307192,25.25,6018.39,3838.19,3837.22 +310,1349294,25.31,6018.68,4956.19,4954.71 +440,1398370,25.37,6018.42,6031.16,6029.62 +440,1410383,25.37,6018.42,6037.3,6035.75 +440,1453556,25.4,6018.02,6045.55,6044.4 +440,1477695,25.44,6018.08,6048.88,6047.68 +440,1519863,25.46,6017.67,6053.23,6052.44 +510,1576045,25.5,6018.12,6531.07,6529.73 +690,1669283,25.56,6018.22,7520.7,7519.03 +810,1706446,25.57,6018.15,8065.97,8064.27 +970,1750616,25.62,6018.21,8635.71,8633.8 +1180,1791783,25.62,6018.56,9272.33,9269.74 +1320,1899035,25.69,6018.59,9622.38,9619.66 +1470,1948148,25.69,6018.4,9947.52,9945.01 +1730,2020229,25.69,6018.11,10444.77,10442.64 +1910,2055333,25.69,6018.3,10763.83,10761.28 +2090,2163536,25.75,6018.43,10937.14,10934.32 +2320,2207599,25.75,6018.02,11288.6,11286.47 +2560,2290827,25.75,6018.48,11569.56,11566.47 +2900,2332985,25.75,6018.8,11867.85,11864.05 +3250,2422120,25.75,6017.84,12148.5,12146.55 +3900,2478252,25.75,6018.16,12552.99,12550.31 +4500,2535336,25.73,6018.65,12893.54,12889.75 +5240,2579418,25.69,6018.27,13288.07,13284.99 +5940,2612489,25.69,6018.07,13470.15,13467.48 +6020,2652655,25.69,6018.21,13508.16,13505.17 +7230,2744804,25.67,6018.02,13771.93,13769.33 diff --git a/messung/20230509_NaCl_versuchsablauf.txt b/messung/20230509_NaCl_versuchsablauf.txt new file mode 100644 index 0000000..57e0a92 --- /dev/null +++ b/messung/20230509_NaCl_versuchsablauf.txt @@ -0,0 +1,75 @@ +EC Peaktech neu kalibriert +Lösung laut https://www.researchgate.net/profile/Sameer-Sayyad-2/post/How-is-it-possible-to-convert-conductivity-of-NaCl-solution-in-uS-to-its-salinity-NaCl-concentration-in-ppm/attachment/5abdeaedb53d2f63c3c2e08c/AS%3A609786693443585%401522395885345/download/conductivity+vs+concentration+NaCl+25+degress.pdf +3g NaCl auf 1L H2O = 5690 uS/cm @ 25°C +Also 7,5g auf 0,25L H2O +Dann 100mL davon mit 900mL H2O auf 1L auffüllen. + + +Messwertkalibrierung DIY EC Messgerät: + Open EC Sensor: +time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted +125483,21.06,6018.22,737.27,737.11 +187583,21.12,6018.63,737.87,737.65 +288741,21.19,6018.19,738.09,737.93 +300754,21.23,6018.19,738.04,737.88 +312798,21.29,6018.19,737.98,737.82 +minimum adc raw=737.27 + + Shorted EC Sensor: +time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted +363992,21.44,6018.52,17411.64,17406.89 +396062,21.50,6018.48,17411.45,17406.83 +407198,21.51,6018.48,17861.44,17856.70 +433216,21.56,6018.52,17381.09,17376.37 +444363,21.56,6018.52,14442.77,14438.85 +516433,21.62,6018.45,17450.95,17446.39 +527600,21.62,6018.45,17861.36,17856.70 +539591,21.64,6018.45,17860.74,17856.07 +550857,21.66,6018.45,17861.28,17856.61 +maximum adc raw=17861.44 + + ca. 300mL dest. Wasser in 500mL Becherglas auf Magnetrührer + Wasser temperiert auf 25°C und durchgehend temperatur gehalten + Temperatursensor und DIY EC-Probe in Flüssigkeit gehalten + EC Sensor in Flüssigkeit zur Referenzmessung + Magnetrührer auf langsamer Stufe (keine Strudelbildung) + Messwert per Tastendruck erfasst (time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted) + zeit + temperatur d. flüssigkeit + referenz adc wert (geschalteter fester widerstand statt probe) + Roher ADC Messwert + angepasster ADC Messwert (linear gemappt nach abweichung vom referenz adc wert, referenz adc wert vorher ermittelt und eingegeben in code) + + manuell abgelesen: EC wert + + Erster Messwert nur dest. Wasser. + Weitere Messwerte jew. nach hinzufügen erst wenigen tropfen NaCl Lösung. Später mehr bis zu 10mL pro Messung. + + Bläschen an Elektroden durch pusten entfernt wenn sie sich gebildet haben + + Werte in 20230509_NaCl_raw.csv bzw auswertung in ..ods + + Polynom x. Grades erstellt mit python approximate.py + polynom in c++ code übernommen und punktuelle ergebnisse aus adc zu ec funktion ausgegeben und geplottet zur kontrolle, ob rechnung funktioniert. + +Dauermessung: + Start bei EC 980 laut EC Meter + bei 972921 EC 940 laut EC Meter + Bläschenbildung an elektroden. Werte nicht genau! + + +Temperaturabhängigkeit: TODO + NaCl Lösung auf etwa 1500uS/cm angemischt + Im Eiswasserbad gekühlt + Auf Magnetrührer platziert mit Temperatur und Diy EC-Probe + Kontinuierlich (alle 30s) messwerte aufgezeichnet + Bläschenbildung an den Elektroden ab etwa 34°C + Werte in 20230505_NaCl_temperature.csv + + t=99s: start bei 10.9°C (EC messgerät) (8.5°C laut DS18B20) EC=1364uS/cm (EC messgerät) + t=219s: erster korrekter calib wert. EC Messgerät: 1416uS/cm @11.4C + t=851s: 1443uS @15.6°C + t=1423s: 1553uS @25,3°C + t=1513s: blaeschen entfernt von ec probe + + ab 30°C viele bläschen diff --git a/messung/20230509_NaCl_vs_20230505.ods b/messung/20230509_NaCl_vs_20230505.ods new file mode 100644 index 0000000..6a28321 Binary files /dev/null and b/messung/20230509_NaCl_vs_20230505.ods differ diff --git a/messung/approximate.py b/messung/approximate.py index 83fda51..92df6eb 100644 --- a/messung/approximate.py +++ b/messung/approximate.py @@ -8,7 +8,7 @@ import matplotlib.pyplot as plt from pandas import * # reading CSV file -data = read_csv("20230509_NaCl_manuell.csv") +data = read_csv("20230509_NaCl_raw.csv") # converting column data to list #solutionAdded = data['solutionAdded'].tolist() #in ml diff --git a/src/main.cpp b/src/main.cpp index 37f6e9d..429bb32 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ #include -bool debug=false; //print Serial information +bool debug=true; //print Serial information #include "helpfunctions.h" #include "ADS1X15.h" @@ -127,7 +127,7 @@ void loop() { Serial.println(); } - if (loopmillis>last_check+2000 && 1==2) { //check values + if (loopmillis>last_check+2000) { //check values last_check=loopmillis;