#Proyecto Final Jensy Villafranca
#ÁREA DE LIBRERIAS
from machine import Pin, PWM, ADC, I2C
from utime import sleep, sleep_ms
import time
import math
from i2c_lcd import I2cLcd
import math
from math import log
import network
import ujson
from umqtt.simple import MQTTClient
#ÁREA DE VARIABLES
#--Potenciometros
frecuencia = 5000
minimo_original_pot = 0
maximo_original_pot = 4095
minimo_nuevo_pot = 1
maximo_nuevo_pot = 100
#Inicializar el pin del potenciometro
potenciometro = ADC(Pin(13))
potenciometro.atten(ADC.ATTN_11DB)
potenciometroPeso = ADC(Pin(34))
potenciometroPeso.atten(ADC.ATTN_11DB)
#-------------------
#--RGB
pinRojo_rgb_gasolina = PWM(Pin(23), freq=frecuencia)
pinRojo_rgb_gasolina.duty(512)
pinVerde_rgb_gasolina = PWM(Pin(21), freq=frecuencia)
pinVerde_rgb_gasolina.duty(512)
pinAzul_rgb_gasolina = PWM(Pin(22), freq=frecuencia)
pinAzul_rgb_gasolina.duty(512)
#---------------------
pinRojo_rgb_temperatura = PWM(Pin(15), freq=frecuencia)
pinRojo_rgb_temperatura.duty(512)
pinVerde_rgb_temperatura = PWM(Pin(2), freq=frecuencia)
pinVerde_rgb_temperatura.duty(512)
pinAzul_rgb_temperatura = PWM(Pin(4), freq=frecuencia)
pinAzul_rgb_temperatura.duty(512)
#----------------------
pinRojo_rgb_peso = PWM(Pin(16), freq=frecuencia)
pinRojo_rgb_peso.duty(512)
pinVerde_rgb_peso = PWM(Pin(17), freq=frecuencia)
pinVerde_rgb_peso.duty(512)
pinAzul_rgb_peso = PWM(Pin(5), freq=frecuencia)
pinAzul_rgb_peso.duty(512)
#-----------------------
#--Pantallas
tamañoLCD = 0x27
i2c = I2C(scl = Pin(32), sda=Pin(33), freq=400000) #LCD Gasolina
i2c_2 = I2C(scl = Pin(25), sda=Pin(26), freq=400000) #LCD Temperatura
i2c_3 = I2C(scl = Pin(27), sda=Pin(14), freq=400000) #LCD Peso
pantalla_gasolina = I2cLcd(i2c, tamañoLCD, 4, 20) #Pantalla Gasolina
pantalla_temperatura = I2cLcd(i2c_2, tamañoLCD, 4, 20) #Pantalla Gasolina
pantalla_peso = I2cLcd(i2c_3, tamañoLCD, 4, 20) #Pantalla Peso
#4 y 20 son las celdas del LCD
#-------------------------
#--Buzzer
buzzer = Pin(19,Pin.OUT)
#la frecuencia en el buzzer sirve para el tono musical del mismo, corresponde al tono musical "La"
#--------------------------
#--Variables de estado
estadoGasolina = ""
estadoTemperatura = ""
estadoPeso = ""
#---------------------------
#--Sensor de Temperatura
BETA = 3950 # es el coeficiente del beta del termistor (constante)
constanteGradosKelvin = 273.15
sensorTemperatura_pin = ADC(12)
#----------------------------
#--Variables auxiliares
prioridad = 0
vecesMQQT = 0
estadoAlarma = 0
#--Variables MQQT
MQTT_CLIENT_ID = ""
MQTT_BROKER = "18.116.156.233"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC = "sensores/#"
#--Datos a enviar a servidor MQQT alojado en instancia de AWS
placa = "HAA0005"
#Para el modelo 6225E (Modelo 4) usar este enlace: https://empresaagricola.ddns.net/modelo6225E.jpg
enlaceFoto = "https://empresaagricola.ddns.net/modelo5055E.jpg"
porcentajeGasolina = 0
porcentajeTemperatura = 0
porcentajePeso = 0
idEstadoTractor = 5
latitud = 13.092243
longitud = -86.951866
idLote = 1
idEmpleado = 5
idModelo = 5
#ÁREA DE FUNCIONES
#Función para conectarme a MQQT
def conectar_mqqt(valorG, valorT, valorP):
global vecesMQQT
vecesMQQT+=1
print("Conectandome a MQTT",end="")
cliente = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD, port=1883)
#Estableciendo conexión con el servidor MQQT
cliente.connect()
mensaje = ujson.dumps({
"gasolina" : valorG,
"temperatura" : valorT,
"peso" : valorP,
"placa" : placa,
"enlaceFoto" : enlaceFoto,
"porcentajeGasolina" : porcentajeGasolina,
"porcentajeTemperatura" : porcentajeTemperatura,
"porcentajePeso" : porcentajePeso,
"idEstadoTractor" : idEstadoTractor,
"latitud" : latitud,
"longitud" : longitud,
"idLote" : idLote,
"idEmpleado" : idEmpleado,
"idModelo" : idModelo
})
cliente.publish("sensores/temperatura", mensaje)
print("...Conectado a MQQT")
#Función para conectarme a internet
def conectar_wifi():
print("Conectándonos al WIFI", end="")
red = network.WLAN(network.STA_IF) #De tipo cliente
red.active(True)
red.connect('Wokwi-GUEST', '')
while not red.isconnected():
print(".", end="")
time.sleep(0.5)
print("Conectado")
#Función para desconectarme a internet
def desconectar_wifi():
red = network.WLAN(network.STA_IF)
if red.isconnected():
red.disconnect()
red.active(False)
print("Desconectado del WiFi")
else:
print("No estaba conectado")
#Función para alarma de gasolina
def alarmaGasolina(mapeo_valores_pot):
global prioridad
#Nivel Insuficiente
if(mapeo_valores_pot >=1 and mapeo_valores_pot <=25):
estadoGasolina = "Estado: Critico"
#print("Esta es una prueba", estadoGasolina)
pantalla_gasolina.move_to(15, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(16, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(17, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(18, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(19, 1)
if(mapeo_valores_pot <=15):
print("Prioridad Gasolina: ",prioridad)
if(prioridad==1 or prioridad==2):
reproducir_alarma(prioridad)
elif(prioridad == 0):
reproducir_alarma(3) #el 3 significa que es de gasolina
prioridad = 0
pantalla_gasolina.move_to(0, 2)
pantalla_gasolina.putstr("*Rebastecer Pronto*")
colorearLedGasolina(65535,0,0) #Color Rojo
time.sleep(0.3)
elif(mapear_valores_pot >25 and mapeo_valores_pot <=50):
colorearLedGasolina(65535,11000,0) #Color Naranja
estadoGasolina = "Estado: Bajo"
pantalla_gasolina.move_to(12, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(13, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(14, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(15, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(16, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(17, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(18, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(19, 1)
pantalla_gasolina.putstr(' ')
limpiarMensaje()
elif(mapear_valores_pot >50 and mapear_valores_pot <=75):
colorearLedGasolina(65535,65535,0) #Color Amarillo
estadoGasolina = "Estado: Estable"
pantalla_gasolina.move_to(15, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(16, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(17, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(18, 1)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(19, 1)
pantalla_gasolina.putstr(' ')
limpiarMensaje()
elif(mapear_valores_pot >75): #Color Verde
colorearLedGasolina(0,65535,0)
estadoGasolina = "Estado: Tanque Lleno"
limpiarMensaje()
imprimirMensajesGasolina(round(mapeo_valores_pot),estadoGasolina) #Esta es una prueba mía
#Función para imprimir mensajes en la LCD - Gasolina
def imprimirMensajesGasolina(mapeoValores, estadoCombustible):
pantalla_gasolina.move_to(0, 0)
pantalla_gasolina.putstr('Nivel Gasolina: '+ str(mapeoValores) + "%")
pantalla_gasolina.move_to(0, 1)
pantalla_gasolina.putstr(estadoCombustible)
if(mapeoValores < 10): #Para el correcto formato de visualización
pantalla_gasolina.move_to(18, 0)
pantalla_gasolina.putstr(' ')
#Función para imprimir mensajes en la LCD - Temperatura
def imprimirMensajesTemperatura(grados, estadoTemperatura):
pantalla_temperatura.move_to(0, 0)
pantalla_temperatura.putstr('Temperatura: '+ str(grados) + " C")
pantalla_temperatura.move_to(0, 1)
pantalla_temperatura.putstr(estadoTemperatura)
if(grados < 10 and grados > 0): #Para el correcto formato de visualización
pantalla_temperatura.move_to(14, 0)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(15, 0)
pantalla_temperatura.putstr('C')
pantalla_temperatura.move_to(16, 0)
pantalla_temperatura.putstr(' ')
elif(grados < 0 and grados > -10):
pantalla_temperatura.move_to(17, 0)
pantalla_temperatura.putstr(' ')
elif(grados == 0):
pantalla_temperatura.move_to(16, 0)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(17, 0)
pantalla_temperatura.putstr(' ')
#Función para imprimir mensajes en la LCD - Peso
def imprimirMensajesPeso(toneladas, estadoPeso):
pantalla_peso.move_to(0, 0)
pantalla_peso.putstr('Peso: '+ str(toneladas) + " Tn")
pantalla_peso.move_to(0, 1)
pantalla_peso.putstr(estadoPeso)
if(toneladas == 0.0):
pantalla_peso.move_to(12, 0)
pantalla_peso.putstr(' ')
#Función para colorear el led correspondiente a la gasolina
#duty_u16() acepta valores entre 0 y 65535
def colorearLedGasolina(colorRojo, colorVerde, colorAzul):
pinRojo_rgb_gasolina.duty_u16(colorRojo)
pinVerde_rgb_gasolina.duty_u16(colorVerde)
pinAzul_rgb_gasolina.duty_u16(colorAzul)
#Función para colorear el led correspondiente a la temperatura
def colorearLedTemperatura(colorRojo, colorVerde, colorAzul):
pinRojo_rgb_temperatura.duty_u16(colorRojo)
pinVerde_rgb_temperatura.duty_u16(colorVerde)
pinAzul_rgb_temperatura.duty_u16(colorAzul)
#Función para colorear el led correspondiente al peso
def colorearLedPeso(colorRojo, colorVerde, colorAzul):
pinRojo_rgb_peso.duty_u16(colorRojo)
pinVerde_rgb_peso.duty_u16(colorVerde)
pinAzul_rgb_peso.duty_u16(colorAzul)
#Función para poder reproducir el sonido en el buzzer
def sonidoAlarma(duracion, frecuencia):
periodo_sonido = 1 / (frecuencia * 2) #Periodo de una onda cuadrada
tiempo_finalizar = time.ticks_add(time.ticks_ms(), duracion)
while time.ticks_diff(tiempo_finalizar, time.ticks_ms()) > 0:
buzzer.value(1)
estadoAlarma = 1
time.sleep(periodo_sonido)
buzzer.value(0)
time.sleep(periodo_sonido)
# Función para alternar entre dos tonos
def reproducir_alarma(tipoAlarma):
if(tipoAlarma == 1): #sonido fuerte
sonidoAlarma(1200,1000)
time.sleep(0.3)
elif(tipoAlarma == 2): #sonido intermedio
sonidoAlarma(800, 500)
time.sleep(0.3)
elif(tipoAlarma == 3): #sonido bajo
sonidoAlarma(350, 200)
time.sleep(0.3)
#Función para limpiar mensaje de recarga del tanque
def limpiarMensaje():
pantalla_gasolina.move_to(0, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(1, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(2, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(3, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(4, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(5, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(6, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(7, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(8, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(9, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(10, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(11, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(12, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(13, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(14, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(15, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(16, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(17, 2)
pantalla_gasolina.putstr(' ')
pantalla_gasolina.move_to(18, 2)
pantalla_gasolina.putstr(' ')
#Función para convertir la temperatura a grados Celsius.
def convertirTemperatura(valoresADC):
#Formula ya dada por el modelo Steinhart-Hart
return (1 / (log(1/(65535/valoresADC - 1))/BETA + 1/298.15) - constanteGradosKelvin)
#Función para alarma de la temperatura
def alarmaTemperatura(gradosCelsius):
global prioridad
if(gradosCelsius <=0):
estadoTemperatura = "Frio Extremo"
colorearLedTemperatura(8000,50000,60000)#azul celeste
if(prioridad==1 or prioridad==2):
reproducir_alarma(prioridad)
elif(prioridad == 0):
reproducir_alarma(1) #el 1 significa que es el de temperatura
prioridad = 0
pantalla_temperatura.move_to(0,3)
pantalla_temperatura.putstr('Motor Congelado')
pantalla_temperatura.move_to(12, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(13, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(14, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(15, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(16, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(17, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(18, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(19, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(15, 3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(16, 3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(17, 3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(18, 3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(19, 3)
pantalla_temperatura.putstr(' ')
elif(gradosCelsius >0 and gradosCelsius<=20):
if(gradosCelsius<=5):
if(prioridad==1 or prioridad==2):
reproducir_alarma(prioridad)
elif(prioridad == 0):
reproducir_alarma(1) #el 1 significa que es el de temperatura
prioridad = 0
pantalla_temperatura.move_to(0,3)
pantalla_temperatura.putstr('Proximo a congelarse')
else:
pantalla_temperatura.move_to(0,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(1,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(2,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(3,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(4,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(5,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(6,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(7,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(8,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(9,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(10,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(11,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(12,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(13,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(14,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(15,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(16,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(17,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(18,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(19,3)
pantalla_temperatura.putstr(' ')
estadoTemperatura = "Temperatura Fresca"
colorearLedTemperatura(20000,65535,0)#verde claro
pantalla_temperatura.move_to(18, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(19, 1)
pantalla_temperatura.putstr(' ')
elif(gradosCelsius >20 and gradosCelsius<=40):
limpiarMensajeTemperatura()
limpiarMensajeTemperaturaCongeladas()
estadoTemperatura = "Temperatura Calida"
colorearLedTemperatura(65535,65535,0)#amarillo
pantalla_temperatura.move_to(18, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(19, 1)
pantalla_temperatura.putstr(' ')
elif(gradosCelsius >40 and gradosCelsius<=60):
limpiarMensajeTemperatura()
limpiarMensajeTemperaturaCongeladas()
estadoTemperatura = "Muy Caliente"
colorearLedTemperatura(65535,11000,0)#anaranjado
pantalla_temperatura.move_to(12, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(13, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(14, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(15, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(16, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(17, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(18, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(19, 1)
pantalla_temperatura.putstr(' ')
elif(gradosCelsius >60):
estadoTemperatura = "Calor Extremo"
colorearLedTemperatura(65535,0,0)#rojo
if(prioridad==1 or prioridad==2):
reproducir_alarma(prioridad)
elif(prioridad == 0):
reproducir_alarma(1) #el 1 significa que es el de temperatura
pantalla_temperatura.move_to(0,3)
pantalla_temperatura.putstr('Equipo recalentado')
pantalla_temperatura.move_to(13, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(14, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(15, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(16, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(17, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(18, 1)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(19, 1)
pantalla_temperatura.putstr(' ')
imprimirMensajesTemperatura(round(gradosCelsius),estadoTemperatura)
def limpiarMensajeTemperatura():
pantalla_temperatura.move_to(0,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(1,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(2,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(3,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(4,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(5,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(6,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(7,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(8,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(9,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(10,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(11,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(12,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(13,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(14,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(15,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(16,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(17,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(18,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(19,3)
pantalla_temperatura.putstr(' ')
def limpiarMensajeTemperaturaCongeladas():
pantalla_temperatura.move_to(0,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(1,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(2,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(3,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(4,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(5,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(6,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(7,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(8,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(9,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(10,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(11,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(12,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(13,3)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(14,3)
pantalla_temperatura.putstr(' ')
#Función para limpiar mensaje de exceso de peso
def limpiarMensajaPeso():
pantalla_peso.move_to(0,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(1,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(2,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(3,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(4,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(5,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(6,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(7,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(8,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(9,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(10,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(11,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(12,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(13,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(14,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(15,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(16,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(17,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(18,3)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(19,3)
pantalla_peso.putstr(' ')
#Metodo para la alarma de Peso
def alarmaPeso(toneladas):
global prioridad
if(toneladas <= 2): #Peso estable
colorearLedPeso(0,65535,0) #verde
estadoPeso = "Peso Estable"
pantalla_peso.move_to(12, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(13, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(14, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(15, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(16, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(17, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(18, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(19, 1)
pantalla_peso.putstr(' ')
limpiarMensajaPeso()
elif(toneladas> 2 and toneladas <=4):
colorearLedPeso(65535,65535,0) #amarillo
estadoPeso = "Peso Medio"
pantalla_peso.move_to(10, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(11, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(12, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(13, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(14, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(15, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(16, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(17, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(18, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(19, 1)
pantalla_peso.putstr(' ')
limpiarMensajaPeso()
elif(toneladas > 4):
colorearLedPeso(65535,0,0) #rojo
estadoPeso = "Exceso de peso"
print("Prioridad en peso: ",prioridad)
if(prioridad==1 or prioridad==2):
reproducir_alarma(prioridad)
elif(prioridad == 0):
reproducir_alarma(2) #el 2 significa que es de peso
prioridad = 0
pantalla_peso.move_to(14, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(15, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(16, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(17, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(18, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(19, 1)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(0,3)
pantalla_peso.putstr('*Retirar peso ahora*')
imprimirMensajesPeso(round(toneladas,2), estadoPeso)
#Función para prioridad del buzzer
def prioridadBuzzer(estado_buzzer_gasolina, estado_buzzer_temperatura, estado_buzzer_peso):
global prioridad
if((estado_buzzer_gasolina == 1 and estado_buzzer_temperatura == 1) or (estado_buzzer_temperatura == 1 and estado_buzzer_peso == 1)):
#la prioridad es para el de temperatura
prioridad = 1
print(prioridad)
elif(estado_buzzer_gasolina == 1 and estado_buzzer_peso == 1):
#la prioridad es para el peso
prioridad = 2
print(prioridad)
elif(estado_buzzer_gasolina ==1 and estado_buzzer_peso ==1 and estado_buzzer_temperatura==1):
#la prioridad es para la temperatura
prioridad = 1
#Función para evaluar la prioridad del buzzer
def evaluar_prioridad_buzzer(gasolina, grados, toneladas):
if(gasolina<=15 and (grados<=5 or grados<0 or grados>60) and toneladas<=4):
prioridadBuzzer(1,1,0)
elif(toneladas>4 and gasolina>15 and (grados<=5 or grados<0 or grados>60) ):
prioridadBuzzer(0,1,1)
elif(gasolina<=15 and toneladas>4 and (grados>5 and grados<=60)):
prioridadBuzzer(1,0,1)
elif(gasolina<=15 and (grados<=5 or grados<0 or grados>60) and toneladas>4):
prioridadBuzzer(1,1,1)
#Función para barra de carga
def barraCarga(lcd1, lcd2, lcd3, porcentaje):
lcd1.move_to(0, 0)
lcd1.putstr("CARGANDO")
lcd1.move_to(0, 1)
# Dibuja la barra de carga
blocks = int((porcentaje / 100) * 20)
lcd1.putstr(chr(255) * blocks + '-' * (20 - blocks))
# Muestra el porcentaje
lcd1.move_to(7, 2)
lcd1.putstr(f"{porcentaje}%")
#--------------------------------
lcd2.move_to(0, 0)
lcd2.putstr("CARGANDO")
lcd2.move_to(0, 1)
# Dibuja la barra de carga
blocks = int((porcentaje / 100) * 20)
lcd2.putstr(chr(255) * blocks + '-' * (20 - blocks))
# Muestra el porcentaje
lcd2.move_to(7, 2)
lcd2.putstr(f"{porcentaje}%")
#---------------------------------
lcd3.move_to(0, 0)
lcd3.putstr("CARGANDO")
lcd3.move_to(0, 1)
# Dibuja la barra de carga
blocks = int((porcentaje / 100) * 20)
lcd3.putstr(chr(255) * blocks + '-' * (20 - blocks))
# Muestra el porcentaje
lcd3.move_to(7, 2)
lcd3.putstr(f"{porcentaje}%")
#No sirve
def limpiarBarraCarga():
print("Ingresa a limpiar")
pantalla_temperatura.move_to(7, 2)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(8, 2)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(9, 2)
pantalla_temperatura.putstr(' ')
pantalla_temperatura.move_to(10, 2)
pantalla_temperatura.putstr(' ')
pantalla_peso.move_to(7, 2)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(8, 2)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(9, 2)
pantalla_peso.putstr(' ')
pantalla_peso.move_to(10, 2)
pantalla_peso.putstr(' ')
while True:
if(vecesMQQT == 0):
conectar_wifi()
conectar_mqqt(0,0,0) #aqui esta el problema del 0 0 0 al apagar
for i in range(0, 101, 5):
barraCarga(pantalla_gasolina, pantalla_temperatura,pantalla_peso,i)
sleep_ms(1)
else:
limpiarBarraCarga()
try:
desconectar_wifi()
duty_cicle = potenciometro.read() # Lectura del potenciometro
# Mapeo del valor del potenciometro para representarlo en un rango del 1% al 100%.
mapear_valores_pot = ((duty_cicle - minimo_original_pot) / (maximo_original_pot - minimo_original_pot) * (maximo_nuevo_pot - minimo_nuevo_pot) + minimo_nuevo_pot)
alarmaGasolina(mapear_valores_pot)
# Lectura del sensor de temperatura NTC
lectura_sensor_temperatura = sensorTemperatura_pin.read_u16()
alarmaTemperatura(convertirTemperatura(lectura_sensor_temperatura))
# Lectura del sensor de peso
duty_cicle_Peso = potenciometroPeso.read()
toneladas = duty_cicle_Peso / 1000
alarmaPeso(toneladas)
print("Peso: (Toneladas) ", toneladas)
evaluar_prioridad_buzzer(mapear_valores_pot, convertirTemperatura(lectura_sensor_temperatura), toneladas)
conectar_wifi()
conectar_mqqt(mapear_valores_pot, convertirTemperatura(lectura_sensor_temperatura), toneladas)
sleep(10)
except Exception as e:
print("Ocurrió un error:", e)