from machine import Pin, I2C, PWM
from pico_i2c_lcd import I2cLcd
import utime
"""
----------------------------------------------------
PROYECTO 3: SISTEMA DE DETECCIÓN DE INTRUSIÓN
Datacenter SysAnalytics SpA
Componentes:
- Raspberry Pi Pico
- 2 Sensores PIR
- LCD 1602 I2C
- Buzzer
- LED RGB
Funciones:
- Detección de movimiento en Pasillo A y B
- Alarma sonora
- Alarma visual
- Contador de eventos
- Monitor Serial
----------------------------------------------------
"""
# ==========================================
# LCD
# ==========================================
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(i2c, 0x27, 2, 16)
# ==========================================
# SENSORES PIR
# ==========================================
pir_a = Pin(15, Pin.IN)
pir_b = Pin(14, Pin.IN)
# ==========================================
# BUZZER
# ==========================================
buzzer = PWM(Pin(16))
buzzer.duty_u16(0)
# ==========================================
# LED RGB
# ==========================================
rojo = Pin(17, Pin.OUT)
verde = Pin(18, Pin.OUT)
azul = Pin(19, Pin.OUT)
# ==========================================
# VARIABLES
# ==========================================
contador_total = 0
contador_a = 0
contador_b = 0
ultimo_reporte = utime.time()
# ==========================================
# FUNCIONES
# ==========================================
def sonido_on():
buzzer.freq(1000)
buzzer.duty_u16(30000)
def sonido_off():
buzzer.duty_u16(0)
def apagar_leds():
rojo.off()
verde.off()
azul.off()
def sistema_armado():
apagar_leds()
verde.on()
lcd.clear()
lcd.putstr("SIST. INTRUSION")
lcd.move_to(0, 1)
lcd.putstr("Pasillo A y B")
def mostrar_serial():
print("---------------------------")
print("Estado: ARMADO")
print("Sensor Pasillo A:", pir_a.value())
print("Sensor Pasillo B:", pir_b.value())
print("Eventos Totales:", contador_total)
print("Eventos Pasillo A:", contador_a)
print("Eventos Pasillo B:", contador_b)
def retardo_armado():
lcd.clear()
lcd.putstr("Armando Sistema")
print("Armando sistema...")
for i in range(5, 0, -1):
lcd.move_to(0, 1)
lcd.putstr("Espera: " + str(i) + " ")
azul.toggle()
utime.sleep(1)
azul.off()
print("Sistema Armado")
def alarma(pasillo):
global contador_total
global contador_a
global contador_b
contador_total += 1
if pasillo == "A":
contador_a += 1
else:
contador_b += 1
print("")
print("******** ALERTA ********")
print("Movimiento Pasillo", pasillo)
print("Total:", contador_total)
print("Pasillo A:", contador_a)
print("Pasillo B:", contador_b)
lcd.clear()
lcd.putstr("ALERTA INTRUSO")
lcd.move_to(0, 1)
lcd.putstr("Pasillo " + pasillo)
verde.off()
for i in range(10):
rojo.on()
sonido_on()
utime.sleep(0.3)
rojo.off()
sonido_off()
utime.sleep(0.3)
lcd.clear()
lcd.putstr("Total:" + str(contador_total))
lcd.move_to(0, 1)
lcd.putstr("A:" + str(contador_a) + " B:" + str(contador_b))
utime.sleep(2)
sistema_armado()
# ==========================================
# INICIO
# ==========================================
apagar_leds()
lcd.clear()
lcd.putstr("DC SECURITY")
lcd.move_to(0, 1)
lcd.putstr("Monitor V1.0")
print("=================================")
print("Sistema de Deteccion de Intrusion")
print("Datacenter SysAnalytics")
print("=================================")
# Prueba LED
rojo.on()
utime.sleep(1)
rojo.off()
verde.on()
utime.sleep(1)
verde.off()
azul.on()
utime.sleep(1)
azul.off()
retardo_armado()
sistema_armado()
# ==========================================
# LOOP PRINCIPAL
# ==========================================
while True:
tiempo_actual = utime.time()
if tiempo_actual - ultimo_reporte >= 2:
mostrar_serial()
ultimo_reporte = tiempo_actual
if pir_a.value() == 1:
alarma("A")
while pir_a.value() == 1:
utime.sleep(0.1)
if pir_b.value() == 1:
alarma("B")
while pir_b.value() == 1:
utime.sleep(0.1)
utime.sleep(0.1)