Robotica educativa/Temperatura e umidità
Arduino non è soltanto una scheda programmabile. È un sistema di controllo attorno al quale sono stati sviluppati innumerevoli sensori e attuatori, i quali consentono di trasformare le grandezze fisiche in grandezze elettriche e viceversa.
In questo capitolo, più che una vera e propria stazione meteorologica, attraverso il sensore DHT11 (della categoria DHT, ne esistono più d'uno a seconda delle caratteristiche) verranno acquisite direttamente:
- l'umidità relativa;
- la temperatura (sia in gradi Celsius, sia Fahrenheit, senza dover ricordarsi come eseguire la conversione);
- la stima della temperatura percepita (sempre in gradi Celsius e Fahrenheit).
Nella tabella sottostante viene mostrata la temperatura percepita (simbolo, ), la quale viene calcolata in funzione della temperatura e dell'umidità relativa. A seconda della combinazione di questi due fattori il contesto può essere definito di attenzione (nell'intervallo ), di estrema attenzione (quando ) fino ad arrivare – all'aumentare della temperatura e umidità – a un contesto di pericolo () superati i quali, si parla di estremo pericolo (quando ).
Questi intervalli sono stati mostrati perché consentono di realizzare un ponte tra robotica e fisica applicata, inoltre – se si volesse indicare lo stato della temperatura percepita con quattro LED – conoscere questi intervalli semplifica notevolmente la scrittura del codice.
Schema di montaggio
[modifica | modifica sorgente]Il sensore di umidità e temperatura deve semplicemente essere alimentato (fili rosso, collegato a , e filo nero, collegato a ) e poi il terminale che restituisce la misurazione va connesso a un pin di acquisizione dati di Arduino (filo blu).
Per ottenere misurazioni più precise, è buona norma inserire una resistenza di pullup da tra il pedino che restituisce i dati e l'alimentazione positiva (). Ma, anche senza questa resistenza, i dati ottenuti sono sufficientemente affidabili, nell'ordine del mezzo grado.
Pertanto, considerato tutto quello che si ottiene da questo sensore, bisogna riconoscere che la sua installazione è decisamente semplice.
Codice
[modifica | modifica sorgente]Il codice viene commentato punto per punto ma, per comprenderlo meglio, nell'ordine si trova:
- l'inclusione della libreria DHT, che fornisce nuovi comandi per operare col sensore di temperatura e umidità;[1]
- il pin in cui viene connesso il sensore e il tipo di sensore utilizzato (come anticipato, esiste più di un sensore di temperatura e umidità);
- l'inizializzazione del sensore e della porta seriale (con quest'ultima inviamo i dati al computer);
- dopodiché seguono cinque acquisizioni: umidità relativa, temperatura (prima in gradi Celsius, poi in Fahrenheit), temperatura percepita (lo standard è in gradi Fahrenheit, dopodiché viene acquisita in Celsius, qui è stata descritta sempre in Celsius per evitare confusioni);
- se uno dei parametri acquisiti non è stato fornito, il programma scriverà che il sensore non è connesso (cosa utilissima, soprattutto in fase di test);
- altrimenti, mostra tutti i dati acquisiti;
- ferma Arduino per 2 secondi (lo standard nei termostati delle abitazioni sarebbe 2 minuti, ma la visualizzazione sarebbe troppo lenta).
#include "DHT.h" // Driver per i sensori della serie DHT
#define DHTPIN 3 // 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)
// Per una maggior accuratezza il pin 1 va collegato a +5 V
// attraverso una resistenza di pullup da 10 K (facoltativo)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600); // Inizializza il monitor seriale
dht.begin(); // Inizializza il sensore DHT
}
void loop() {
// Acquisisce l'umidita' relativa
float h = dht.readHumidity();
// Acquisisce la temperatura in Celsius (parametro di default)
float t = dht.readTemperature();
// Acquisisce la temperatura in Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Acquisisce la temperatura percepita in Fahrenheit (default)
float hif = dht.computeHeatIndex(f, h);
// Acquisisce la temperatura percepita in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
// Controlla se il sensore ha fornito tutti gli output prima di proseguire
if (isnan(h) || isnan(t) || isnan(f) || isnan(hif) || isnan(hic)) {
Serial.println(F("+---------------------------+"));
Serial.println(F("| Sensore DHT non connesso! |"));
return; // Questo comando provoca l'uscita dalla funzione che verra' rieseguita
}
Serial.println("+-------------------------------------------------------");
Serial.println("| Umidita': " + String(h) + "%");
Serial.println("| Temperatura: " + String(t) + "C " + String(f) + "F");
Serial.println("| Temperatura percepita: " + String(hic) + "C " + String(hif) + "F");
// Attende due secondi prima di eseguire una nuova misurazione
delay(2000);
}
Espansioni suggerite
[modifica | modifica sorgente]- Un progetto molto semplice è realizzare un termostato: si stabilisce a quale temperatura debba attivarsi e ― a quel punto ― si accenderà un LED per indicare che i termosifoni devono accendersi, similmente lo si spegnerà quando viene raggiunta la temperatura desiderata. Se si sostituisce il diodo LED con un relè l'uscita può comandare i termosifoni di casa (NB quest'operazione va presa in considerazione solo se si è realmente consapevoli di quello che si sta facendo).
- D'estate, l'operazione può essere rovesciata: raggiunta una temperatura elevata si fa partire un motore collegato a un'elica. Questo raffredderà il sensore di temperatura e ― quando si sarà tornati a una situazione di comfort ― la ventola si arresterà automaticamente.
- Sempre riguardo quest'argomento, la temperatura desiderata, potrebbe essere impostata tramite una resistenza variabile (o due pulsanti) come avviene in un qualsiasi termostato professionale.
- Inoltre, una scheda Arduino può gestire più sensori di temperatura: in questo modo si possono monitorare (e gestire), zona giorno e zona notte.
- Per quanto riguarda la temperatura percepita, è possibile utilizzare quattro diodi LED per notificare le sue situazioni critiche.
- Infine, utilizzando un display per mostrare i dati acquisiti, è possibile visualizzare i dati analizzati e collegare Arduino a una batteria, rendendo il sistema completamente indipendente dal computer.
Note
[modifica | modifica sorgente]- ↑ La libreria DHT, se non già presente, deve essere installata. La procedura, all'interno dell'ambiente di sviluppo di Arduino è: menù Sketch > Include Library > Manage libraries > DHT sensor library.