Inhoudsopgave:

DHT12 (i2c goedkope vochtigheids- en temperatuursensor), snel en eenvoudig gebruik - Ajarnpa
DHT12 (i2c goedkope vochtigheids- en temperatuursensor), snel en eenvoudig gebruik - Ajarnpa

Video: DHT12 (i2c goedkope vochtigheids- en temperatuursensor), snel en eenvoudig gebruik - Ajarnpa

Video: DHT12 (i2c goedkope vochtigheids- en temperatuursensor), snel en eenvoudig gebruik - Ajarnpa
Video: Lesson 11: What is Arduino library and How to use DHT11 Temperature and Humidity Sensor | SunFounder 2024, November
Anonim
DHT12 (i2c goedkope vochtigheids- en temperatuursensor), snel en gemakkelijk te gebruiken
DHT12 (i2c goedkope vochtigheids- en temperatuursensor), snel en gemakkelijk te gebruiken

Je kunt updates en andere vinden op mijn site

Ik hou van een sensor die kan worden gebruikt met 2-draads (i2c-protocol), maar ik ben dol op de goedkope.

Dit is een Arduino- en esp8266-bibliotheek voor de DHT12-serie van zeer goedkope temperatuur- / vochtigheidssensoren (minder dan $ 1 $) die werken met i2c of een draadverbinding.

Zeer handig als u esp01 wilt gebruiken (als u serieel gebruikt, heeft u slechts 2 pins) om vochtigheid en temperatuur te lezen en weer te geven op i2c LCD.

AI las dat het soms lijkt dat kalibratie nodig is, maar ik heb hiervan een boom en krijg een waarde die erg lijkt op DHT22. Als je dit probleem hebt gekalibreerd, open dan het probleem op github en ik voeg implementatie toe.

Stap 1: Hoe I2c werkt

Hoe I2c werkt
Hoe I2c werkt

I2C werkt met zijn twee draden, de SDA (datalijn) en SCL (kloklijn).

Beide lijnen zijn open-drain, maar worden opgetrokken met weerstanden.

Meestal is er één master en één of meerdere slaves aan de lijn, hoewel er meerdere masters kunnen zijn, maar daar komen we later op terug.

Zowel masters als slaves kunnen gegevens verzenden of ontvangen, daarom kan een apparaat zich in een van deze vier toestanden bevinden: master verzenden, master ontvangen, slave verzenden, slave ontvangen.

Stap 2: Bibliotheek

Mijn bibliotheek vind je hier.

Downloaden

Klik op de DOWNLOADS-knop in de rechterbovenhoek, hernoem de niet-gecomprimeerde map DHT12.

Controleer of de DHT-map DHT12.cpp en DHT12.h bevat.

Plaats de DHT-bibliotheekmap in uw /libraries/-map.

Mogelijk moet u de submap bibliotheken maken als dit uw eerste bibliotheek is.

Start de IDE opnieuw.

Stap 3: Gedrag

Deze bibliotheek probeert het gedrag van standaard DHT-bibliotheeksensoren na te bootsen (en kopieer veel code), en ik voeg de code toe om i2c olso op dezelfde manier te beheren.

De methode is hetzelfde als de DHT-bibliotheeksensor, met enkele toevoegingen zoals een dauwpuntfunctie.

Stap 4: I2c-gebruik

Voor gebruik met i2c (standaardadres en standaard SDA SCL-pin) is de constructor:

DHT12 dht12;

en neem de standaardwaarde voor de SDA SCL-pin.

(Het is mogelijk om opnieuw te definiëren met gespecificeerde contructor voor esp8266, nodig voor ESP-01). of

DHT12 dht12(uint8_t adresOrPin)

adresOrPin -> adres

adres wijzigen.

Stap 5: Gebruik van één draad

Om één draad te gebruiken:

DHT12 dht12(uint8_t adresOrPin, waar)

adresOrPin -> pin

booleaanse waarde is de selectie van oneWire- of i2c-modus.

Stap 6: Impliciet lezen

U kunt het gebruiken met "impliciet", "eenvoudig lezen" of "volledig lezen": impliciet, alleen de eerste uitlezing doet een echte uitlezing van de sensor, de andere uitlezing wordt in 2sec. interval zijn de opgeslagen waarde van de eerste lezing.

// Het lezen van de sensor heeft 2 seconden verstreken tijd, tenzij u de force-parameter doorgeeft

// Lees temperatuur als Celsius (de standaard) float t12 = dht12.readTemperature (); // Lees temperatuur als Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Sensormetingen kunnen ook tot 2 seconden 'oud' zijn (het is een zeer trage sensor) float h12 = dht12.readHumidity(); // Bereken warmte-index in Fahrenheit (de standaard) float hif12 = dht12.computeHeatIndex (f12, h12); // Bereken warmte-index in Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Bereken het dauwpunt in Fahrenheit (de standaard) float dpf12 = dht12.dewPoint (f12, h12); // Bereken het dauwpunt in Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Stap 7: Eenvoudig lezen

Eenvoudig lezen om een leesstatus te krijgen.

// Het lezen van de sensor heeft 2 seconden verstreken tijd, tenzij u de force-parameter doorgeeft

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

// Lees temperatuur als Celsius (de standaard)

float t12 = dht12.readTemperature(); // Lees temperatuur als Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Sensormetingen kunnen ook tot 2 seconden 'oud' zijn (het is een zeer trage sensor) float h12 = dht12.readHumidity(); // Bereken warmte-index in Fahrenheit (de standaard) float hif12 = dht12.computeHeatIndex (f12, h12); // Bereken warmte-index in Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Bereken het dauwpunt in Fahrenheit (de standaard) float dpf12 = dht12.dewPoint (f12, h12); // Bereken het dauwpunt in Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Stap 8: Volledig lezen

Volledig gelezen om een gespecificeerde status te krijgen.

// Het lezen van de sensor heeft 2 seconden verstreken tijd, tenzij u de force-parameter doorgeeft

DHT12::ReadStatus chk = dht12.readStatus(); Serial.print(F("\nLees sensor: ")); switch (chk) { case DHT12::OK: Serial.println(F("OK")); pauze; geval DHT12::ERROR_CHECKSUM: Serial.println (F ("Checksum-fout")); pauze; case DHT12::ERROR_TIMEOUT: Serial.println (F ("Time-outfout")); pauze; case DHT12::ERROR_TIMEOUT_LOW: Serial.println(F("Time-outfout bij laag signaal, probeer hoge pullup-weerstand te plaatsen")); pauze; case DHT12::ERROR_TIMEOUT_HIGH: Serial.println(F("Time-outfout bij laag signaal, probeer een lage pullup-weerstand te plaatsen")); pauze; case DHT12::ERROR_CONNECT: Serial.println (F ("Verbindingsfout")); pauze; geval DHT12::ERROR_ACK_L: Serial.println (F ("AckL-fout")); pauze; geval DHT12::ERROR_ACK_H: Serial.println (F ("AckH-fout")); pauze; case DHT12::ERROR_UNKNOWN: Serial.println(F("Onbekende fout DETECTED")); pauze; case DHT12::NONE: Serial.println(F("Geen resultaat")); pauze; standaard: Serial.println(F("Onbekende fout")); pauze; }

// Lees temperatuur als Celsius (de standaard)

float t12 = dht12.readTemperature(); // Lees temperatuur als Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Sensormetingen kunnen ook tot 2 seconden 'oud' zijn (het is een zeer trage sensor) float h12 = dht12.readHumidity(); // Bereken warmte-index in Fahrenheit (de standaard) float hif12 = dht12.computeHeatIndex (f12, h12); // Bereken warmte-index in Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Bereken het dauwpunt in Fahrenheit (de standaard) float dpf12 = dht12.dewPoint (f12, h12); // Bereken het dauwpunt in Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Stap 9: Aansluitschema

Met voorbeelden zijn er het aansluitschema, het is belangrijk om de juiste pullup-weerstand te gebruiken.

Met dank aan Bobadas, dplasa en adafruit, om de code te delen in github (waar ik wat code en ideeën neem).

Stap 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Stap 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Stap 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Stap 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Stap 14: Bedankt

Arduino-speeltuin (https://playground.arduino.cc/Main/DHT12SensorLibrary)

i2c projectserie (Collectie):

  • Temperatuur vochtigheidssensor
  • Analoge uitbreiding
  • Digitale uitbreiding
  • LCD scherm

Aanbevolen: