Robotica educativa/Termostato
Ora che si è appreso come misurare la temperatura ambiente, si procede alla realizzazione di un vero e proprio termostato.
Principio di funzionamento
modificaUna volta acquisita la temperatura ambiente, tramite il sensore di temperatura DHT11, si può procedere a diverse cose:
- attivare un impianto di riscaldamento, se questa è inferiore a una soglia prefissata;
- attivare un impianto di refrigerazione, quando la temperatura supera una soglia prestabilita.
Le due azioni, apparentemente in contrasto tra loro, sono le due modalità di lavoro di ogni comune termostato domestico. Rispettivamente, vengono chiamate modalità invernale e modalità estiva.
L'accensione dell'impianto (di riscaldamento, come di raffreddamento) corrisponde all'accensione e allo spegnimento di un led. Per esempio: un led rosso quando si attiva l'impianto di riscaldamento e un led blu quando si attiva l'impianto di raffreddamento.
Di seguito lo pseudocodice dove t
corrisponde alla temperatura restituita dal sensore, mentre t_min
è la temperatura minima, sotto la quale l'impianto di riscaldamento deve attivarsi. Similmente t_max
è la temperatura massima, superata la quale, si attiverà l'impianto di climatizzazione.
// Modalita' invernale
if (t < t_min)
riscaldamento = HIGH;
else
riscaldamento = LOW;
// Modalita' estiva
if (t > t_max)
raffreddamento = HIGH;
else
raffreddamento = LOW;
L'impianto che realmente è presente nelle abitazioni è comandato da un codice molto simile a questo. Si potrebbe obiettare che l’impianto di casa è più complesso di un singolo led. Questo è vero, ma non nella parte di controllo e automazione. In casa vi è un sensore (o più se si è fatta una divisione, come zona giorno e zona notte, ma questo non cambia il principio di funzionamento) che data la temperatura ambiente invia un impulso all'impianto di accensione o spegnimento.
Il codice che è stato mostrato fa esattamente questo. Non rimane altro da fare che:
- stabilire i valori di temperatura minima e massima (possono essere fissi o variabili);
- visualizzare lo stato del nostro impianto per avere un riscontro di cosa sta accadendo;
- inviare al monitor seriale la temperatura acquisita, così da capire se si stanno commettendo errori.
Schema di montaggio
modificaDi seguito lo schema di montaggio. Si noti che il sensore di temperature è l'ingresso. Le uscite sono due: il led rosso è la modalità invernale, quando si scende al di sotto di una temperatura prestabilita rappresenta l'impianto di riscaldamento; viceversa, il led blu è la modalità estiva, al di sopra di una temperatura limite attiva il climatizzatore che - in questo caso - è stato realizzato con un motore a corrente continua collegato a una ventola.
Si noti che i led sono connessi a una resistenza da , questo per evitare che passino a miglior vita non appena gli arriva un segnale alto ( ). In quel caso la loro resistenza si abbassa drasticamente e la corrente erogato sarebbe troppo elevata.
La scelta della resistenza dipende da quanta luminosità vogliamo dai led: una bassa resistenza implica alta luminosità, ma minor vita media; viceversa, alzando il valore della resistenza, diminuisce la luminosità, ma aumenta la vita media dei componenti.[1]
Codice
modifica
Si noti che la prima parte del codice ricalca l'esempio precedente. In aggiunta vengono definiti i due valori di soglia t_min
e t_max
, così da poterli modificare agevolmente, e i pin a cui si collegano i led e il motore (quest'ultimo non serve definirlo perché si aziona assieme al led blu). Inoltre, nel setup
si deve specificare che i pin connessi ai led sono uscite.
#include "DHT.h" // Driver per i sensori della serie DHT
#define t_min 18 // Temperatura sotto la quale si attiva il riscaldamento
#define t_max 22 // Temperatura sopra la quale si attiva il climatizzatore
#define LED_B 2 // Pin connesso al led blu
#define LED_R 3 // Pin connesso al led rosso
#define DHTPIN 4 // Pin connesso al sensore
#define DHTTYPE DHT11 // Tipo di sensore utilizzato
// Il pin 1 (a sinistra) serve per l'acquisizione dati
// Il pin 2 va a +5 V
// Il pin 3 va a massa (0 V)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600); // Inizializza il monitor seriale
dht.begin(); // Inizializza il sensore DHT
pinMode(LED_B, OUTPUT); // Specifica che il led blu e' una uscita
pinMode(LED_R, OUTPUT); // Specifica che il led rosso e' una uscita
}
void loop() {
// Acquisisce la temperatura in Celsius (parametro di default)
float t = dht.readTemperature();
// Controlla se il sensore ha fornito tutti gli output prima di proseguire
if (isnan(t)) {
Serial.println(F("+---------------------------+"));
Serial.println(F("| Sensore DHT non connesso! |"));
return; // Questo comando provoca l'uscita dalla funzione che verra' rieseguita
}
// Modalita' invernale
if (t < t_min)
digitalWrite( LED_R, HIGH );
else
digitalWrite( LED_R, LOW );
// Modalita' estiva
if (t > t_max)
digitalWrite( LED_B, HIGH );
else
digitalWrite( LED_B, LOW );
// Invia la temperatura al monitor seriale
Serial.println("+-------------------------------------------------------");
Serial.println("| Temperatura: " + String(t) + "C ");
// Attende due secondi prima di eseguire una nuova misurazione
delay(2000);
}
Si noti che le poche righe dello pseudocodice, mostrato all'inizio, rappresentano il cuore di tutto il programma.
In totale si trovano:
- definizioni che è buona prassi inserire sempre in testa al codice, così da ritrovarle e poterle modificare agevolmente;
- impostazioni iniziali contenute nel
setup
che vengono eseguite una sola volta (e dopo la pressione del tasto direset
); - lettura della temperatura dal sensore DHT11;
- verifica che il dato esista;
- azionamento dell'impianto di riscaldamento o ventilazione;
- invio dei dati alla porta seriale;[2]
- intervallo tra due azioni.[3]
Espansioni suggerite
modifica- Chi ha seguito con attenzione avrà sicuramente notato che per modificare le temperature di soglia occorre modificare il codice. Quindi la prima e più semplice espansione è l'aggiunta di due potenziometri che impostino le temperature di comfort, così da poter utilizzare il dispositivo senza doverlo riprogrammare.
- Per gli appassionati di controlli automatici, non è difficile inserire un ciclo di isteresi (data una temperatura di soglia, far si che accensione e spegnimento siano leggermente spostate sopra e sotto di essa). Questo è ciò che avviene nella pratica quotidiana, per prolungare la vita media dei dispositivi ed evitare che un impianto di riscaldamento (a una temperatura pari a quella di soglia) si accenda e spenga in continuazione.
Note
modifica- ↑ Non si pensi al costo del singolo componente (un led costa davvero poco, meno di un centesimo) ma una volta inserito in un circuito, dissaldarlo e sostituirlo non è affatto economico, in particolare se il componente è molto piccolo.
- ↑ Si noti che questi possono essere visualizzati anche sotto forma di grafico.
- ↑ Anche in questo caso è bene ricordare che si è utilizzato un tempo pari a per non appesantire troppo l'attesa. In una situazione domestica si esegue una lettura ogni due minuti per via dell'inerzia termica.