![]() |
| 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