Obsah:

DHT12 (levný snímač vlhkosti a teploty i2c), rychlé snadné použití: 14 kroků
DHT12 (levný snímač vlhkosti a teploty i2c), rychlé snadné použití: 14 kroků

Video: DHT12 (levný snímač vlhkosti a teploty i2c), rychlé snadné použití: 14 kroků

Video: DHT12 (levný snímač vlhkosti a teploty i2c), rychlé snadné použití: 14 kroků
Video: Vidlákův Arduino teploměr VT001 2024, Listopad
Anonim
DHT12 (levné čidlo vlhkosti a teploty i2c), rychlé snadné použití
DHT12 (levné čidlo vlhkosti a teploty i2c), rychlé snadné použití

Aktualizace a další najdete na mém webu

Mám rád senzor, který lze použít se 2 vodiči (protokol i2c), ale miluji ten levný.

Toto je knihovna Arduino a esp8266 pro řadu velmi levných snímačů teploty/vlhkosti DHT12 (méně než 1 $), které pracují s i2c nebo jedním drátovým připojením.

Velmi užitečné, pokud chcete použít esp01 (pokud používáte sériové, máte pouze 2 piny) pro čtení vlhkosti a teploty a jejich zobrazení na i2c LCD.

AI četl, že to někdy vypadá, že to potřebuje kalibraci, ale mám strom toho a získávám hodnotu velmi podobnou DHT22. Pokud máte tento problém kalibraci, otevřete problém na github a přidám implementaci.

Krok 1: Jak I2c funguje

Jak I2c funguje
Jak I2c funguje

I2C pracuje se dvěma vodiči, SDA (datový řádek) a SCL (hodinový řádek).

Obě tyto linky jsou otevřené, ale jsou vytaženy rezistory.

Obvykle je na lince jeden pán a jeden nebo více otroků, i když může být více mistrů, ale o tom si povíme později.

Master i slave mohou přenášet nebo přijímat data, proto může být zařízení v jednom z těchto čtyř stavů: hlavní vysílání, hlavní příjem, podřízený přenos, podřízený příjem.

Krok 2: Knihovna

Moji knihovnu najdete zde.

Ke stažení

Klikněte na tlačítko DOWNLOADS v pravém horním rohu, přejmenujte nekomprimovanou složku DHT12.

Zkontrolujte, zda složka DHT obsahuje DHT12.cpp a DHT12.h.

Umístěte složku knihovny DHT do složky / libraries /.

Pokud je to vaše první knihovna, budete možná muset vytvořit podsložku knihoven.

Restartujte IDE.

Krok 3: Správce

Tento libray se snaží napodobit chovatele standardních snímačů knihovny DHT (a kopírovat hodně kódu) a přidávám kód pro správu i2c olso stejným způsobem.

Tato metoda je stejná jako u snímače knihovny DHT, s některými přidáním funkce rosného bodu.

Krok 4: Použití I2c

Pro použití s i2c (výchozí adresa a výchozí SDA SCL pin) je konstruktor:

DHT12 dht12;

a vezměte výchozí hodnotu pro pin SDA SCL.

(Je možné předefinovat pomocí specifikovaného konstruktoru pro esp8266, potřebného pro ESP-01). nebo

DHT12 dht12 (uint8_t addressOrPin)

addressOrPin -> adresa

změnit adresu.

Krok 5: Použití jednoho drátu

Použití jednoho drátu:

DHT12 dht12 (uint8_t addressOrPin, true)

addressOrPin -> pin

logická hodnota je výběr režimu oneWire nebo i2c.

Krok 6: Implicitní čtení

Můžete jej použít s „implicitním“, „jednoduchým čtením“nebo „plným čtením“: Implicitní, pouze první čtení provádí skutečné čtení senzoru, druhé čtení se stane za 2 sekundy. interval jsou uložená hodnota prvního čtení.

// Čtení senzoru má 2 sekundy uplynulého času, pokud neprojdete parametrem síly

// Čtení teploty jako Celsia (výchozí) float t12 = dht12.readTemperature (); // Čtení teploty jako Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Odečty senzorů mohou být také až 2 sekundy staré (je to velmi pomalý senzor) float h12 = dht12.readHumidity (); // Výpočet tepelného indexu ve stupních Fahrenheita (výchozí) float hif12 = dht12.computeHeatIndex (f12, h12); // Výpočet tepelného indexu ve stupních Celsia (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Výpočet rosného bodu ve Fahrenheitech (výchozí) float dpf12 = dht12.dewPoint (f12, h12); // Výpočet rosného bodu ve stupních Celsia (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Krok 7: Jednoduché čtení

Jednoduché čtení pro získání stavu přečtení.

// Čtení senzoru má 2 sekundy uplynulého času, pokud nepředáte parametr síly

bool chk = dht12.read (); // true read is ok, false read problem

// Čtení teploty jako stupňů Celsia (výchozí)

float t12 = dht12.readTemperature (); // Čtení teploty jako Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Odečty senzorů mohou být také až 2 sekundy staré (je to velmi pomalý senzor) float h12 = dht12.readHumidity (); // Výpočet tepelného indexu ve stupních Fahrenheita (výchozí) float hif12 = dht12.computeHeatIndex (f12, h12); // Výpočet tepelného indexu ve stupních Celsia (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Výpočet rosného bodu ve Fahrenheitech (výchozí) float dpf12 = dht12.dewPoint (f12, h12); // Výpočet rosného bodu ve stupních Celsia (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Krok 8: Úplné čtení

Úplné čtení pro získání zadaného stavu.

// Čtení senzoru má 2 sekundy uplynulého času, pokud neprojdete parametrem síly

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nČíst snímač:")); switch (chk) {case DHT12:: OK: Serial.println (F ("OK")); přestávka; případ DHT12:: ERROR_CHECKSUM: Serial.println (F ("Chyba kontrolního součtu")); přestávka; případ DHT12:: ERROR_TIMEOUT: Serial.println (F ("Chyba časového limitu")); přestávka; případ DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Chyba časového limitu při nízkém signálu, zkuste dát vysoký odpor vytažení")); přestávka; případ DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Chyba časového limitu při nízkém signálu, zkuste dát nízký odpor vytažení")); přestávka; případ DHT12:: ERROR_CONNECT: Serial.println (F ("Chyba připojení")); přestávka; případ DHT12:: ERROR_ACK_L: Serial.println (F ("chyba AckL")); přestávka; případ DHT12:: ERROR_ACK_H: Serial.println (F ("chyba AckH")); přestávka; případ DHT12:: ERROR_UNKNOWN: Serial.println (F ("Unknown error DETECTED")); přestávka; případ DHT12:: NONE: Serial.println (F ("Žádný výsledek")); přestávka; výchozí: Serial.println (F ("Neznámá chyba")); přestávka; }

// Čtení teploty jako stupňů Celsia (výchozí)

float t12 = dht12.readTemperature (); // Čtení teploty jako Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Odečty senzorů mohou být také až 2 sekundy staré (je to velmi pomalý senzor) float h12 = dht12.readHumidity (); // Vypočítejte tepelný index ve Fahrenheitech (výchozí) float hif12 = dht12.computeHeatIndex (f12, h12); // Výpočet tepelného indexu ve stupních Celsia (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Výpočet rosného bodu ve Fahrenheitech (výchozí) float dpf12 = dht12.dewPoint (f12, h12); // Výpočet rosného bodu ve stupních Celsia (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Krok 9: Schéma připojení

U příkladů je schéma připojení a je důležité použít správný vytahovací odpor.

Díky Bobadas, dplasa a adafruit, za sdílení kódu v githubu (kde beru nějaký kód a nápady).

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: Díky

Dětské hřiště Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)

Série projektů i2c (kolekce):

  • Teplotní vlhkostní senzor
  • Analogový expandér
  • Digitální expandér
  • LCD displej

Doporučuje: