from machine import ADC, Pin
import utime
import math
import tm1637
import neopixel
# Configuración de Neopixel (16 LEDs)
NUM_LEDS = 16
PIN_NEOPIXEL = 14 # Usamos el GPIO14 para controlar los Neopixels
np = neopixel.NeoPixel(Pin(PIN_NEOPIXEL), NUM_LEDS)
#LCD.lcd_init()
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)
# Calculo de la temperatura con la ecuación Steinhart-Hart
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)
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 los Neopixels según la temperatura
def update_neopixel_color(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, 0) # Apagar si está fuera de los rangos
# Aplicar el color a todos los LEDs Neopixel
for i in range(NUM_LEDS):
np[i] = color
np.write() # Actualizar los Neopixels
# Bucle principal
while True:
# Leer el valor del potenciómetro (SetPoint)
ValorPot = ADC.read_u16(SetPoint)
TempSP = Conv * ValorPot
SetTemp = 0 + TempSP * Conv1
tmverde.number(int(SetTemp))
# Leer la temperatura ambiente del sensor
V = AnalogIn.read_u16()
RoomTemp = Temperature(V)
tmrojo.number(int(RoomTemp))
# Actualizar los Neopixels en función de la temperatura ambiente
update_neopixel_color(RoomTemp)
# Control del relé y el LED de estado
if RoomTemp < SetTemp:
Relay.value(1)
LED.value(1)
else:
Relay.value(0)
LED.value(0)
utime.sleep(1)