(DIR) Return Create A Forum - Home
       ---------------------------------------------------------
       mc-Things
 (HTM) https://mcthings.createaforum.com
       ---------------------------------------------------------
       *****************************************************
 (DIR) Return to: mc-Module
       *****************************************************
       #Post#: 2182--------------------------------------------------
       NTC Thermistor Demo
       By: AndrewPratt Date: December 11, 2017, 1:32 pm
       ---------------------------------------------------------
       I am having a problem trying to get the Hackster thermistor demo
       working that is outlined here
       (
 (HTM) https://www.hackster.io/mc-Things/iot-ntc-thermistor-temps-using-thethings-io-7f6934)
       I ordered the same USP10972 thermistor and believe i have the
       wiring correct but the values I'm getting out fluctuate a lot
       and are never anywhere near valid. I also get a lot of not a
       number errors so there's obviously something wrong! The hackster
       description calls for a 100 ohm resistor but the one used in the
       image is a 10k...I've tried both but neither solves the issue.
       Ultimately I want to get it working on the 120 and then port it
       to the 205 so that I can read water temp's outside under the
       ice.
       Here's the code I'm using to push the data to Losant. I also
       have the onboard temp and battery being pushed as well but I've
       remove that from the code below to keep it on topic.
       Class Thermistor
       
       Const USP10972_BETA As Integer = 3892
       Const USP10972_R25 As Integer = 10000 '10kOhm
       Const USP10972_DIVIDER_R1 As Integer = 10000 '10kOhm
       
       Shared USP10972 As NTCTermistor
       
       Shared Event Boot()
       USP10972_DIVIDER_ENABLE = False
       USP10972 = New NTCTermistor(USP10972_BETA, USP10972_R25)
       
       End Event
       
       Shared Event measureTemperature() RaiseEvent Every 10
       Seconds
       Dim LosantTopic As String = "losant/deviceID/state"
       Dim losantPayload As Json = New Json
       
       USP10972_DIVIDER_ENABLE = True
       
       Device.EnableOpamp()
       
       Thread.Sleep(10000)
       
       Dim thermistorResistance As Float = USP10972_DIVIDER_R1
       * (1 / ((Device.BatteryVoltage().ToFloat/
       USP10972_VOLTAGE.ToFloat) - 1))
       
       USP10972_DIVIDER_ENABLE = False
       
       Device.DisableOpamp()
       
       Dim tempPstring As String =
       USP10972.TemperatureCFromResistance(thermistorResistance).ToStri
       ng
       
       Dim tempPJson As Json = New Json
       tempPJson.Add("probeTemp", tempPstring)
       
       losantPayload.Add("data", tempPJson)
       
       Lplan.Publish(LosantTopic, losantPayload.ToListOfByte)
       
       End Event
       End Class
       #Post#: 2183--------------------------------------------------
       Re: NTC Thermistor Demo
       By: mc-Josh Date: December 11, 2017, 2:50 pm
       ---------------------------------------------------------
       Andrew,
       What are USP10972_VOLTAGE and USP10972_DIVIDER_ENABLE defined
       as?  USP10972_DIVIDER_ENABLE is the pin that turns on the
       voltage to the voltage divider and USP10972_VOLTAGE is the
       voltage read from the divider. This voltage is then used to
       calculate the resistance of the thermistor which corresponds to
       a temperature. Can you show us how you have connected the 10k
       resistor and thermistor to the mod120?
       Thanks,
       Josh
       #Post#: 2184--------------------------------------------------
       Re: NTC Thermistor Demo
       By: AndrewPratt Date: December 11, 2017, 3:54 pm
       ---------------------------------------------------------
       sorry I thought I'd included those. The wiring is the same as
       the demo only I had wire leads added to the mc120 so that we
       could prototype other things more easily.
       Define PinMode Pin0 As AnalogInput Alias USP10972_VOLTAGE
       Define PinMode Pin6 As DigitalOutput Alias
       USP10972_DIVIDER_ENABLE
       #Post#: 2185--------------------------------------------------
       Re: NTC Thermistor Demo
       By: mc-Josh Date: December 11, 2017, 4:14 pm
       ---------------------------------------------------------
       Andrew,
       It looks like you have the correct connections but that they may
       be intermittent since they are not soldered. Can you solder the
       connections to the thermistor and the resistor? Also, can you
       measure the voltage being provided to the resistor divider and
       the voltage at the sensor and ensure that the corresponding
       voltage is correct for the temperature? We have made quite a few
       of these and haven't had any issues.
       Thanks,
       Josh
       #Post#: 2186--------------------------------------------------
       Re: NTC Thermistor Demo
       By: AndrewPratt Date: December 11, 2017, 4:23 pm
       ---------------------------------------------------------
       So when I measure the 0 and 6 pin's and measure the voltage as I
       dip the probe in hot and cold water it does change as you'd
       expect it would.
       This is the tempprobe code that I added to the project...
       Class NTCTermistor
       Private beta As Integer
       Private R25 As Integer
       Public Sub New(betaIn As Integer, R25In As Integer)
       'set Beta value
       beta = betaIn
       'Set R25 resistance value
       R25 = R25In
       End Sub
       Public Function TemperatureFromResistance(resistance As
       Float) As Float
       'returns temperature in Kelvin from resistance of
       thermistor using Beta parameter equation
       Dim temp1 As Float = -1 * beta.ToFloat() / 298.15
       Dim temp2 As Float = resistance / (R25.ToFloat() *
       temp1.Exp())
       Return (beta / temp2.Log())
       End Function
       Public Function TemperatureFFromResistance(resistance As
       Float) As Float
       'returns temperature in Fahrenheit from resistance of
       thermistor
       Return (TemperatureFromResistance(resistance) * (9 / 5))
       - 459.67
       End Function
       Public Function TemperatureCFromResistance(resistance As
       Float) As Float
       'returns temperature in Celcuis from resistance of
       thermistor
       Return TemperatureFromResistance(resistance) - 273.15
       End Function
       End Class
       #Post#: 2187--------------------------------------------------
       Re: NTC Thermistor Demo
       By: AndrewPratt Date: December 12, 2017, 11:09 am
       ---------------------------------------------------------
       Update. I decided that since I only had 1 temp probe attached to
       the 120 I didn't need to use the resistor and pin's 0 & 6 so I
       swapped it over to the ground and pin7 approach with the
       internal pullup and it now works perfectly. This is the new
       code.
       Define PinMode Pin7 As AnalogInputPullUp Alias USP10972_VOLTAGE
       Class ThermistorTheThings
       
       Const USP10972_BETA As Integer = 3892
       Const USP10972_R25 As Integer = 10000 '10kOhm
       Const USP10972_DIVIDER_R1 As Integer = 100000 '100kOhm
       
       Shared USP10972 As NTCTermistor
       
       Shared Event Boot()
       USP10972 = New NTCTermistor(USP10972_BETA, USP10972_R25)
       End Event
       
       Shared Event measureTemperature() RaiseEvent Every 10
       Seconds
       Device.EnableOpamp()
       Thread.Sleep(10000)
       Dim thermistorResistance As Float = USP10972_DIVIDER_R1
       * (1 / ((Device.BatteryVoltage().ToFloat/
       USP10972_VOLTAGE.ToFloat) - 1))
       Device.DisableOpamp()
       
       Dim battShort As Short = Device.BatteryVoltage()
       Dim battFloat As Float = battShort / 1000
       Dim battString As String = battFloat.ToString()
       Dim tempTMP102string As String =
       Temperature.GetTemp().ToString
       Dim tempPstring As String =
       USP10972.TemperatureCFromResistance(thermistorResistance).ToStri
       ng
       
       
       Dim LosantTopic As String = "losant/myDeviceID/state"
       Dim losantPayload As Json = New Json
       Dim mcJson As Json = New Json
       
       mcJson.Add("probeTemp", tempPstring)
       mcJson.Add("temperature", tempTMP102string)
       mcJson.Add("batteryVoltage", battString)
       
       losantPayload.Add("data", mcJson)
       Lplan.Publish(LosantTopic, losantPayload.ToListOfByte)
       End Event
       End Class
       #Post#: 2188--------------------------------------------------
       Re: NTC Thermistor Demo
       By: AndrewPratt Date: December 12, 2017, 11:14 am
       ---------------------------------------------------------
       Now that I have it working on the mc120 how do you suggest I
       port it to the 205 given that the 205 doesn't seem to support
       the AnalogInputPullUp?
       #Post#: 2189--------------------------------------------------
       Re: NTC Thermistor Demo
       By: mc-Josh Date: December 12, 2017, 2:05 pm
       ---------------------------------------------------------
       Andrew,
       You don't need the AnalogInputPullUp if you are providing the
       pullup yourself. The CWF1B104F3950 thermistor does not need an
       external pullup since it uses the 100k pullup on the mod120. The
       USP10972 uses the 10k pullup that you added to the circuit.
       Josh
       #Post#: 2190--------------------------------------------------
       Re: NTC Thermistor Demo
       By: AndrewPratt Date: December 12, 2017, 2:45 pm
       ---------------------------------------------------------
       Thanks Josh I now have it working on the Demo 205 as well using
       the following.
       Define PinMode Pin0 As AnalogInput Alias USP10972_VOLTAGE
       Define PinMode Pin6 As DigitalOutput Alias
       USP10972_DIVIDER_ENABLE
       Class ThermistorTheThings
       
       Const USP10972_BETA As Integer = 3892
       Const USP10972_R25 As Integer = 10000 '10kOhm
       Const USP10972_DIVIDER_R1 As Integer = 10000 '10kOhm
       
       Shared USP10972 As NTCTermistor
       
       Shared Event Boot()
       USP10972_DIVIDER_ENABLE = False
       USP10972 = New NTCTermistor(USP10972_BETA, USP10972_R25)
       End Event
       
       Shared Event measureTemperature() RaiseEvent Every 1 Hours
       USP10972_DIVIDER_ENABLE = True
       Device.EnableOpamp()
       Thread.Sleep(10000)
       Dim thermistorResistance As Float = USP10972_DIVIDER_R1
       * (1 / ((Device.BatteryVoltage().ToFloat/
       USP10972_VOLTAGE.ToFloat) - 1))
       USP10972_DIVIDER_ENABLE = False
       Device.DisableOpamp()
       
       Dim battShort As Short = Device.BatteryVoltage()
       Dim battFloat As Float = battShort / 1000
       Dim battString As String = battFloat.ToString()
       Dim tempTMP102string As String =
       Temperature.GetTemp().ToString
       Dim tempPstring As String =
       USP10972.TemperatureCFromResistance(thermistorResistance).ToStri
       ng
       
       
       Dim LosantTopic As String = "losant/myDeviceID/state"
       Dim losantPayload As Json = New Json
       Dim mcJson As Json = New Json
       
       mcJson.Add("probeTemp", tempPstring)
       mcJson.Add("temperature", tempTMP102string)
       mcJson.Add("batteryVoltage", battString)
       
       losantPayload.Add("data", mcJson)
       Lplan.Publish(LosantTopic, losantPayload.ToListOfByte)
       End Event
       End Class
       #Post#: 2192--------------------------------------------------
       Re: NTC Thermistor Demo
       By: mc-Josh Date: December 13, 2017, 9:51 am
       ---------------------------------------------------------
       That is great, what was the root of the problem?
       Thanks,
       Josh
       *****************************************************
 (DIR) Next Page