Costruire un monitor di temperatura e umidità con DHT11/DHT22 e Arduino

Il monitoraggio delle condizioni ambientali come la temperatura e l'umidità è essenziale per varie applicazioni, dall'automazione domestica alla gestione delle serre. Con la versatile piattaforma Arduino e sensori come DHT11 o DHT22, la creazione di un monitor di temperatura e umidità affidabile è sia conveniente che semplice. In questa guida, ti guideremo attraverso i componenti necessari, il processo di configurazione e la codifica necessaria per dare vita al monitor.

Componenti di cui hai bisogno

  • Arduino Uno
  • Sensore DHT11 o DHT22
  • Resistenza da 10k ohm
  • Breadboard e fili jumper
  • Display LCD (opzionale)
  • Cavo USB

Comprensione dei sensori DHT11/DHT22

Il DHT11 e il DHT22 sono sensori popolari per misurare la temperatura e l'umidità. Il DHT11 è conveniente e adatto per applicazioni di base, offrendo un intervallo di temperatura di 0-50 ° C con intervallo di precisione e umidità di ± 2 ° C del 20-80% con precisione ± 5%. Il DHT22, d'altra parte, fornisce un intervallo di temperatura più ampio da -40 a 80 ° C con ± 0,5 ° C di accuratezza e umidità dell'intervallo dello 0-100% con una precisione ± 2-5%, rendendolo ideale per progetti più impegnativi.

Cablaggio del sensore ad Arduino

Segui questi passaggi per collegare il sensore DHT all'Arduino:

  1. Connessioni di alimentazione: Collegare il pin VCC del sensore DHT al pin 5V sull'Arduino e sul perno GND a terra (GND).
  2. Pin di dati: Collegare il pin di dati del sensore DHT a un perno di ingresso digitale sull'Arduino (comunemente pin 2).
  3. Resistore pull-up: Posizionare un resistore da 10k ohm tra il VCC e il pin di dati per garantire una trasmissione di dati stabile.
  4. Display LCD (opzionale): Se si utilizza un LCD, collegarlo ai pin Arduino appropriati per la visualizzazione delle letture.

Programmazione dell'Arduino

Per leggere i dati dal sensore DHT, useremo il DHT.h Biblioteca, che semplifica il processo. Di seguito è riportato uno snippet di codice di esempio per iniziare:

// Include the DHT library
#include <DHT.h>

// Define the sensor type and the pin it's connected to
#define DHTPIN 2
#define DHTTYPE DHT22 // Change to DHT11 if you're using that model

// Initialize the DHT sensor
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  // Start serial communication
  Serial.begin(9600);
  // Initialize the DHT sensor
  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements
  delay(2000);

  // Read humidity and temperature
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // Check if any reads failed
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Print the results to the Serial Monitor
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" *C");
}

Spiegazione del codice:

  • IL DHT.h La libreria è inclusa per facilitare la comunicazione con il sensore.
  • Definiamo il tipi di pin e sensore di dati utilizzando #define.
  • Nel setup() funzione, inizializziamo la comunicazione seriale e il sensore DHT.
  • IL loop() La funzione legge l'umidità e la temperatura ogni due secondi e li stampa sul monitor seriale.

Visualizzazione dei dati

Per una configurazione più user-friendly, è possibile visualizzare le letture su un LCD. Modifica il codice per inviare dati al LCD anziché al monitor seriale. Assicurati di avere la libreria LCD appropriata installata e configurare i pin di conseguenza.

Codice di esempio per la visualizzazione LCD:

// Include necessary libraries
#include <DHT.h>
#include <LiquidCrystal.h>

// Define sensor and LCD pins
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

// Initialize the LCD (adjust pin numbers as needed)
LiquidCrystal lcd(12, 11, 5, 4, 3, 6);

void setup() {
  // Start serial communication
  Serial.begin(9600);
  dht.begin();
  // Initialize the LCD
  lcd.begin(16, 2);
  lcd.print("Temp & Humidity");
}

void loop() {
  delay(2000);

  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  if (isnan(humidity) || isnan(temperature)) {
    lcd.clear();
    lcd.print("Sensor Error");
    return;
  }

  // Display on LCD
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.print(humidity);
  lcd.print(" %");
}

Testare la configurazione

Dopo aver caricato il codice sul tuo Arduino, aprire il monitor seriale (se si utilizza l'uscita seriale) o osservare il display LCD. Dovresti vedere letture di temperatura e umidità in tempo reale. Assicurati che le connessioni siano sicure e che il sensore funzioni correttamente. Se si incontrano problemi, ricontrollare il cablaggio e verificare che il tipo di sensore corretto sia definito nel codice.

Miglioramenti e passaggi successivi

Ora che hai un monitor di temperatura e umidità di base, considera i seguenti miglioramenti:

  • Registrazione dei dati: Collega il tuo Arduino a un modulo di scheda SD per registrare i dati nel tempo per l'analisi.
  • Monitoraggio wireless: Utilizzare moduli come ESP8266 o Bluetooth per inviare dati allo smartphone o ai servizi cloud.
  • Avvisi: Implementa gli avvisi basati sulla soglia che utilizzano LED o cicalini per avvisare condizioni estreme.
  • Sensori multipli: Espandi la configurazione per includere ulteriori sensori per parametri come la qualità dell'aria o l'intensità della luce.

Conclusione

Costruire un monitor di temperatura e umidità con DHT11/DHT22 e Arduino è un progetto eccellente per principianti e appassionati. Fornisce esperienza pratica con integrazione del sensore, elaborazione dei dati e tecniche di visualizzazione. Per uso personale o come base per sistemi più complessi, questo progetto mostra la potenza e la flessibilità dell'ecosistema Arduino. Felice edificio!

Lascia un commento

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.