import dht
import machine
from time import sleep
from machine import I2C, Pin
from I2c_lcd import I2cLcd
# Inicialitzacions de components
sensor = dht.DHT22(machine.Pin(4))
rele1 = machine.Pin(14, machine.Pin.OUT)
rele2 = machine.Pin(17, machine.Pin.OUT)
# Llindars de temperatura i humitat
llindar_temp = 28.0
llindar_wet = 48.0
# Configuració de l'LCD
direccio_lcd = 0x27
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=400000)
lcd = I2cLcd(i2c, direccio_lcd, 2, 16)
Historial = []
# Funció per calcular la mitjana d'una llista (manual)
def calcula_mitjana(llista):
total = 0
for valor in llista:
total += valor
return total / len(llista)
while True:
# Mesura la temperatura i la humitat
sensor.measure()
temperatura = sensor.temperature()
humitat = sensor.humidity()
# Afegir les dades a l'historial
Historial.append((temperatura, humitat))
# Quan hi ha 4 lectures, fer càlculs
if len(Historial) == 4:
# Separar temperatures i humitats manualment
temperatures = []
humitats = []
blanco = " "
for lectura in Historial:
temperatures.append(lectura[0])
humitats.append(lectura[1])
# Calcular la mitjana de temperatura i humitat
temp_mitjana = calcula_mitjana(temperatures)
hum_mitjana = calcula_mitjana(humitats)
# Controlar el relé de temperatura
if temp_mitjana < llindar_temp:
rele1.value(1)
estat_temp = "Rele Tem activat" # Missatge que mostra que el relé està activat
else:
rele1.value(0)
estat_temp = "Rele Tem desactivat" # Missatge que mostra que el relé està desactivat
# Controlar el relé d'humitat
if hum_mitjana < llindar_wet:
rele2.value(1)
estat_hum = "Rele Hum activat" # Missatge que mostra que el relé està activat
else:
rele2.value(0)
estat_hum = "Rele Hum desactivat" # Missatge que mostra que el relé està desactivat
# Mostrar la informació d'humitat a l'LCD
lcd.clear() # Neteja la pantalla #El miercoles 20 nos dijieron que podriamos usar el clear
lcd.putstr(estat_temp) # Mostra l'estat del relé de temperatura
lcd.move_to(0, 1)
lcd.putstr(str(hum_mitjana) + blanco + blanco + str(llindar_wet))
sleep(2)
# Mostrar la informació de temperatura a l'LCD
lcd.clear() # Neteja la pantalla
lcd.putstr(estat_hum) # Mostra l'estat del relé d'humitat
lcd.move_to(0, 1)
lcd.putstr(str(temp_mitjana) + blanco + blanco + str(llindar_temp))
time.sleep(2)
# Reiniciar l'historial
Historial = []
time.sleep(10)