Controllo automatico di una caldaia

Oggi vediamo l’utilizzo di un Esp8266 con un relè e un sensore di temperatura e umidità. Invece di fare le solite prove fini a se stesse realizzeremo un dispositivo funzionante in determinate situazioni.

Immaginate di volere che una caldaia a gas si accenda automaticamente quando la temperatura va al di sotto dei 20 gradi e si spenga quando va sopra i 22 gradi; è una situazione spesso utile in ambienti piccoli dove vogliamo mantenere una temperatura abbastanza costante.

Sbloccare il wifi del nodemcu

Non so se vi è mai capitato ma dopo aver dato dei comandi per connettersi ad un dispositivo ogni volta che si riavvia tenta disperatamente di collegarsi e continua a dare messaggi di errore se non ci riesce.

Questo non pregiudica il funzionamento del Esp8266 ma rende difficoltoso leggerne i messaggi e scriverne i comandi. La prima soluzione che ho trovato è stata quella di disattivare il wifi, con questo semplice programmino che ho chiamato reset-wlan e che può essere inserito nel main.py o boot.py per essere eseguito in automatico ad ogni avvio.

# se si blocca nel tentativo di connessione ad una rete inesistente scrivere il comando wlan.active(0) dal terminale e dare invio

import network
wlan = network.WLAN(network.STA_IF)
wlan.disconnect()
#wlan.active(0)

Naturalmente questo ha senso durante le prove di collegamento con il wifi, altrimenti ricaricate il micropython e avete risolto più facilmente.

Utilizziamo un relè

Solitamente il relè ha tre connettori, V GND e Data, naturalmente il nome può essere differente ma c’è sempre un connettore per il polo positivo di tensione, uno per la massa e uno per il segnale di on/off. Esp8266 ha diversi piedini che forniscono tensione, di solito sono indicati con 5V o 3V, potete collegare il terminale V ad uno di questi, accanto hanno quasi sempre un piedino con il simbolo G o Gnd, potete collegare a questo la massa.

Il piedino di comando invece potete collegarlo al piedino D1 che corrisponde al gpio05 come potete vedere in questa immagine

Fatto questo con poche semplici righe potete controllare lo stato del relè

from machine import Pin
relay = Pin(5, Pin.OUT)

# imposta il relè in on alimentando il dispositivo collegato
relay.value(0)


# imposta il relè in off spegnendo il dispositivo collegato
relay.value(1)

Con questi due comandi possiamo gestire un dispositivo, nel nostro caso la caldaia a gas. Ora vediamo come leggere la temperatura per decidere se accenderla oppure no.

Il sensore DHT22

Intanto diciamo che l’utilizzo del DHT11 rispetto al DHT22 comporta solo una minore risoluzione della lettura, il dht22 ha anche i decimali.

Il sensore ha solitamente 3 o quattro piedini, quelli da utilizzare sono il + o V, il – o Gnd e l’OUT. Il + può essere collegato ad uno dei tanti piedini 3v 5v del Esp8266, il – al piedino accanto indicato con G o Gnd e il piedino Out lo colleghiamo al D5 (GPIO14). Il sorgente per utilizzarlo è il seguente

import dht
from machine import Pin
sensore = dht.DHT22(Pin(14))
try:
  sensore.measure()
  temp = sensore.temperature()
  umid = sensore.humidity()
  print('Temperatura: %3.1f C' %temp)
  print('Umidità: %3.1f %%' %umid)
except OSError as e:
  print('Lettura sensore fallita.')

Fin qui abbiamo visto come pilotare un relè e come leggere un sensore di temperatura, ora vediamo come fonderli insieme per realizzare un sistema che mantiene la temperatura pressoché costante.

Il programma finale

import dht
from machine import Pin
from time import sleep

relay = Pin(5, Pin.OUT)
sensore = dht.DHT22(Pin(14))

while True:
  try:
    sensore.measure()
    temp = sensore.temperature()
    hum = sensore.humidity()
    print('Temperature: %3.1f C' %temp)
    print('Humidity: %3.1f %%' %hum)
    if temp < 20: 
      relay.value(0)
    if temp > 20.5: 
      relay.value(1)
    sleep(120)
  except OSError as e:
    print('lettura fallita.')
    sleep(15)

Il programma all’inizio importa le librerie di cui ha bisogno, subito dopo inizializza i pin per il relè e per il sensore temperatura e poi in un ciclo infinito, quando la temperatura scende sotto i 20 gradi accende la caldaia (attiva il relè) e quando sale sopra i 20.5 la spegne.

La lettura viene fatta ogni 120 secondi (due minuti) ma nel caso di errore di lettura viene ripetuta dopo 15 secondi. Tutti questi valori sono modificabili secondo le vostre esigenze.

Vi consiglio di verificare il valore letto dal DHT con un termometro più accurato e aggiustare i dati del programma in base alla variazione. Mi spiego, se il DHT legge 22 gradi e il termometro dice che sono 25 dovete aggiungere tre gradi ad ogni valore che utilizzate nel programma, la precisione di questi dispositivi lascia molto a desiderare.

Una modifica che potete fare se intendete utilizzare effettivamente un dispositivo del genere è quella di aggiungere un contatore delle letture errate, contatore che viene azzerato quando avviene una lettura buona e che se supera un certo valore spegne comunque la caldaia per evitare che in caso di problemi al sensore resti eternnamente accesa.

Maurizio

Lascia un commento