from machine import I2C, Pin
from pico_i2c_lcd import I2cLcd
from time import sleep, ticks_ms, ticks_diff
# Configuración del LCD
I2C_ADDR = 0x27 # Dirección I2C del LCD
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16) # LCD con 2 líneas y 16 columnas
# Configuración del sensor PIR
pir_sensor = Pin(2, Pin.IN) # PIR conectado al pin GP2
# Configuración del LED
led = Pin(3, Pin.OUT) # LED conectado al pin GP3
led.off() # Asegurarse de que el LED inicie apagado
# Configuración del botón
boton = Pin(4, Pin.IN, Pin.PULL_UP) # Botón conectado al pin GP4
# Inicializar variables
contador = 0
ultimo_boton_presionado = 0 # Para controlar el debounce del botón
# Mensaje de presentación
lcd.clear()
lcd.putstr("Monitoreo de\npersonas:")
sleep(2)
lcd.clear()
lcd.putstr("Empresa\nChileTech")
sleep(2)
# Función para mostrar mensajes en el LCD
def mostrar_mensaje(linea1, linea2=""):
"""Actualiza el LCD con un mensaje de dos líneas."""
lcd.clear()
lcd.putstr(f"{linea1}\n{linea2}")
# Bucle principal
while True:
# Monitorear el estado del botón
if boton.value() == 0: # Si el botón es presionado
tiempo_actual = ticks_ms()
# Control de debounce para evitar múltiples pulsaciones rápidas
if ticks_diff(tiempo_actual, ultimo_boton_presionado) > 300:
mostrar_mensaje("Conteo finalizado", "")
sleep(2)
mostrar_mensaje("Total:", str(contador))
sleep(3)
contador = 0 # Reiniciar el contador
mostrar_mensaje("Monitoreo de", "personas:")
sleep(2)
mostrar_mensaje("Empresa \n ChileTech")
sleep(2)
ultimo_boton_presionado = tiempo_actual
# Monitorear el estado del sensor PIR
if pir_sensor.value(): # Detecta movimiento
led.on() # Enciende el LED
contador += 1
mostrar_mensaje("Personas:", str(contador))
# Esperar hasta que el PIR deje de detectar movimiento
while pir_sensor.value():
sleep(0.1)
led.off() # Apaga el LED