from machine import ADC, Pin
import utime
import math
import tm1637
from neopixel import NeoPixel
# Inicialización de los displays TM1637
tmverde = tm1637.TM1637(clk=Pin(1), dio=Pin(0))
tmrojo = tm1637.TM1637(clk=Pin(2), dio=Pin(3))
tmverde.brightness(2)
tmrojo.brightness(2)
# Configuración de los pines y constantes
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)
Conv = 3300 / 65535
Conv1 = 80 / 3300 # Conv1 = 100 / 3300
LED = Pin(15, Pin.OUT)
Relay = Pin(16, Pin.OUT)
LED.value(0)
Relay.value(0)
# Inicialización de la tira de LEDs Neopixel
num_pixels = 16
neopixel_pin = Pin(15, Pin.OUT)
pixels = NeoPixel(neopixel_pin, num_pixels)
# Función para calcular la temperatura con la ecuación Steinhart-Hart
def Temperature(RawValue):
c1 = 0.001129148
c2 = 0.000234125
c3 = 0.0000000876741
R1 = 10000.0
ADC_Res = 65535.0
R2 = R1 / ((ADC_Res / RawValue) - 1)
T = math.log(R2)
Tmp = 1.0 / (c1 + (c2 + (c3 * T * T)) * T)
Temp = Tmp - 273.15
return Temp
# Función para actualizar el color de los LEDs Neopixel
def update_neopixels(temp):
if 36 <= temp < 37:
color = (0, 255, 0) # Verde
elif 37 <= temp < 38:
color = (255, 165, 0) # Naranja
elif temp >= 39:
color = (255, 0, 0) # Rojo
else:
color = (0, 0, 255) # Azul para temperaturas fuera de rango
for i in range(num_pixels):
pixels[i] = color
pixels.write()
while True:
ValorPot = SetPoint.read_u16()
TempSP = Conv * ValorPot
SetTemp = 0 + TempSP * Conv1
tmverde.number(int(SetTemp))
V = AnalogIn.read_u16()
RoomTemp = Temperature(V)
tmrojo.number(int(RoomTemp))
update_neopixels(RoomTemp)
if RoomTemp < SetTemp:
Relay.value(1)
LED.value(1)
else:
Relay.value(0)
LED.value(0)
utime.sleep(1)