from machine import Pin, ADC
from machine import Pin
import utime
import time
#SIMULACIÓN DE FALLOS
OLC = Pin(16, Pin.IN, Pin.PULL_UP)
OLV = Pin(17, Pin.IN, Pin.PULL_UP)
Flujo = Pin(18, Pin.IN, Pin.PULL_UP)
#ENTRADA ANALÓGICA
sensorTemp = ADC(Pin(27))
#MARCHA Y PARO GENERAL
MG = Pin(15, Pin.IN)
PG = Pin(14, Pin.IN)
#MARCHA Y PARO DE LA BOMBA DE CIRCULACIÓN
MBC = Pin(13, Pin.IN)
PBC = Pin(12, Pin.IN)
#SALIDAS
Com = Pin(19, Pin.OUT) # LED VERDE COMPRESOR
Ven = Pin(20, Pin.OUT) # LED NARANJA VENTILADOR
BC = Pin(21, Pin.OUT) # LED AZUL BOMBA DE CIRCULACIÓN
Flu = Pin(22, Pin.OUT) # LED CELESTE SI HAY O NO FLUJO
BUZZER = machine.Pin(5, machine.Pin.OUT) # ALARMA
# VARIABLES DE ESTADO
estado_anterior_MG = 0
estado_anterior_MBC = 0
estado_anterior_PG = 0
estado_anterior_PBC = 0
sistema_encendido = False
#CONFIGURACIÓN DEL BUZZER
def generar_tono(frecuencia, duracion):
periodo = 1 / frecuencia
ciclos = int(duracion * frecuencia)
for _ in range(ciclos):
BUZZER.value(1)
utime.sleep_us(int(periodo * 1e6 / 2))
BUZZER.value(0)
utime.sleep_us(int(periodo * 1e6 / 2))
def emergencia():
generar_tono(50, 0.5)
def marcha():
generar_tono(800, 0.10)
def paro():
generar_tono(500, 0.10)
#FIN DE CONFIGURACIÓN DEL BUZZER :D
while True:
estado_OLC = OLC.value()
estado_OLV = OLV.value()
estado_Flujo = Flujo.value()
valorMG = MG.value()
valorMBC = MBC.value()
valorPG = PG.value()
valorPBC = PBC.value()
# LECTURA ANALÓGICA
lecturaRAW = sensorTemp.read_u16()
valorTemp = round(3.81e-4 * lecturaRAW + 5, 1)
# IMPRESIÓN DE ESTADO
print(" |","Compresor:",estado_OLC,"|Ventilador:",estado_OLV,
"|Flujo:",estado_Flujo,"|Sistema Encendido:", sistema_encendido,"|Temp:",valorTemp,"°C", end='\r')
# MARCHA GENERAL
if valorMG == 1 and estado_anterior_MG == 0:
sistema_encendido = True
marcha()
Ven.value(1)
time.sleep(3)
Com.value(1)
# MARCHA DE BOMBA DE CIRCULACIÓN
if sistema_encendido and valorMBC == 1 and estado_anterior_MBC == 0:
marcha()
BC.value(1)
Flu.value(1)
# NO HAY FLUJO
if sistema_encendido and estado_Flujo ==0:
Flu.value(0)
# APAGADO POR FALTA DE FLUJO
if estado_Flujo ==0 :
print(" NO HAY FLUJO", end='\r')
time.sleep(1)
BC.value(0)
# PARO GENERAL
if valorPG == 1 and estado_anterior_PG == 0 :
paro()
Ven.value(0)
Com.value(0)
BC.value(0)
Flu.value(0)
sistema_encendido = False
# PARO DE LA BOMBA DE CIRCULACIÓN
if valorPBC == 1 and estado_anterior_PBC == 0 :
paro()
BC.value(0)
Flu.value(0)
# FALLA DEL COMPRESOR
if estado_OLC == 0:
Com.value(0)
print(" EL COMPRESOR FALLÓ", end='\r')
emergencia()
# FALLA DEL VENTILADOR
if estado_OLV == 0:
Com.value(0)
Ven.value(0)
print(" EL VENTILADOR FALLÓ", end='\r')
emergencia()
# FALLA DEL COMPRESOR POR TEMPERATURA
if valorTemp < 10:
Com.value(0)
print(" TEMPERATURA BAJA", end='\r')
if sistema_encendido and valorTemp >= 10 and estado_OLC == 1 and estado_OLV == 1 and Ven.value()==1:
Com.value(1)
time.sleep(0.1)