#https://klipit.in/dpj79004
from machine import ADC, Pin
import time
import math
MAX_U16 = 2**16-1
VREF = 3.3
R0 = 9.64 # kOhm
adc = ADC(Pin(26))
t0 = time.ticks_ms()
def voltage_to_resistance(V, VREF, R0):
R = R0/(VREF/V-1)
return R
def ntc_resistance_to_temperature(R):
R25 = 10.000
T0 = 273.15
A1 = 0.003354016434680530000
B1 = 0.000256985018020000000
C1 = 0.000002620130670900000
D1 = 0.00000006383090799800
lnR = math.log(R/R25)
invT = A1 + B1*lnR + C1*lnR**2 + D1*lnR**3
return 1/invT-T0
BUFFER_SIZE = 20
buffer = [0 for x in range(BUFFER_SIZE)]
ix = 0
ix_ = 0
while True:
val = adc.read_u16()/MAX_U16*100
val_V = VREF*adc.read_u16()/MAX_U16
val_R = voltage_to_resistance(val_V, VREF, R0)
val_T = ntc_resistance_to_temperature(val_R)
buffer[ix] = val_T
ix = ix+1
ix_ = ix_+1
ix = divmod(ix, BUFFER_SIZE)[1]
if ix_<BUFFER_SIZE:
T_avg = sum(buffer)/ix_
else:
T_avg = sum(buffer)/BUFFER_SIZE
#print(f'{T_avg:5.1f}',end='')
#print('\b'*5,end='')
print(T_avg)
time.sleep(0.1)
Loading
pi-pico-w
pi-pico-w