hydroponic-controller/messung/20240423_EC_Calibration_Ver...

159 lines
4.5 KiB
Plaintext

Kalibrierung der zwei neuen EC Probes für NFT und Dutch Bucket 2024.
Probe A: Die Längere
Probe B: Die etwas kürzere
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 sind 5690 uS/cm @ 25°C
Also 7,5g auf 0,25L H2O
Dann 50mL davon mit 450mL H2O auf 1L auffüllen.
Einige Messwerte genommen, ohne dass die EC Sensoren in Flüssigkeit sind.
time,tempReservoir,ECadcCalib,ECadc_A,ECadcAdjusted_A,ECadc_B,ECadcAdjusted_B
1524060,14.73,6021.09,729.21,728.70,729.16,728.65
1555158,14.69,6021.75,729.20,728.61,729.05,728.46
1577247,14.63,6021.88,728.94,728.33,728.96,728.35
1620362,14.56,6021.88,728.95,728.34,728.87,728.27
minimum adc rawA= 728.87
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 platziert
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 (Probe A)
angepasster ADC Messwert (linear gemappt nach abweichung vom referenz adc wert, referenz adc wert vorher ermittelt und eingegeben in code) (Probe A)
Roher ADC Messwert (Probe B)
angepasster ADC Messwert (Probe B)
manuell notiert und später der csv angefügt: "solutionAdded"
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.
time,mL added
4198000,0
4296000,0.1
4347000,0.2
4393000,0.3
4441000,0.4
4481000,0.5
4525000,0.6
4567000,0.7
4615000,0.8
4654000,0.9
4729000,1.0
4768000,1.1
4800000,1.2
4832000,1.3
4865000,1.4
4899000,1.5
4938000,1.6
4984000,1.7
5024000,1.8
5065000,1.9
5098000,2.0
5204000,2.5
5243000,3.0
5283000,3.5
5331000,4.0
5378000,4.5
5420000,5.0
5482000,5.5
5537000,6.1
5683000,7.0
5731000,8.0
5819000,9.0
5860000,10.0
5907000,11
5938000,12
5968000,13
6068000,14
6113000,15
6151000,16
6227000,17
6282000,18
6332000,19
6380000,20
6465000,25
6528000,30
6654000,35
6743000,40
6837000,45
6886000,50
6952000,60
6999000,70
7051000,80
7098000,90
7138000,100
7270000,120
7328000,140
7392000,160
7449000,180
7505000,200
Werte in 20240423_EC_Calibration_Raw.txt
Zusammengeführt in 20240423_EC_Calibration.csv
Auswertung in 20240423_EC_Calibration_with_graph.ods
Polynom x. Grades erstellt mit python approximate.py
für approximate.py numpy==1.22 notwendig. venv benutzen.
Probe A:
model order=4
+5.388914121653647e-13*x^4 -8.847448650204697e-09*x^3 +7.44612274805891e-05*x^2 -0.057529180570340156*x^1 +18.953002079376887*x^0
Excel:
5.388914121653647e-13
-8.847448650204697e-09
7.44612274805891e-05
-0.057529180570340156
18.953002079376887
Array:
{18.953002079376887,-0.057529180570340156,7.44612274805891e-05,-8.847448650204697e-09,5.388914121653647e-13}
Probe B:
model order=4
+5.529701600660142e-13*x^4 -9.161423581523883e-09*x^3 +7.671298605466989e-05*x^2 -0.08846039894456156*x^1 +40.838922264426685*x^0
Excel:
5.529701600660142e-13
-9.161423581523883e-09
7.671298605466989e-05
-0.08846039894456156
40.838922264426685
Array:
{40.838922264426685,-0.08846039894456156,7.671298605466989e-05,-9.161423581523883e-09,5.529701600660142e-13}
polynom in c++ code übernommen und punktuelle ergebnisse aus adc zu ec funktion ausgegeben und geplottet zur kontrolle, ob rechnung funktioniert.
bei lowADC den niedrigsten adc wert genommen in luft (siehe erste messungen).
float ec_calibration_polynom_A[]={18.953002079376887,-0.057529180570340156,7.44612274805891e-05,-8.847448650204697e-09,5.388914121653647e-13}; //20240423, graphite electrodes
float ec_calibration_linearize_below_adc_A=2000; //use linear approximation below this adc value. 0=disable
float ec_calibration_linear_lowADC_A=728; //x0
float ec_calibration_linear_lowEC_A=0; //y0
float ec_calibration_polynom_B[]={40.838922264426685,-0.08846039894456156,7.671298605466989e-05,-9.161423581523883e-09,5.529701600660142e-13}; //20240423, graphite electrodes
float ec_calibration_linearize_below_adc_B=2000; //use linear approximation below this adc value. 0=disable
float ec_calibration_linear_lowADC_B=728; //x0
float ec_calibration_linear_lowEC_B=0; //y0
Funktion getestet. Ergebnis in 20240423_FunctionTest.ods