from machine import ADC, Pin
import time
import math
# Configuración de pines
ntc = ADC(Pin(28)) # Pin para NTC, GP28 es ADC2
ldr = ADC(Pin(27)) # Pin para LDR, GP27 es ADC1
led = Pin(15, Pin.OUT) # Pin para LED, GP15
# Definir los umbrales de temperatura y luz
TEMP_UMBRAL = 30 # Temperatura en grados Celsius
LUZ_UMBRAL = 30000 # Umbral de luz en lux (valor ADC aproximado)
def leer_temperatura(adc):
"""Lee y convierte el valor del ADC del NTC a temperatura en grados Celsius."""
valor_adc = adc.read_u16()
voltaje = valor_adc * 3.3 / 65535
# Verificación para evitar división por cero
if voltaje > 0:
resistencia = 10000 * (3.3 / voltaje - 1) # Resistencia del NTC
if resistencia > 0: # Asegurar que la resistencia es positiva antes de usar log
temperatura = 1 / (1 / (25 + 273.15) + (1 / 3950) * math.log(resistencia / 10000)) - 273.15
else:
temperatura = -273.15 # Valor de error si la resistencia calculada es no válida
else:
temperatura = -273.15 # Valor de error si el voltaje es cero
return temperatura
def leer_luz(adc):
"""Lee el valor del ADC del LDR."""
return adc.read_u16()
# Bucle principal de monitoreo
while True:
temperatura_c = leer_temperatura(ntc)
valor_adc_ldr = leer_luz(ldr)
# Mostrar lecturas con diagnóstico adicional
print("Temperatura: {:.2f} °C, Luz: {}".format(temperatura_c, valor_adc_ldr))
# Evaluar condiciones y activar alerta
if temperatura_c > TEMP_UMBRAL or valor_adc_ldr > LUZ_UMBRAL:
led.value(1) # Enciende el LED si se supera algún umbral
else:
led.value(0) # Apaga el LED si no se supera ningún umbral
# Esperar antes de la siguiente lectura
time.sleep(1)