-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.py
87 lines (84 loc) · 4.07 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from _thread import start_new_thread
from machine import enable_irq, disable_irq
from utime import sleep, ticks_ms, ticks_diff
import red
import servicios
import pantalla
from Caudalimetro import Caudalimetro
from BombaAgua import BombaAgua
from Global import Variables
#Inicio Caudalímetro
caudalimetro = Caudalimetro()
#Definir IRQ para lectura de pulsos de caudalímetro
caudalimetro.establecerIrq()
#Inicio Motor
bombaAgua = BombaAgua()
#Inicialización variables Globales
variables = Variables()
#Temporizadores para pulsos
variables.inicioTemporizador = ticks_ms()
variables.tiempoTranscurrido = 0.00
#Estado envío mensajes
variables.msgAdvertenciaEnviada = False
variables.msgLimiteEnviado = False
variables.msgCierreEnviado = False
#Conectar a la red
red.conectarwifi()
#Ejecuta los servicios de IoT
def actualizaServIOT():
while True:
sleep(5)
velMotor = servicios.actualizaConsumo(caudalimetro.caudalmLxS, caudalimetro.volumenTotal)
print("Velocidad", velMotor)
consumoMax = servicios.obtenerConsumoMaximo()
print("Consumo maximo",consumoMax)
#Advertencia de consumo
if consumoMax > 0:
porcConsumo = int((caudalimetro.volumenTotal * 100) / consumoMax)
if porcConsumo >= 80 and variables.msgAdvertenciaEnviada is False:
servicios.enviaMensajeTelegram("mensaje_telegram_advertencia", round(caudalimetro.volumenTotal,2), consumoMax, velMotor)
variables.msgAdvertenciaEnviada = True
#Control de motor y consumo
if velMotor == 0 or (caudalimetro.volumenTotal > consumoMax > 0):
print("Motor Detenido")
bombaAgua.dc_motor.stop()
if velMotor == 0 and variables.msgCierreEnviado is False:
servicios.enviaMensajeTelegram("mensaje_telegram_apagado", round(caudalimetro.volumenTotal,2), consumoMax, velMotor)
variables.msgCierreEnviado = True
if caudalimetro.volumenTotal > consumoMax > 0 and variables.msgLimiteEnviado is False:
servicios.enviaMensajeTelegram("mensaje_telegram_limitecons", round(caudalimetro.volumenTotal,2), consumoMax, velMotor)
variables.msgLimiteEnviado = True
if velMotor > 0 and (consumoMax == 0 or consumoMax > caudalimetro.consumoMaxActual or caudalimetro.volumenTotal < consumoMax):
print("Motor Encendido, velocidad: ", velMotor)
bombaAgua.dc_motor.forward(velMotor)
if bombaAgua.velocidadActual != velMotor:
servicios.enviaMensajeTelegram("mensaje_telegram_encendido", round(caudalimetro.volumenTotal,2), consumoMax, velMotor)
if consumoMax > caudalimetro.consumoMaxActual:
variables.msgAdvertenciaEnviada = False
variables.msgLimiteEnviado = False
variables.msgCierreEnviado = False
bombaAgua.velocidadActual = velMotor
caudalimetro.consumoMaxActual = consumoMax
#Calcula el flujo de agua de acuerdo a los pulsos por segundo
def calcularFlujo():
variables.tiempoTranscurrido = ticks_diff(ticks_ms(), variables.inicioTemporizador)
if variables.tiempoTranscurrido >= 1000:
estado = disable_irq()
print("Pulsos:",caudalimetro.numPulsos, "Pulsos Acumulados:", caudalimetro.pulsosAcum)
caudalimetro.caudalmLxS = ((1000.0 /variables.tiempoTranscurrido) * caudalimetro.numPulsos) / caudalimetro.factorCalibracion
mlFlujo = (caudalimetro.caudalmLxS / 120) * 1000
caudalimetro.volumenTotal += mlFlujo
#print("Caudal: ",round(caudalmLxS,2),"mL/Seg","- volumenTotal:",round(volumenTotal,2),"mL")
caudalimetro.numPulsos = 0
enable_irq(estado)
variables.inicioTemporizador = ticks_ms()
pantalla.mostrarEnPantalla(caudalimetro.caudalmLxS,caudalimetro.volumenTotal,bombaAgua.velocidadActual)
#Inicia código principal
def do_main():
pantalla.mostrarLogoInicial()
#Se inicia un hilo independiente para actualización de servicio IOT en Thinger.io
start_new_thread(actualizaServIOT, ())
while True:
calcularFlujo()
if __name__ == "__main__":
do_main()