'''Simulare in Wokwi un sensore di temperatura basato su termistore NTC
opportunamente interfacciato alla board ESP32.
1. Aggiornare il valore periodicamente solo mentre si tiene premuto un tasto.
2. Aggiungere un led che lampeggia una volta ad ogni nuovo valore mostrato.'''
'''NOTE:
• Non esiste in Wokwi il ‘semplice’ termistore.
• Il componente ‘Analog Temperature Sensor (NTC) è quello che più si avvicina
alle specifiche richieste ed è composto da un termistore in serie ad una
resistenza Rs. --->PARTITORE DI TENSIONE!!!
➢ Il termistore è collegato al GND, Rs al pin Vcc
➢ Il termistore è caratterizzato da β = 3950 K, T0 = 25 °C, R0 = 10 kΩ
➢ La resistenza Rs posta in serie è uguale a 10 kΩ'''
from machine import Pin, ADC
from math import log #logaritmo naturale
from time import sleep
B=3950 #temperatura caratteristica espressa in Kelvin
T0=298.15 #temperatura di riferimento in Kelvin
R0=10e3 #resistenza alla temperatura di riferimento
Rs=10e3 #resistenza in serie
'''DA KELVIN A CELSIUS -273.15 !!!'''
#Il termistore legge la temperatura del corpo ma restituisce un valore digitale,
#per poterlo utilizzare lo convertiamo tramite l'ADC
sensor=ADC(13) #pin configurato
button=Pin(12, Pin.IN)
led=Pin(33, Pin.OUT)
while True:
if button.value()==1: #controllo se il pulsante è premuto
d_val=sensor.read() #lettura del valore, ADCout
#Conversione del valore digitale attraverso la formula Vm=ACDout*Vref/((2^k)-1)
#la scheda ESP32 ha una risoluzione a 12 bit, perciò 2^12-1=4095
Vm=d_val*3.3/4095
print("Valore digitale:", d_val, "Valore analogico:", Vm, "V")
'''Il termistore è un sensore di temperatura, come la otteniamo?
A partire dalla tensione misurata Vm sfruttiamo il partitore di
tensione per ricavare la resistenza che comprare nella relazione
caratteristica del termistore R-T: R=R0*e^β(1/T-1/T0). Risolvendola
poi considerando come incognita T troviamo la temperatura!'''
ln=log(Vm/(3.3-Vm))
T_k=1/ (1/T0 + ln/B)
T_c=T_k-273.15
#Lampeggio del LED ad ogni valore mostrato
led.value(1) #accensione
sleep(0.2) #ritardo
led.value(0) #spegnimeto
sleep(0.8) #ritardo
print("La temperatura misurata è:", T_c, "°C")
print()
sleep(1) #acquisisci un nuovo dato ogni secondo