Spisu treści:

DHT12 (i2c tani czujnik wilgotności i temperatury), szybkie i łatwe użytkowanie: 14 kroków
DHT12 (i2c tani czujnik wilgotności i temperatury), szybkie i łatwe użytkowanie: 14 kroków

Wideo: DHT12 (i2c tani czujnik wilgotności i temperatury), szybkie i łatwe użytkowanie: 14 kroków

Wideo: DHT12 (i2c tani czujnik wilgotności i temperatury), szybkie i łatwe użytkowanie: 14 kroków
Wideo: Układy BMP280/BME280 - czyli prosto o mierzeniu ciśnienia, temperatury i wilgotności 2024, Listopad
Anonim
DHT12 (i2c tani czujnik wilgotności i temperatury), szybkie łatwe użytkowanie
DHT12 (i2c tani czujnik wilgotności i temperatury), szybkie łatwe użytkowanie

Aktualizacje i inne można znaleźć na mojej stronie

Podoba mi się czujnik, który może być używany z 2 przewodami (protokół i2c), ale uwielbiam ten niedrogi.

Jest to biblioteka Arduino i esp8266 dla serii DHT12 bardzo tanich czujników temperatury/wilgotności (poniżej 1$), które współpracują z i2c lub połączeniem jednoprzewodowym.

Bardzo przydatne, jeśli chcesz użyć esp01 (jeśli używasz portu szeregowego, masz tylko 2 piny) do odczytu wilgotności i temperatury i wyświetlenia ich na i2c LCD.

AI przeczytało, że czasami wydaje się, że wymaga kalibracji, ale mam drzewo tego i uzyskuję wartość bardzo podobną do DHT22. Jeśli masz kalibrację tego problemu, otwórz problem na github i dodaję implementację.

Krok 1: Jak działa I2c

Jak działa I2c
Jak działa I2c

I2C współpracuje z dwoma przewodami, SDA (linia danych) i SCL (linia zegara).

Obie te linie są otwarte, ale są podciągnięte rezystorami.

Zwykle na linii jest jeden master i jeden lub więcej slaveów, chociaż może być wielu masterów, ale o tym porozmawiamy później.

Zarówno urządzenia nadrzędne, jak i podrzędne mogą przesyłać lub odbierać dane, dlatego urządzenie może znajdować się w jednym z tych czterech stanów: przesyłanie urządzenia nadrzędnego, odbiór urządzenia nadrzędnego, przesyłanie urządzenia podrzędnego, odbiór urządzenia podrzędnego.

Krok 2: Biblioteka

Moją bibliotekę znajdziesz tutaj.

Pobrać

Kliknij przycisk POBIERZ w prawym górnym rogu, zmień nazwę nieskompresowanego folderu DHT12.

Sprawdź, czy folder DHT zawiera DHT12.cpp i DHT12.h.

Umieść folder biblioteki DHT w folderze /libraries/.

Może być konieczne utworzenie podfolderu biblioteki, jeśli jest to Twoja pierwsza biblioteka.

Uruchom ponownie środowisko IDE.

Krok 3: Zachowanie

Ta biblioteka próbuje emulować zachowanie standardowych czujników biblioteki DHT (i kopiuje dużo kodu), a ja dodaję kod do zarządzania i2c olso w ten sam sposób.

Metoda jest taka sama jak w przypadku czujnika biblioteki DHT, z kilkoma dodanymi funkcjami punktu rosy.

Krok 4: Wykorzystanie I2c

Do użycia z i2c (domyślny adres i domyślny pin SDA SCL) konstruktor to:

DHT12 dht12;

i weź domyślną wartość dla pinu SDA SCL.

(Możliwe jest przedefiniowanie za pomocą określonego konstruktora dla esp8266, potrzebnego dla ESP-01). lub

DHT12 dht12(uint8_t adresOrPin)

adresOrPin -> adres

zmienić adres.

Krok 5: Użycie jednego przewodu

Aby użyć jednego przewodu:

DHT12 dht12(uint8_t adresOrPin, prawda)

adresOrPin -> pin

wartość logiczna to wybór trybu oneWire lub i2c.

Krok 6: Odczyt niejawny

Możesz użyć It z "niejawnym", "prostym odczytem" lub "pełnym odczytem": Niejawny, tylko pierwszy odczyt wykonuje prawdziwy odczyt czujnika, drugi odczyt trwa 2 sekundy. interwał to zapamiętana wartość pierwszego odczytu.

// Odczyt czujnika ma 2 sekundy czasu, który upłynął, chyba że przekażesz parametr siły

// Odczytaj temperaturę w stopniach Celsjusza (domyślnie) float t12 = dht12.readTemperature(); // Odczytaj temperaturę w stopniach Fahrenheita (isFahrenheit = true) float f12 = dht12.readTemperature(true); // Odczyty czujnika mogą być również „stare” do 2 sekund (jest to bardzo wolny czujnik) float h12 = dht12.readHumidity(); // Oblicz indeks ciepła w stopniach Fahrenheita (domyślnie) float hif12 = dht12.computeHeatIndex(f12, h12); // Oblicz indeks ciepła w stopniach Celsjusza (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Oblicz punkt rosy w stopniach Fahrenheita (domyślnie) float dpf12 = dht12.dewPoint(f12, h12); // Oblicz punkt rosy w stopniach Celsjusza (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Krok 7: Proste czytanie

Proste przeczytanie, aby uzyskać status przeczytania.

// Odczyt czujnika ma 2 sekundy czasu, który upłynął, chyba że przekażesz parametr siły

bool chk = dht12.read(); // prawda odczyt jest ok, fałszywy problem z odczytem

// Odczytaj temperaturę w stopniach Celsjusza (domyślnie)

float t12 = dht12.odczytajTemperatura(); // Odczytaj temperaturę w stopniach Fahrenheita (isFahrenheit = true) float f12 = dht12.readTemperature(true); // Odczyty czujnika mogą być również „stare” do 2 sekund (jest to bardzo wolny czujnik) float h12 = dht12.readHumidity(); // Oblicz indeks ciepła w stopniach Fahrenheita (domyślnie) float hif12 = dht12.computeHeatIndex(f12, h12); // Oblicz indeks ciepła w stopniach Celsjusza (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Oblicz punkt rosy w stopniach Fahrenheita (domyślnie) float dpf12 = dht12.dewPoint(f12, h12); // Oblicz punkt rosy w stopniach Celsjusza (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Krok 8: Pełne przeczytanie

Pełny odczyt, aby uzyskać określony status.

// Odczyt czujnika ma 2 sekundy czasu, który upłynął, chyba że przekażesz parametr siły

DHT12::ReadStatus chk = dht12.readStatus(); Serial.print(F("\nOdczytaj czujnik: ")); przełącznik (chk) { przypadek DHT12::OK: Serial.println(F("OK")); przerwa; przypadek DHT12::ERROR_CHECKSUM: Serial.println(F("Błąd sumy kontrolnej")); przerwa; przypadek DHT12::ERROR_TIMEOUT: Serial.println(F("Błąd limitu czasu")); przerwa; case DHT12::ERROR_TIMEOUT_LOW: Serial.println(F("Błąd przekroczenia limitu czasu przy niskim sygnale, spróbuj ustawić wysoką odporność na podciąganie")); przerwa; case DHT12::ERROR_TIMEOUT_HIGH: Serial.println(F("Błąd przekroczenia limitu czasu przy niskim sygnale, spróbuj ustawić niski opór pullup")); przerwa; case DHT12::ERROR_CONNECT: Serial.println(F("Błąd połączenia")); przerwa; przypadek DHT12::ERROR_ACK_L: Serial.println(F("Błąd potwierdzenia")); przerwa; przypadek DHT12::ERROR_ACK_H: Serial.println(F("Błąd AckH")); przerwa; przypadek DHT12::ERROR_UNKNOWN: Serial.println(F("Wykryto nieznany błąd")); przerwa; case DHT12::NONE: Serial.println(F("Brak wyniku")); przerwa; domyślnie: Serial.println(F("Nieznany błąd")); przerwa; }

// Odczytaj temperaturę w stopniach Celsjusza (domyślnie)

float t12 = dht12.odczytajTemperatura(); // Odczytaj temperaturę w stopniach Fahrenheita (isFahrenheit = true) float f12 = dht12.readTemperature(true); // Odczyty czujnika mogą być również „stare” do 2 sekund (jest to bardzo powolny czujnik) float h12 = dht12.readHumidity(); // Oblicz indeks ciepła w stopniach Fahrenheita (domyślnie) float hif12 = dht12.computeHeatIndex(f12, h12); // Oblicz indeks ciepła w stopniach Celsjusza (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Oblicz punkt rosy w stopniach Fahrenheita (domyślnie) float dpf12 = dht12.dewPoint(f12, h12); // Oblicz punkt rosy w stopniach Celsjusza (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Krok 9: Schemat połączeń

Na przykładach jest schemat połączeń, ważne jest, aby użyć odpowiedniego rezystora pullup.

Podziękowania dla Bobadas, dplasa i adafruit za udostępnienie kodu na githubie (gdzie biorę trochę kodu i pomysłów).

Krok 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Krok 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Krok 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Krok 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Krok 14: Dzięki

Plac zabaw Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)

Seria projektów i2c (Kolekcja):

  • Czujnik wilgotności temperatury
  • Ekspander analogowy
  • Ekspander cyfrowy
  • Wyświetlacz LCD

Zalecana: