from machine import Pin, ADC
import time
from time import sleep
Led= Pin(25, Pin.OUT)
#existen variables locales (trabajan solo en funciones, dentro de ellas)
#existen variables globales (las que están fuera del def, esas hay que llamarlas dentro de la funcion)
#se crean todas las entradas digitales
#OLCompresor es sobrecarga del compresor (OverLoad)
OLCompresor= Pin(0, Pin.IN)
OLVentilador=Pin(1, Pin.IN) #Esto es sobrecarga del ventilador
flujo= Pin(2, Pin.IN) #Flujo
MarchaG= Pin(3, Pin.IN) #Marcha
ParoG= Pin(4, Pin.IN) #Paro con pulsador
MarchaBC= Pin(5, Pin.IN) #Marcha paro general
ParoBC= Pin(6, Pin.IN) #Marcha compresor
#Se definen las salidas digitales
Comp= Pin(7, Pin.OUT) #compresor 1
vent= Pin(8, Pin.OUT) #ventilador 1
BC= Pin(9, Pin.OUT) #bomba de circulación
alarma= Pin(10, Pin.OUT) #alarma
#definir entradas analógicas
adc=ADC(Pin(26))
#lista de variales
#variable de marcha y paro general
varMPG=0
def lecturaAnalogica(): #se crea una función que se podrá utilizar variadas ocasiones
global adc #se hace el llamado a la variable de afuera declarándola como global
lectura= adc.read_u16()
sensor= 0.0003813*lectura+5
return sensor
# Ahora, imprime el valor retornado por la función
valor_sensor = lecturaAnalogica()
#ventilador es el diodo verde
#compresor es el diodo azul
#bc bomba de circulacion diodo amarillo
#alarma es el diodo rojo
#se programa el potenciómetro para que vaya de 5 a 30
i=1
varTime= 30
#punto 1:
while True:
if (MarchaG.value() ==0):
vent.on()
varMPG = 1
elif(ParoG.value()==0 or valor_sensor < 15):
vent.off()
Comp.off()
varMPG = 0
i= 0
if(varMPG==1 and i<varTime):
time.sleep(0.1)
i=i+1
if (i==varTime and OLCompresor.value() == 1 and OLVentilador.value()==1):
Comp.on
#punto2
#falla del ventilador
if(OLVentilador.value() == 0 and valor_sensor < 15):
vent.off()
Comp.off()
alarma.on()
elif(OLVentilador.value() == 1 and varMPG ==1):
vent.on()
alarma.off()
#falla del compresor
if(OLCompresor.value() == 0 and valor_sensor < 15):
Comp.off()
alarma.on()
elif(OLCompresor.value() == 1 and i == varTime and OLVentilador.value() == 1 and valor_sensor > 15):
Comp.on()
alarma.off()
#Punto 3 - El encendido de la bomba de circulación dependerá si previamente se ha arrancado el bloque
#ventilador + compresor. Su alarma solo depende de la señal de flujo.
if (i== varTime and OLCompresor.value()==1 and OLVentilador.value()==1 and MarchaBC.value()==0):
BC.on()
elif (i== varTime and OLCompresor.value()==1 and OLVentilador.value()==1 and ParoBC.value()==0):
BC.off()
if not Comp.value() or not vent.value():
BC.off()
#fallos de la BC
if (flujo.value() == 0 and i==varTime):
alarma.on()
BC.off()
elif (flujo.value()==1 and i==varTime and OLCompresor.value()==1 and OLVentilador.value()==1 and MarchaBC.value()==0):
BC.on()
alarma.off()
#punto 4
#La señal analógica de temperatura va desde los 5ºC hasta los 30ºC, si la temperatura es menor de
#15ºC se apaga el compresor caso contrario se #mantiene encendido. Respetando el punto 2.
# Punto 4: Control del compresor basado en la temperatura
valor_sensor = lecturaAnalogica()
print("El valor del sensor es:", valor_sensor)
#if (valor_sensor > 15):
# Comp.on()
#elif (valor_sensor < 15):
# Comp.off()