Εργαστηριακή Άσκηση 11: Μέτρηση Θερμοκρασίας – Υγρασίας με το DHT11
Αισθητήρες Θερμοκρασίας και Υγρασίας DHT11 – DHT22
Οι αισθητήρες θερμοκρασίας και υγρασίας DHT11 και DHT22 είναι εργοστασιακά βαθμονομημένοι και δεν απαιτούν εξωτερικά εξαρτήματα για να λειτουργήσουν. Με λίγες μόνο συνδέσεις και την ενσωμάτωση της απαιτούμενης βιβλιοθήκης στον κώδικα του Arduino, μπορούμε να ξεκινήσουμε να τους χρησιμοποιούμε για τη μέτρηση της θερμοκρασίας και της σχετικής υγρασίας. Έχουν ακρίβεια ενός δεκαδικού ψηφίου και μπορούν να παρέχουν νέα δεδομένα κάθε ένα με δύο δευτερόλεπτα.
Οι DHT11 και DHT22 είναι οι δύο πιο ευρέως χρησιμοποιούμενοι αισθητήρες της σειράς DHTxx. Μοιάζουν πολύ μεταξύ τους και έχουν την ίδια διάταξη ακροδεκτών, αλλά οι προδιαγραφές τους είναι διαφορετικές. Από τα δύο, το DHT22 είναι πιο ακριβό και έχει καλύτερες προδιαγραφές. Το DHT22 μπορεί να μετρήσει θερμοκρασίες από -40°C έως +125°C με ακρίβεια ±0,5 °C, ενώ το DHT11 μπορεί να μετρήσει θερμοκρασίες από 0°C έως 50°C με ακρίβεια ±2°C. Επιπλέον, ο αισθητήρας DHT22 μπορεί να μετρήσει σχετική υγρασία από 0 έως 100% με ακρίβεια 2-5%, ενώ ο αισθητήρας DHT11 μπορεί να μετρήσει σχετική υγρασία μόνο από 20 έως 80% με ακρίβεια 5%.

Παρά το γεγονός ότι το DHT22 είναι πιο ακριβές και ικανό να λειτουργεί σε μεγαλύτερο εύρος θερμοκρασίας και υγρασίας, υπάρχουν τρία σημεία όπου το DHT11 υπερτερεί: είναι πιο προσιτό, πιο συμπαγές και έχει υψηλότερο ρυθμό δειγματοληψίας. Το DHT11 κάνει ανάγνωση μία φορά ανά δευτερόλεπτο (ρυθμός δειγματοληψίας 1 Hz), ενώ το DHT22 μετράει μία φορά κάθε δύο δευτερόλεπτα (ρυθμός δειγματοληψίας 0,5 Hz). Παρά τις διαφορές τους, η τάση λειτουργίας και των δύο αισθητήρων κυμαίνεται από 3 έως 5 volt, με μέγιστο ρεύμα 2,5 mA (κατά τη μετατροπή).
- Ένα μεγάλο πλεονέκτημα είναι ότι οι αισθητήρες DHT11 και DHT22 μπορούν να εναλλάσσονται, πράγμα που σημαίνει ότι αν δημιουργήσουμε ένα project με τον έναν αισθητήρα, μπορούμε απλά να τον αποσυνδέσουμε και να τον αντικαταστήσουμε με τον άλλο. Ο κώδικας μπορεί να χρειαστεί να τροποποιηθεί λίγο, αλλά η καλωδίωση θα παραμείνει η ίδια!
Μέτρηση Θερμοκρασίας
Ο αισθητήρας περιλαμβάνει ένα θερμίστορ NTC για τη μέτρηση της θερμοκρασίας. Το θερμίστορ είναι ένας τύπος αντίστασης η οποία μεταβάλλεται ανάλογα με τη θερμοκρασία. Τεχνικά, όλες οι αντιστάσεις είναι θερμίστορ με την έννοια ότι η αντίστασή τους αλλάζει ελαφρώς με τη θερμοκρασία, αλλά η αλλαγή είναι συνήθως πολύ μικρή και δύσκολο να μετρηθεί. Τα θερμίστορ είναι σχεδιασμένα έτσι ώστε η αντίστασή τους να αλλάζει πολύ με τη θερμοκρασία (κατά 100 ohms ή περισσότερο ανά βαθμό). Ο όρος “NTC” σημαίνει Negative Temperature Coefficient – Αρνητικός Συντελεστής Θερμοκρασίας, που σημαίνει ότι η αντίσταση μειώνεται καθώς αυξάνεται η θερμοκρασία.

Μέτρηση Υγρασίας
Ο αισθητήρας ανίχνευσης υγρασίας έχει δύο ηλεκτρόδια με ένα ενδιάμεσο στρώμα συγκράτησης υγρασίας μεταξύ τους. Καθώς αυξάνεται η υγρασία, το ενδιάμεσο στρώμα απορροφά υδρατμούς, με αποτέλεσμα την απελευθέρωση ιόντων και τη μείωση της αντίστασης μεταξύ των δύο ηλεκτροδίων. Αυτή η αλλαγή στην αντίσταση είναι ανάλογη με την υγρασία, η οποία μπορεί να μετρηθεί για να εκτιμηθεί η σχετική υγρασία.

- Ο αισθητήρας επίσης ενσωματώνει ένα ολοκληρωμένο κύκλωμα μετατροπέα αναλογικού σήματος σε ψηφιακό ADC 8-bit. Ο μετατροπέας επεξεργάζεται το αναλογικό σήμα χρησιμοποιώντας αποθηκευμένους συντελεστές βαθμονόμησης και το μετατρέπει σε ψηφιακό που περιέχει τη μετρούμενη θερμοκρασία και υγρασία.
DHT11 και DHT22 Pinout
Οι αισθητήρες DHT11 και DHT22 είναι και οι δύο σχετικά απλοί στη σύνδεση, με 3 ή 4 ακροδέκτες.
Απαιτούν συνήθως μια εξωτερική αντίσταση pull up 4,7Κ – 10K στην ακίδα εξόδου για σωστή επικοινωνία μεταξύ του αισθητήρα και του Arduino. Όταν διατίθεται με τη μορφή πλακέτας περιλαμβάνει ήδη μια αντίσταση pull up και έναν πυκνωτή απόζευξης για το φιλτράρισμα του θορύβου τροφοδοσίας.

VCC: Η ακίδα τροφοδοσίας του αισθητήρα. Παρά το γεγονός ότι η τάση τροφοδοσίας κυμαίνεται από 3,3V έως 5,5V, συνιστάται τροφοδοσία 5V. Με τροφοδοσία 5 V ο αισθητήρας μπορεί να τοποθετηθεί έως και 20 μέτρα μακριά. Με τάση τροφοδοσίας 3,3 V, ο αισθητήρας μπορεί να τοποθετηθεί έως και 1 μέτρο μακριά. Διαφορετικά, η πτώση τάσης της γραμμής θα προκαλέσει σφάλματα μέτρησης.
Data ή Out: Η ακίδα χρησιμοποιείται για την επικοινωνία μεταξύ του αισθητήρα και του μικροελεγκτή.
NC: Μη συνδεδεμένο
GND: είναι ο ακροδέκτης γείωσης.
Σύνδεση των αισθητήρων DHT11 και DHT22 με το Arduino uno


Εγκατάσταση βιβλιοθήκης
Οι αισθητήρες DHTxx έχουν το δικό τους αποκλειστικό πρωτόκολλο μεταφοράς δεδομένων ενός καλωδίου (one wire protocol). Αυτό το πρωτόκολλο απαιτεί ακριβή χρονισμό για αυτό θα χρησιμοποιήσουμε τη βιβλιοθήκη DHTlib , η οποία μπορεί να διαχειριστεί την διαδικασία λήψης μετρήσεων. Για να εγκαταστήσετε τη βιβλιοθήκη, μεταβείτε στο Sketch > Include Library > Manage Libraries και κάνουμε αναζήτηση τη βιβλιοθήκη “dhtlib” του Rob Tillaart.

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

Άσκηση
Κατασκευάστε το κύκλωμα του παρακάτω σχήματος.

#include <dht.h> //Rob Tilaart library for AVR
#include <LiquidCrystal_I2C.h>
dht DHT;
#define DHT11_PIN 4
int temperature;
int humidity;
int readData = 0;
LiquidCrystal_I2C lcd1(0x27, 16, 2);
void setup()
{
lcd1.init();
lcd1.backlight();
lcd1.setCursor(0, 0);
lcd1.print("Ergasia Arduino");
lcd1.setCursor(0, 1);
lcd1.print("Weather Station");
delay(2000);
lcd1.clear();
}
void loop()
{
readData = DHT.read11(DHT11_PIN);
temperature = DHT.temperature;
humidity = DHT.humidity;
lcd1.setCursor(0, 0);
lcd1.print("Temperature=");
lcd1.print(temperature);
lcd1.print((char) 223);
lcd1.print("C");
if (temperature < 100)
{
lcd1.print(" ");
}
If (temperature < 10)
{
lcd1.print(" ");
}
lcd1.setCursor(0, 1);
lcd1.print("Humidity=");
if(humidity < 10)
{
lcd1.print(" ");
}
lcd1.print(humidity);
lcd1.setCursor(12, 1);
lcd1.print("%");
}
