Robotica educativa/Temperatura e umidità

Indice del libro

Arduino non è solo una scheda programmabile. È un sistema 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 modulo, 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) e – all'aumentare della temperatura e umidità – arriva a un contesto di pericolo () fino a 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 e nero) e poi connesso ad Arduino (filo blu).

Per ottenere misurazioni più precise, è buona norma inserire una resistenza di pullup da   per ottenere valori più accurati. Ma, anche senza, i dati 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, necessaria per operare col sensore di temperatura e umidità;
  • il pin in cui viene connesso il sensore e il tipo di sensore utilizzato;
  • l'inizializzazione del sensore e della porta seriale;
  • dopodiché seguono cinque acquisizioni: umidità relativa, temperatura (prima in Celsius, poi in Fahrenheit), temperatura percepita (lo standard è in Fahrenheit, poi viene acquisita in Celsius, qui è stata descritta sempre in Celsius per evitare confusioni);
  • se uno dei parametri acquisiti non è stato creato scrive che il sensore non è connesso (cosa utilissima, 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 +5V
// Il pin 3 va a massa

// Per una maggior accuratezza il pin 1 va collegato a +5V
// con una resistenza di pullup da 10K (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 un output corretto per proseguire
  if (isnan(h) || isnan(t) || isnan(f)) {
    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");

  // Esegue una misurazione ogni due secondi.
  delay(2000);  
}

Espansioni suggerite modifica

  • Un progetto molto semplice è realizzare un termostato: stabilendo a quale temperatura debba attivarsi, si accenderà un LED quando i termosifoni devono accendersi e 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 è realmente consapevoli di quello che si sta facendo).
  • 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, rendendolo completamente indipendente dal computer.