Czujniki DHT11 |
Specyfikacja
- zasilanie od 3 do 5,5V
- pobierany prąd maksymalnie do 2,5mA
- pomiar wilgotności
- rozdzielczość 1% RH (8bit)
- dokładność ±5% RH w przedziale temperatur 0 - 50° C
- zakres pomiarowy 30% do 80% RH
- czas odpowiedzi maksymalnie 15s
- pomiar temperatury
- rozdzielczość 1°C (8bit)
- dokładność ±2°C
- zakres pomiarowy 0° C do 50°C
- czas odpowiedzi maksymalnie 30s
- protokół wymiany informacji: single-wire
Patrząc na specyfikację, można powiedzieć, że czujnik przeznaczony jest do pracy wewnątrz o niezbyt dokładnym pomiarze temperatury i dużym czasem odpowiedzi na zmiany mierzonych wielkości. Zakres pomiarowy temperatury pokrywa się z zakresem temperatur w których można mierzyć wilgotność. Wobec tego, poza śledzeniem samej temperatury, można monitorować dodatkowo poprawność warunków pracy czujnika, jeśli chodzi o pomiar wilgotności.
Czujnik wykorzystuje protokół do wymiany danych o nazwie "Single-Wire Two-Way". To nie jest to samo co 1-Wire. Poza inną "konstrukcją" protokołu jeszcze jest widoczna taka różnica, że na 1-Wire można łączyć wiele urządzeń. W przypadku Single-Wire tylko jedno urządzenie z uwagi na brak adresowania.
Piny
Uruchomienie
Niestety, pierwsza próba uruchomienia modułu z czujnikiem nie powiodła się. Na terminalu wyskoczył mi komunikat o błędzie odczytu danych. Komunikacja ruszyła dopiero po wymianie oryginalnego rezystora o wartości 5,2kΩ na 10kΩ. Operacja była o tyle kłopotliwa w przypadku posiadanego modułu, że są to rezystory SMD o wymiarze 0805. Rozwiązanie tego problemu (zmiana rezystora) znalazłem jako jedno z możliwych na Google. Nie znalazłem jednak informacji o powodach tych problemów i wpływie na nie wartości rezystora podciągającego. Warto nadmienić, że w dokumentacji (3) na schemacie połączeń (strona 5) widnieje rezystor 5kΩ. Z drugiej jednak strony na zdjęciu modułu z drugiej strony dokumentacji widać, że jest wlutowany rezystor 10kΩ.
Podłączenie czujnika |
Przykładowy kod uruchomieniowy z usuniętym pokazywaniem temperatury w Fahrenheit'ach i kilkoma niekoniecznie przydatnymi mi komentarzami.
#include "DHT.h" #define DHTPIN 2 // what digital pin we're connected to #define DHTTYPE DHT11 // DHT 11 // Initialize DHT sensor. DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); } void loop() { // Wait a few seconds between measurements. delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print("Heat index: "); Serial.print(hic); Serial.println(" *C "); }
Źródła
1) Kod biblioteki DHT-sensor-library
2) DHTxx Sensors
3) Specyfikacja DHT11
4) Compare DHT22, DHT11 and Sensirion SHT71
Brak komentarzy:
Prześlij komentarz