from machine import Pin, UART
import time
# Configuración de pines
pir_sensor = Pin(12, Pin.IN) # Sensor PIR en GPIO12
ldr_sensor = Pin(34, Pin.IN) # Sensor LDR en GPIO34 (modo digital)
led = Pin(5, Pin.OUT) # LED (luminaria) en GPIO5
interruptor_led = Pin(14, Pin.IN, Pin.PULL_UP) # Interruptor para simular fallo del LED (GPIO14)
# Configuración del UART para el monitor serial (comunicación a 115200 baudios)
uart = UART(1, baudrate=115200, tx=17, rx=16) # Configura el puerto serial
# Umbral para determinar si es de noche o de día (valor digital)
umbral_luz_baja = 1 # Noche (luz baja, LDR HIGH)
umbral_luz_alta = 0 # Día (luz alta, LDR LOW)
# Función para leer los sensores y controlar el LED
def leer_sensores():
# Leer el valor del PIR (movimiento)
valor_movimiento = pir_sensor.value()
# Leer el valor del LDR (luz ambiental, modo digital)
valor_luz = ldr_sensor.value() # Lee el valor digital (0 o 1)
print(f"Valor LDR: {valor_luz}") # Depuración del valor LDR
# Verificar si el interruptor está encendido o apagado (simula fallo del LED)
if interruptor_led.value() == 0: # Si el interruptor está en 0, el LED está dañado
print("Falla en el sistema: LED dañado")
print("Falla en el sistema")
return
# Determinar si es de día o de noche basado en el LDR
if valor_luz == umbral_luz_baja:
print("Es de noche (LDR HIGH)")
elif valor_luz == umbral_luz_alta:
print("Es de día (LDR LOW)")
# Si es de noche (luz baja) y hay movimiento
if valor_luz == umbral_luz_baja and valor_movimiento == 1: # Si es de noche y hay movimiento
led.on() # Encender el LED
print("Movimiento detectado y es de noche, luces encendidas")
print("Datos guardados en la nube") # Simulación de datos enviados a la nube
else:
led.off() # Apagar el LED
print("Luces apagadas") # Simulación de datos no cargados
# Función principal
while True:
leer_sensores() # Activar control automático (sensor PIR y LDR)
time.sleep(2) # Esperar 2 segundos antes de la siguiente lectura