Hello,
I have recently bought several Delta-T ML3 soil moisture probes and have noticed the new model has the ability to measure soil temperature using an inbuilt thermistor. I am using CR1000's.
If anybody has used these and has an example of a program for CRBasic, or any suggestions, I'd really appreciate it.
Thanks,
Craig.
After contact between you, us and Delta-T, I can give you the code that should allow you to read the thermistor they use. Please add this into your existing program amending the channels to suit. This code assumes the ML3 main power supply is turned off when you make this measurement. It may give you a sensible measurement with the sensor powered on (due to the way we excite the sensor) but I cannot guarantee this. If you need to leave the sensor on you will need to read the Delta-T manual to work out how to remove the errors caused by sensor current flowing in the signal/power return wire.
This code that will measure the thermistor and convert it to temperature. The Steinhart-hart equation is used to do the conversion from resistance to temperature. This will normally fit most thermistor characteristics to better than +/-0.02 deg C (which is better than a polynomial or stepwise linearization). The thermistors Delta-T use are only accurate to about +/-0.3 deg C at room temperature.
----------
'CR1000 Series Datalogger
'Demonstration of the implementation of the Steinhart-Hart Equation
'For a thermistor measurement (Delta-T ML3 thermistor)
'Using this code you can use custom coefficients on a per sensor basis.
'This example assumes the thermistor is connected between the analogue input and ground
'A precision (0.1%) 10k resistor is used between the analogue input and Vx1
'Declare Variables
Public Temp_thermistor
Dim lnRT, RTherm, V_Vx
'Thermistor constants fitted for -10, 25 and 55 deg C points
Const SHHCoeffA = 7.8480453e-4
Const SHHCoeffB = 2.6905669e-4
Const SHHCoeffC = 1.1660856e-7
'Main Program
BeginProg
Scan (1,Sec,0,0)
'Measure the sensor as a half-bridge (note in this example with 50 Hz rejection) and default settling
BrHalf (V_Vx,1,Autorange,1,Vx1,1,2500,True,0,_50Hz,1.0,0)
'Calculate the thermistor resistance using a 10k precision reference resistor connect to Vx1
RTherm=10000*V_Vx/(1-V_Vx) ' - known cable resistance ... if you require that accuracy
'Calculate the natural log of the resistance:
lnRT=LOG(RTherm)
'Apply Steinhart and Hart equation and convert to deg C in one step:
Temp_thermistor=1/( SHHCoeffA + SHHCoeffB*lnRT + SHHCoeffC*(lnRT^3)) - 273.15
NextScan
EndProg
Hello,
Would you have the same king of program for a CR211X, including soil moisture as well? I guess the function Therm109 is suitable for the Temperature reading? I am struggling with the soil moisture conversion reading.
Thanks for your help
Hi,
I have figured out how to measure the moisture, but I am still struggling with the temperature. Is it possible to do a half bridge with the CR200 working with the ML3 ?
Thank you for your help
I don't fully understand the wiring of the example above.
The grey wire from the SM300 is connected to the analog channel of choice; is it then looped to GND or how is "thermistor is connected between the analogue input and ground" to be understood? Or is it just to be understood, that the built in thermistor of the SM300 is between the GND and grey wire/analog input?
Hi,
I've just finish with connecting 5 ML3 on a CR1000X. As the temperature measurement through a 4 wire half-bridge use 2 diffential entries, I had to buy a CDM-A116 just for ML3 acquisition.
As I'm using arrays for acquisition, all the wiring are to be sequential on the entries.
The excitation for the 5 sounds is on CDM's VX1 :
Here follow the wiring for T :
sound #1:
H1: red cable from Excitation CDM-VX1 + Reference resistance 10kOhm
L1: Reference resistance 10kOhm + grey cable jump to H2
H2 grey jump to L1 + grey cable from ML3 (Temperature thermistor)
L2 : brown cable from ML3 (ground 0V)
VX1 : red cable distributed towards : H1, H3, H5, H7, H9
and so on for all 4 other sondes from H3 to L10
Wiring for Water Volume Content WVC:
sonde #1:
H11 : blue wire from ML3 (soil moiture HI)
L11: black wire from ML3 (soil moisture LO)
and so on for sondes 2 to 5 on H12 to L15
the program is :
Const nbML3 = 5 ' Nombre de sondes ML3 ' Les sondes ML3 (groupees par nbML3) Public ML3_T_V1sV2(nbML3) As Float ' sondes ML3 Temperature: mesure du rapport V1/V2 par le demi-pont Public ML3_T_R(nbML3) As Float ' Resistance calculee Public ML3_T_LogR(nbML3) As Float ' LOG de la Resistance en kOhm calculee Public ML3_T(nbML3) As Float ' Temperature calculee Public ML3_VWC_mV(nbML3) As Float ' Tension de sortie de mesure de teneur en eau (mesure brute) Public ML3_VWC_V(nbML3) As Float ' Tension de sortie de mesure de teneur en eau (mesure brute) Public ML3_SRI(nbML3) As Float ' SRI = racine(epsilon) Public ML3_RDP(nbML3) As Float ' RDP Relative Dielectric Permittivity Public ML3_VWC(nbML3) As Float ' VWC Volumetric Water Content Dim MultML3(nbML3)={1,1,1,1,1} ' Private array, all values to 1 Dim OffsML3(nbML3)={0,0,0,0,0} ' Private array, all values to 0 Dim i ' loop variable '-------------------------------------------------------------------------- Constantes 'Thermistor LUT regressed with a polynomial fct from ML3 User Manual p45 ' y = -0.1421x3 + 3.0604x2 - 38.42x + 98.967 ' T = -0.1421 LN^3(R) + 3.0604 LN^2(R) - 38.42 LN(R) + 98.967 avec R en kOhm Const REF_R As Float = 10000 ' Ohm Reference resistance [ohm] ( 10 kOhm precision garantie 0.01% +-1ohm) Const cstTA As Float = -0.1421 ' polynomial coefficients for ML3 Temperature Const cstTB As Float = 3.0604 Const cstTC As Float = -38.420 Const cstTD As Float = 98.967 ' Coef polynomiaux de la formule de convesion des Volts en SRI (voir doc ML3 p22) Const cstVA As Float = 68.017 Const cstVB As Float = -184.780 Const cstVC As Float = 183.440 Const cstVD As Float = -73.578 Const cstVE As Float = 6.303 Const cstVF As Float = 6.175 Const cstVG As Float = 1.000 ' Coef de conversion SRI -> VWC (doc ML3 p22) Const a0 As Float =1.6 Const a1 As Float =8.38 Units ML3_T_V1sV2=mV/mV Units ML3_T_R=Ohm Units ML3_T_LogR=Log_kOhm Units ML3_T=DegC Units ML3_VWC_mV=mV Units ML3_VWC_V=V 'Units ML3_SRI=unitless Units ML3_VWC=m3/m3 DataTable(TableRaw,True,-1) 'Main Program BeginProg 'Main Scan Scan(scanInterval,Sec,3,0) ' Un scan chaque scanInterval secondes , 2019/09/26 bufferOption 1 -> 3 (conseils Manuel CDM) ' Alimente la sonde ML3 pour la mesure de WVC CDM_SW12(CDM_A116, 1, 1, True, 0) ' Alimente le tensiometre (A tester pour voir si l'allumage intermittent influe la mesure) SW12(SW12_2,True,0) '-------------------------------------------------------------------------- ML3 VWC 'ML3 Water Content measurement ' ' Pour eviter les interferences de mesures entre VWC et T il faudra couper ' l'alim de la sonde pendant la mesure de Temperature ' CDM_SW12(CDM_A116, 1, 1, True, 0) a ete fait en debut de scan ' On laisse l'alimentation se stabiliser 1 s avant de faire la mesure (cf doc ML3) Delay(0,1,sec) ' ' nbML3 sondes branchees depuis HL 11 (implicitement HL 12 13 14 et 15) CDM_VoltDiff(CDM_A116,1,ML3_VWC_mV(),nbML3,Autorange,11,True,500,50,MultML3(),OffsML3()) For i = 1 To nbML3 ' boucle sur les nbML3 sondes ML3 pour le calcul de VWC ML3_VWC_V(i)=ML3_VWC_mV(i)/1000 ' mV -> V 'If ML3_VWC_V(i)<0 Then ML3_VWC_V(i)=0 ' Evite les tensions negatives (teneur en eau nulle) ' Conversion polynomiale constructeur (cf manuel p22) tension -> SRI ML3_SRI(i)= cstVA*(ML3_VWC_V(i))^6+ _ cstVB*(ML3_VWC_V(i))^5+ _ cstVC*(ML3_VWC_V(i))^4+ _ cstVD*(ML3_VWC_V(i))^3+ _ cstVE*(ML3_VWC_V(i))^2+ _ cstVF*(ML3_VWC_V(i))+ _ cstVG ' Conversion constructeur (cf manuel p22) SRI -> VWC (Volumetric Water Content) ML3_RDP(i)= ML3_SRI(i)^2 ML3_VWC(i)= (ML3_SRI(i)- a0 )/a1 ' If ML3_VWC(i)<0 Then ML3_VWC(i)=0 ' Evite les teneur en eau negatives Next i ' Fin de boucle sur les nbML3 sondes ML3 pour le calcul de VWC '-------------------------------------------------------------------------- ML3 T ' Switch off ML3 sensor alimentation for Temperature measurement on next scan CDM_SW12(CDM_A116, 1, 1, False, 0) 'Generic Half Bridge, 4 Wire measurements on CDM-A116 with CPI address 1 CDM_BrHalf4W(CDM_A116,1,ML3_T_V1sV2(),nbML3,Autorange,Autorange,1,1,nbML3,5000,True,True,500,50,MultML3(),OffsML3()) For i = 1 To nbML3 ' boucle sur les nbML3 sondes ML3 pour le calcul de T ML3_T_R(i) = REF_R * ML3_T_V1sV2(i) ' - known cable resistance ... if you require that accuracy ML3_T_LogR(i) = LOG(ML3_T_R(i)/1000) ML3_T(i) = cstTA *ML3_T_LogR(i)^3 + cstTB*ML3_T_LogR(i)^2 + cstTC*ML3_T_LogR(i) + cstTD Next i ' Fin de boucle sur les nbML3 sondes ML3 pour le calcul de T CDM_SW12(CDM_A116, 1, 1, False, 0) ' economies, on coupe l'alim des ML3 entre 2 scans NextScan EndProg
The T measurement require the alimentaion to be switch off. I'm not sure my program is OK with pipeline mode.