Πώς να διαβάσετε την θερμοκρασία και την υγρασία με τον DHT22 και το Arduino

Στα πλαίσια του IoT (Internet of Things), μια από τις πιο συνηθισμένες εφαρμογές είναι η παρακολούθηση και μέτρηση της θερμοκρασίας και υγρασίας ενός χώρου. Με την βοήθεια του Arduino UNO board, θα χρησιμοποιήσουμε τον απλό αισθητήρα DHT22 για να καταφέρουμε ακριβώς αυτό.

Το παρακάτω Project αυτό είναι μια εισαγωγή στον αισθητήρα DHT22 με το Arduino και θα σας οδηγήσει βήμα βήμα για το πώς μπορείτε να χρησιμοποιήσετε τον αισθητήρα για να βρείτε την θερμοκρασία και την υγρασία στον χώρο σας και να την εκτυπώσετε στο Serial Monitor του Arduino IDE.

Προϋπόθεση για να χρησιμοποιήσετε τον DHT22 αισθητήρα είναι να έχετε εγκαταστήσει σωστά το Arduino IDE στον υπολογιστή μας.

Επισκόπηση του Project

Αν και το Arduino έχει προεγκατεστημένες κάποιες βιβλιοθήκες και sketch, η βιβλιοθήκη του DHT22 αισθητήρα δεν υπάρχει. Οπότε θα χρειαστεί να την κατεβάσετε. Ο αισθητήρας που μετρά την θερμοκρασία και υγρασία στον χώρο έχει 4 pins.

  • Pin τροφοδοσίας 5V
  • Pin γείωσης GND
  • Pin δεδομένων
  • NC Pin

Το NC ή Not Connected είναι το pin που δεν θα χρησιμοποιηθεί και δεν θα συνδεθεί σε κάποιο Pin του Arduino. Όλα τα δεδομένα θα μεταφερθούν μέσω του Out / Signal / Data pin που υπάρχει στον αισθητήρα.

Αισθητήρας DHT22

Αφού κάνετε εγκατάσταση της βιβλιοθήκης θα χρησιμοποιήσετε τον προκαθορισμένο κώδικα (test22) για να δείτε τις μετρήσεις. Εκτελώντας το με επιτυχία μπορείτε να χρησιμοποιήσετε τον κώδικα σε άλλα Project όπως θα δείτε και σε επόμενα άρθρα.

Λήψη της βιβλιοθήκης DHT22

Κατεβάζετε σε ZIP μορφή κάποιες βιβλιοθήκες από το αποθετήριο του RobTillaart στο Github. Μια από τις οποίες είναι και η βιβλιοθήκη για αυτό που χρειάζεστε. Εναλλακτικά, μπορείτε να κάνετε λήψη της βιβλιοθήκης DHT μέσω του FutureGeneration.

Εγκατάσταση της DHT22 βιβλιοθήκης

Αφού ολοκληρωθεί η λήψη, αποσυμπιέζετε το αρχείο και μεταφέρετε τον φάκελο DHTlib (αν κατεβάσατε ολόκληρο το αποθετήριο είναι μέσα στον φάκελο libraries) στο παρακάτω PATH των Windows.

Documents > Arduino > libraries

Αν χρησιμοποιείται διαφορετικό σύστημα, θα πρέπει να βρείτε που υπάρχει ο φάκελος Arduino και ο εσωτερικός φάκελος libraries. Αν ο φάκελος libraries δεν υπάρχει, μπορείτε να τον δημιουργήσετε.

Στον φάκελο Arduino > libraries τοποθετούμε ό,τι βιβλιοθήκες κατεβάζουμε από το web και θέλουμε να τις χρησιμοποιήσουμε στο Project μας.

Χαρακτηριστικά του DHT22 αισθητήρα

Θερμοκρασία -40 έως 125 °C
Υγρασία 0 έως 100%
Ρυθμός λήψης 0.5Hz (1 δείγμα/2sec)
Διαστάσεις 15.1mm x 25mm x 7.7mm
Τάση λειτουργίας 3V έως 5V
Μέγιστο ρεύμα 2.5mA

Σύνδεση του DHT22 με το Arduino board

  • Το Pin στον DHT22 αισθητήρα με το σύμβολο + δηλαδή η τροφοδοσία του συνδέεται με τα 5V του Arduino.
  • Το Pin στον DHT22 αισθητήρα με το σύμβολο – δηλαδή η γείωση του συνδέεται με τα GND δηλαδή την γείωση του Arduino.
  • To Pin στον DHT22 αισθητήρα με το σύμβολο Signal ή Out ή Data δηλαδή το σήμα εισόδου συνδέεται με τα ψηφιακό Pin D5 του Arduino.

Χρήση και υπολογισμός θερμοκρασίας και υγρασίας

Ανοίγετε το Arduino IDE και πηγαίνετε στην ακόλουθη διαδρομή.

File > Examples > DHTlib

Ανοίγετε το έτοιμο πρόγραμμα (sketch) dht22_test και το μεταμορφώνετε (upload) στο Arduino board. Εάν αντιμετωπίζετε πρόβλημα στο upload, ξαναδείτε πώς μπορείτε να εγκαταστήσετε σωστά το Arduino IDE στον υπολογιστή σας. Το παραθέτουμε παρακάτω:

// FILE: dht22_test.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.03
// PURPOSE: DHT library test sketch for DHT22 && Arduino
//     URL:
// HISTORY:
// 0.1.03 extended stats for all errors
// 0.1.02 added counters for error-regression testing.
// 0.1.01
// 0.1.00 initial version
// Released to the public domain

#include <dht.h>
dht DHT;
#define DHT22_PIN 5
struct
{
    uint32_t total;
    uint32_t ok;
    uint32_t crc_error;
    uint32_t time_out;
    uint32_t connect;
    uint32_t ack_l;
    uint32_t ack_h;
    uint32_t unknown;
} stat = { 0,0,0,0,0,0,0,0};

void setup()
{
    Serial.begin(115200);
    Serial.println("dht22_test.ino");
    Serial.print("LIBRARY VERSION: ");
    Serial.println(DHT_LIB_VERSION);
    Serial.println();
    Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)\tTime (us)");
}

void loop()
{
    // READ DATA
    Serial.print("DHT22, \t");

    uint32_t start = micros();
    int chk = DHT.read22(DHT22_PIN);
    uint32_t stop = micros();

    stat.total++;
    switch (chk)
    {
    case DHTLIB_OK:
        stat.ok++;
        Serial.print("OK,\t");
        break;
    case DHTLIB_ERROR_CHECKSUM:
        stat.crc_error++;
        Serial.print("Checksum error,\t");
        break;
    case DHTLIB_ERROR_TIMEOUT:
        stat.time_out++;
        Serial.print("Time out error,\t");
        break;
    case DHTLIB_ERROR_CONNECT:
        stat.connect++;
        Serial.print("Connect error,\t");
        break;
    case DHTLIB_ERROR_ACK_L:
        stat.ack_l++;
        Serial.print("Ack Low error,\t");
        break;
    case DHTLIB_ERROR_ACK_H:
        stat.ack_h++;
        Serial.print("Ack High error,\t");
        break;
    default:
        stat.unknown++;
        Serial.print("Unknown error,\t");
        break;
    }
    // DISPLAY DATA
    Serial.print(DHT.humidity, 1);
    Serial.print(",\t");
    Serial.print(DHT.temperature, 1);
    Serial.print(",\t");
    Serial.print(stop - start);
    Serial.println();

    if (stat.total % 20 == 0)
    {
        Serial.println("\nTOT\tOK\tCRC\tTO\tCON\tACK_L\tACK_H\tUNK");
        Serial.print(stat.total);
        Serial.print("\t");
        Serial.print(stat.ok);
        Serial.print("\t");
        Serial.print(stat.crc_error);
        Serial.print("\t");
        Serial.print(stat.time_out);
        Serial.print("\t");
        Serial.print(stat.connect);
        Serial.print("\t");
        Serial.print(stat.ack_l);
        Serial.print("\t");
        Serial.print(stat.ack_h);
        Serial.print("\t");
        Serial.print(stat.unknown);
        Serial.println("\n");
    }
    delay(2000);
}

Demo

Μέτρηση θερμοκρασίας και υγρασίας του χώρου

Υποβολή απάντησης