from machine import ADC, Pin
import utime
import tm1637
import math

# Inicialización del sensor y las pantallas TM1637
AnalogIn = ADC(0)  # gp26 Entrada del sensor TMP36 o LM35.
SetPoint = ADC(1)  # gp27 Entrada voltaje de ajuste del setpoint de temperatura (Pot 5 ó 10 kOhm).
tmverde = tm1637.TM1637(clk=Pin(1), dio=Pin(0))
tmrojo = tm1637.TM1637(clk=Pin(2), dio=Pin(3))
tmverde.brightness(2)
tmrojo.brightness(2)

# Coeficientes de conversión ajustados
Conv = 3300 / 65535
min_temp = -24  # Temperatura mínima del setpoint
max_temp = 80   # Temperatura máxima del setpoint
Conv1 = (max_temp - min_temp) / 3300  # Coeficiente ajustado para el rango de temperaturas

# Configuración del LED y el relé
LED = Pin(15, Pin.OUT)
Relay = Pin(16, Pin.OUT)
LED.value(0)
Relay.value(0)

# Coeficiente Beta del termistor
BETA = 3950

while True:
    # Lectura y conversión del valor del potenciómetro
    ValorPot = SetPoint.read_u16()
    TempSP = Conv * ValorPot
    SetTemp = min_temp + TempSP * Conv1  # Ajuste de la fórmula para el rango de temperaturas
    tmverde.number(int(SetTemp))

    # Lectura del valor analógico del termistor
    analogValue = AnalogIn.read_u16()
    # Conversión a temperatura en grados Celsius
    celsius = 1 / (math.log(1 / (65535.0 / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15
    tmrojo.number(int(celsius))

    # Control del relé y el LED basado en la comparación de la temperatura
    if celsius < SetTemp:
        Relay.value(1)
        LED.value(1)
    else:
        Relay.value(0)
        LED.value(0)

    utime.sleep(1)
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT
4-Digit Display
4-Digit Display
NOCOMNCVCCGNDINLED1PWRRelay Module