Our full technical support staff does not monitor this forum. If you need assistance from a member of our staff, please submit your question from the Ask a Question page.


Log in or register to post/reply in the forum.

Delta-T ML3 Thetaprobes


CraigBaillie Nov 3, 2014 03:54 AM

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.


aps Nov 5, 2014 03:02 PM

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


benjamin@energy3.co.nz May 24, 2015 09:45 PM

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


benjamin@energy3.co.nz Jun 3, 2015 11:29 PM

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


MathiasMadsen_Uni_CPH Jun 19, 2017 02:27 PM

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?


hedde Oct 7, 2019 12:09 PM

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.

Log in or register to post/reply in the forum.