'Botanical_Gardens_East.cr1 'CR1000 'Created by Short Cut (3.2) '5-10-2023 added DuckDNS update in ' steinhart_hart: '' constants for GWS thermistors, YSI 44033: Const KA = 1.468E-3 Const KB = 2.383E-4 Const KC = 1.007E-7 '' constants for GWS thermistors, YSI 44034 Const YSI_44034_KA = 1.285E-3 Const YSI_44034_KB = 2.362E-4 Const YSI_44034_KC = 9.285E-8 constTable ' pakbus-info: Const PAKBUS_INFO = 621 ' site-info: Const SITE_NAME = "Botanical Gardens East" Const SITE_DESCR = "soil moisture/temp" ' thermistor-atb: Const THERM_TYPE = "YSI 44033" Const THERM_REF_OHMS = 1000 EndConstTable ' prog-signature: Public progSig As Long 'Declare Variables and Units Dim LCount Public BattV 'Public FTPResult 'Public FTPResult2 'Public FTPResult3 Public UpdateURL As String * 105 = "https://www.duckdns.org/update?domains=nl241-botanical&token=ab975243-2ac8-423c-80b0-38d6e8840dc7&ip=" Public UpdateURLresult As String Public IPAddress As String * 12 Public PTemp_C Public VW(30) Public LCount_2 Public ThermMult(30)={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} Public ThermOffs(30)={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ' thermistor-atb: Public THERM(30) : Units THERM() = degC Public THERM_R(30) : Units THERM_R() = kOhms Dim Therm_X(30) Alias VW(1)=VW3_1 Alias VW(2)=VW3_2 Alias VW(3)=VW3_3 Alias VW(4)=VW3_4 Alias VW(5)=VW3_5 Alias VW(6)=VW3_6 Alias VW(7)=VW3_7 Alias VW(8)=VW3_8 Alias VW(9)=VW3_9 Alias VW(10)=VW3_10 Alias VW(11)=VW3_11 Alias VW(12)=VW3_12 Alias VW(13)=VW3_13 Alias VW(14)=VW3_14 Alias VW(15)=VW3_15 Alias VW(16)=VW4_1 Alias VW(17)=VW4_2 Alias VW(18)=VW4_3 Alias VW(19)=VW4_4 Alias VW(20)=VW4_5 Alias VW(21)=VW4_6 Alias VW(22)=VW4_7 Alias VW(23)=VW4_8 Alias VW(24)=VW4_9 Alias VW(25)=VW4_10 Alias VW(26)=VW4_11 Alias VW(27)=VW4_12 Alias VW(28)=VW4_13 Alias VW(29)=VW4_14 Alias VW(30)=VW4_15 Alias THERM(1)=Temp3_1 Alias THERM(2)=Temp3_2 Alias THERM(3)=Temp3_3 Alias THERM(4)=Temp3_4 Alias THERM(5)=Temp3_5 Alias THERM(6)=Temp3_6 Alias THERM(7)=Temp3_7 Alias THERM(8)=Temp3_8 Alias THERM(9)=Temp3_9 Alias THERM(10)=Temp3_10 Alias THERM(11)=Temp3_11 Alias THERM(12)=Temp3_12 Alias THERM(13)=Temp3_13 Alias THERM(14)=Temp3_14 Alias THERM(15)=Temp3_15 Alias THERM(16)=Temp4_1 Alias THERM(17)=Temp4_2 Alias THERM(18)=Temp4_3 Alias THERM(19)=Temp4_4 Alias THERM(20)=Temp4_5 Alias THERM(21)=Temp4_6 Alias THERM(22)=Temp4_7 Alias THERM(23)=Temp4_8 Alias THERM(24)=Temp4_9 Alias THERM(25)=Temp4_10 Alias THERM(26)=Temp4_11 Alias THERM(27)=Temp4_12 Alias THERM(28)=Temp4_13 Alias THERM(29)=Temp4_14 Alias THERM(30)=Temp4_15 Units BattV=Volts Units PTemp_C=Deg C Units Therm_X=mV 'Define Data Tables DataTable(HrlySoil,True,-1) DataInterval(0,60,Min,10) Sample(1,progSig,Long) Average(1,VW(1),FP2,False) Average(1,VW(2),FP2,False) Average(1,VW(3),FP2,False) Average(1,VW(4),FP2,False) Average(1,VW(5),FP2,False) Average(1,VW(6),FP2,False) Average(1,VW(7),FP2,False) Average(1,VW(8),FP2,False) Average(1,VW(9),FP2,False) Average(1,VW(10),FP2,False) Average(1,VW(11),FP2,False) Average(1,VW(12),FP2,False) Average(1,VW(13),FP2,False) Average(1,VW(14),FP2,False) Average(1,VW(15),FP2,False) Average(1,VW(16),FP2,False) Average(1,VW(17),FP2,False) Average(1,VW(18),FP2,False) Average(1,VW(19),FP2,False) Average(1,VW(20),FP2,False) Average(1,VW(21),FP2,False) Average(1,VW(22),FP2,False) Average(1,VW(23),FP2,False) Average(1,VW(24),FP2,False) Average(1,VW(25),FP2,False) Average(1,VW(26),FP2,False) Average(1,VW(27),FP2,False) Average(1,VW(28),FP2,False) Average(1,VW(29),FP2,False) Average(1,VW(30),FP2,False) Average(1,THERM(1),FP2,False) Average(1,THERM(2),FP2,False) Average(1,THERM(3),FP2,False) Average(1,THERM(4),FP2,False) Average(1,THERM(5),FP2,False) Average(1,THERM(6),FP2,False) Average(1,THERM(7),FP2,False) Average(1,THERM(8),FP2,False) Average(1,THERM(9),FP2,False) Average(1,THERM(10),FP2,False) Average(1,THERM(11),FP2,False) Average(1,THERM(12),FP2,False) Average(1,THERM(13),FP2,False) Average(1,THERM(14),FP2,False) Average(1,THERM(15),FP2,False) Average(1,THERM(16),FP2,False) Average(1,THERM(17),FP2,False) Average(1,THERM(18),FP2,False) Average(1,THERM(19),FP2,False) Average(1,THERM(20),FP2,False) Average(1,THERM(21),FP2,False) Average(1,THERM(22),FP2,False) Average(1,THERM(23),FP2,False) Average(1,THERM(24),FP2,False) Average(1,THERM(25),FP2,False) Average(1,THERM(26),FP2,False) Average(1,THERM(27),FP2,False) Average(1,THERM(28),FP2,False) Average(1,THERM(29),FP2,False) Average(1,THERM(30),FP2,False) EndTable DataTable(HrlySoilRes,True,-1) DataInterval(0,60,Min,10) Sample(1,progSig,Long) Average(30,THERM_R(),FP2,False) EndTable DataTable(HrlyDiag,True,-1) Sample(1,progSig,Long) DataInterval(0,60,Min,10) Minimum(1,BattV,FP2,False,False) Sample(1,BattV,FP2) Average(1,BattV,FP2,False) Average(1,PTemp_C,FP2,False) EndTable ' thermistors:calc_thermistors() Sub calc_thermistors() Dim j,lnR For j=1 To 1 '' calculate thermistor resistance from ratio and ref R: THERM_R(j) = THERM_REF_OHMS * Therm_X(j) / (1-Therm_X(j)) '' calculate natural log of thermistor resistance: lnR = LN(THERM_R(j)) '' use Steinhart & Hart equation to derive temperature: THERM(j) = (1/(KA + KB*lnR + KC*lnR^3)) - 273.15 THERM_R(j)= THERM_R(j)/1000 Next j ' calculate four 44034 thermistors For j=2 To 2 '' calculate thermistor resistance from ratio and ref R: THERM_R(j) = THERM_REF_OHMS * Therm_X(j) / (1-Therm_X(j)) '' calculate natural log of thermistor resistance: lnR = LN(THERM_R(j)) '' use Steinhart & Hart equation to derive temperature: THERM(j) = (1/(YSI_44034_KA + YSI_44034_KB*lnR + YSI_44034_KC*lnR^3)) - 273.15 THERM_R(j)= THERM_R(j)/1000 Next j For j=3 To 5 '' calculate thermistor resistance from ratio and ref R: THERM_R(j) = THERM_REF_OHMS * Therm_X(j) / (1-Therm_X(j)) '' calculate natural log of thermistor resistance: lnR = LN(THERM_R(j)) '' use Steinhart & Hart equation to derive temperature: THERM(j) = (1/(KA + KB*lnR + KC*lnR^3)) - 273.15 THERM_R(j)= THERM_R(j)/1000 Next j For j=6 To 6 '' calculate thermistor resistance from ratio and ref R: THERM_R(j) = THERM_REF_OHMS * Therm_X(j) / (1-Therm_X(j)) '' calculate natural log of thermistor resistance: lnR = LN(THERM_R(j)) '' use Steinhart & Hart equation to derive temperature: THERM(j) = (1/(YSI_44034_KA + YSI_44034_KB*lnR + YSI_44034_KC*lnR^3)) - 273.15 THERM_R(j)= THERM_R(j)/1000 Next j For j=7 To 22 '' calculate thermistor resistance from ratio and ref R: THERM_R(j) = THERM_REF_OHMS * Therm_X(j) / (1-Therm_X(j)) '' calculate natural log of thermistor resistance: lnR = LN(THERM_R(j)) '' use Steinhart & Hart equation to derive temperature: THERM(j) = (1/(KA + KB*lnR + KC*lnR^3)) - 273.15 THERM_R(j)= THERM_R(j)/1000 Next j For j=23 to 23 '' calculate thermistor resistance from ratio and ref R: THERM_R(j) = THERM_REF_OHMS * Therm_X(j) / (1-Therm_X(j)) '' calculate natural log of thermistor resistance: lnR = LN(THERM_R(j)) '' use Steinhart & Hart equation to derive temperature: THERM(j) = (1/(YSI_44034_KA + YSI_44034_KB*lnR + YSI_44034_KC*lnR^3)) - 273.15 THERM_R(j)= THERM_R(j)/1000 Next j For j=24 To 30 '' calculate thermistor resistance from ratio and ref R: THERM_R(j) = THERM_REF_OHMS * Therm_X(j) / (1-Therm_X(j)) '' calculate natural log of thermistor resistance: lnR = LN(THERM_R(j)) '' use Steinhart & Hart equation to derive temperature: THERM(j) = (1/(KA + KB*lnR + KC*lnR^3)) - 273.15 THERM_R(j)= THERM_R(j)/1000 Next j EndSub 'Main Program BeginProg 'Main Scan Scan(300,Sec,1,0) 'Default CR1000 Datalogger Battery Voltage measurement 'BattV' Battery(BattV) 'Default CR1000 Datalogger Wiring Panel Temperature measurement 'PTemp_C' PanelTemp(PTemp_C,250) 'Turn AM16/32 Multiplexer On PortSet(2,1) Delay(0,150,mSec) LCount=1 SubScan(0,uSec,10) 'Switch to next AM16/32 Multiplexer channel PulsePort(1,20000) 'ECHO Probe EC-5 measurement VW on the AM16/32 Multiplexer BrHalf(VW(LCount),3,mV2500,1,1,3,2500,False,10000,250,2.975,-0.4) LCount=LCount+3 NextSubScan 'Turn AM16/32 Multiplexer Off PortSet(2,0) Delay(0,150,mSec) 'Turn AM16/32 Multiplexer On PortSet(3,1) Delay(0,150,mSec) LCount_2=1 SubScan(0,uSec,30) 'Switch to next AM16/32 Multiplexer channel PulsePort(1,10000) 'Generic Single Ended Voltage measurements 'Therm_X()' on the AM16/32 Multiplexer BrHalf (Therm_X(LCount_2),1,mV2500,15,Vx2,1,2500,True,0,_60Hz,ThermMult(LCount_2),ThermOffs(LCount_2)) LCount_2=LCount_2+1 NextSubScan 'Turn AM16/32 Multiplexer Off PortSet(3,0) calc_thermistors() Delay(0,150,mSec) 'Call Data Tables and Store Data CallTable HrlySoil CallTable HrlyDiag CallTable HrlySoilRes NextScan SlowSequence Do If TimeIntoInterval (55,60,Min) Then Delay(1,10,Sec) IPAddress = IPInfo(3,0) HTTPGet(UpdateURL + IPAddress,UpdateURLresult,"") 'FTPResult=FTPClient ("snobold.ine.uaf.edu","ftpuser","AKS1bridge","HrlySoil","/BGE/Botanical_East_HrlySoil.dat",9,0,60,Min,-1008) 'FTPResult2=FTPClient ("snobold.ine.uaf.edu","ftpuser","AKS1bridge","HrlyDiag","/BGE/Botanical_East_HrlyDiag.dat",9,0,60,Min,-1008) 'FTPResult3=FTPClient ("snobold.ine.uaf.edu","ftpuser","AKS1bridge","HrlySoilRes","/BGE/Botanical_East_HrlySoilRes.dat",9,0,60,Min,-1008) EndIf Loop EndProg