import time
import board
import analogio
import math
# --- Állandók ---
VREF = 3.3 # ADC referenciafeszültség (V)
RA = 10000.0 # felső ellenállás: 10 kΩ
T25 = 298.15 # 25 °C = 298.15 K
B25_85 = 3977.0 # B-állandó (K)
N_MAX = 4095.0 # 12 bites ADC max érték
# --- ADC inicializálás ---
# Az osztó közös pontja az A0 (GP26) lábra menjen!
adc = analogio.AnalogIn(board.A0)
def read_adc_12bit():
#CircuitPython: adc.value 0..65535
#12 bithez: jobbra shift 4 bittel -> 0..4095
return adc.value >> 4
def calc_rb_from_n(n):
# R_B = R_A * N / (Nmax - N)
if n <= 0 or n >= N_MAX:
return None
return RA * n / (N_MAX - n)
def calc_temperature_k(rb):
# T = 1 / ( 1/T25 + (1/B) * ln(RB/RA) ) T Kelvinben.
return 1.0 / ( (1.0 / T25) + (1.0 / B25_85) * math.log(rb / RA) )
def measure_and_print():
# egy kis átlagolás a zaj csökkentésére
samples = 16
acc = 0
for _ in range(samples):
acc += read_adc_12bit()
time.sleep(0.002)
n = acc / samples
rb = calc_rb_from_n(n)
if rb is None:
print("ADC érték érvénytelen (túl közel 0-hoz vagy 3.3 V-hoz).")
return
# feszültség a közös ponton
v_adc = VREF * n / N_MAX
# hőmérséklet számítása
t_k = calc_temperature_k(rb)
t_c = t_k - 273.15
print("----- Mérési eredmény -----")
print("ADC N = {:.1f} / 4095".format(n))
print("U_ADC = {:.3f} V".format(v_adc))
print("R_therm (RB) ≈ {:.1f} ohm (≈ {:.2f} kΩ)".format(rb, rb/1000.0))
print("T ≈ {:.2f} K (≈ {:.2f} °C)".format(t_k, t_c))
print("----------------------------")
print()
print("Termisztor mérés indul.")
print("RA = 10 kΩ, B = 3977 K, T25 = 298.15 K")
print("Nyomj ENTER-t a soros terminálban minden egyes méréshez!")
print()
while True:
input() # blokkol, amíg a user nem küld sort
measure_and_print()