Robotica educativa/Temperatura e umidità

Indice del libro

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 acquisire 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 ).

Tavola per il calcolo della temperatura percepita, partendo dalla temperatura e umidità relativa.

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

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.

 
Connessione del sensore di umidità e temperatura DHT11.

Pertanto, considerato tutto quello che si ottiene da questo sensore, bisogna riconoscere che la sua installazione è decisamente semplice.

Codice modifica

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à;
  • 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

  • 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.