Temperatura i vlažnost: prvo mjerenje sa DHT11

Očitavaj DHT11 svakih 2,5 sekunde, prikaži temperaturu i relativnu vlažnost u Serial Monitoru i obradi grešku očitavanja bez izmišljenih nultih vrijednosti.

Senzori i prikaz mjerenjaPočetni nivo75 min

Ciljevi učenja

  • Povezati DHT11 modul potvrđen za 3,3 V sa GPIO26 i spoljašnjim pull-up otpornikom od 10 kΩ prema 3V3.
  • Instalirati DHT sensor library by Adafruit i Adafruit Unified Sensor u odgovarajućim verzijama.
  • Rasporediti pokušaje očitavanja svakih 2500 ms, sa prvim pokušajem poslije početnog intervala.
  • Prikazati temperaturu u °C i relativnu vlažnost u procentima sa jasnim oznakama jedinica.
  • Provjeriti obje vrijednosti funkcijom isnan() i razlikovati nedostupan podatak od brojčane nule.

Prije početka

Završi kurseve 01 i 07: učitavanje programa, Serial Monitor i povezivanje napajanja senzorskog modula sa zajedničkom masom.

Referentna postavka

Ploča u Arduino IDE-u
ESP32 Dev Module
Arduino-ESP32
3.3.12
Serial Monitor
115200 baud

Ovo je referentni profil, a ne identifikacija ploče sa fotografije. Za ESP32-C3/S2/S3 ili drugačije označenu ploču treba prilagoditi GPIO i provjeriti šemu prije spajanja.

Šta ćemo napraviti

Povezaćemo DHT11 sa ESP32 i prikazivati temperaturu i relativnu vlažnost vazduha u Serial Monitoru. Program pokušava novo očitavanje svakih 2,5 sekunde. Uspješan rezultat sadrži obje vrijednosti i jedinice; neuspješan rezultat dobija jasnu poruku o grešci.

Ovo je prvi kurs u kojem senzor prenosi brojčane podatke preko svoje komunikacione linije. Naučićemo da jednako pažljivo obrađujemo dobijeno mjerenje i situaciju u kojoj mjerenje nije dostupno.

Šta ćeš naučiti

  • Povezati napajanje, DATA i spoljašnji pull-up otpornik.
  • Instalirati odgovarajuću Arduino biblioteku i njenu zavisnost.
  • Očitati temperaturu u °C i relativnu vlažnost u procentima.
  • Rasporediti očitavanja pomoću millis().
  • Prepoznati NaN i prikazati grešku bez izmišljene nulte vrijednosti.

Predznanje

Završi kurseve 01 i 07. Potrebno je da znaš učitati program, otvoriti Serial Monitor i povezati napajanje modula sa zajedničkom masom. U ovom kursu prelazimo sa binarnog izlaza senzora na biblioteku koja čita njegov podatkovni protokol.

Potrebna oprema

KomponentaKoličinaSpecifikacija i napomene
ESP32 razvojna ploča sa klasičnim ESP32-WROOM-32 modulom1GPIO nazivi moraju odgovarati referentnom profilu; fizički položaj izvoda provjeriti na ploči.
USB kabl za podatke i napajanje1Priključak prilagoditi ploči; komplet na slici navodi Micro-USB.
Eksperimentalna ploča1Komplet navodi 830 kontaktnih tačaka. Provjeriti eventualni prekid naponskih vodova.
DHT11 modul temperature i relativne vlažnosti1Tropriključni VCC/GND/DATA modul potvrđen za 3,3 V; DATA pull-up samo prema 3V3. Neke varijante ne rade pouzdano na 3,3 V.
Otpornik 10 kΩ1R2: pull-up DATA linije na 3V3. Količina po vrijednosti u kompletu nije potvrđena.
Spojni kablovi5M-M ili F-M prema priključcima ploče.

Okvirna količina, zavisno od rasporeda i tipa priključaka.

Koristimo klasičnu ESP32-WROOM-32 ploču i tropriključni DHT11 modul potvrđen za rad na 3,3 V. Priključci su VCC, DATA i GND, ali njihov fizički redoslijed provjeri na svom modulu. Samostalni DHT11 sa četiri nožice ima drugačiji raspored i nije direktna zamjena prema slici ove šeme.

Šta podaci znače

Temperatura opisuje toplotno stanje okoline senzora. Relativna vlažnost zavisi i od temperature; njen procenat nije procenat zapremine vazduha koji zauzima voda. DHT11 je pogodan za učenje očitavanja, a promjena ispisa za jednu decimalu ne znači odgovarajuću mjernu tačnost. Njegova ograničenja opisuje Adafruit pregled DHT senzora.

DHT11 koristi digitalni protokol preko jedne DATA linije. To nije analogni izlaz, a nije ni I²C. Biblioteka upravlja vremenskim signalima, dekodira podatke i provjerava prijenos. U izvornom kodu Adafruit biblioteke vidi se obrada vremena, kontrolnog zbira i neuspjelog očitavanja.

Šema i povezivanje

Šema povezivanja

Koristi tropriključni DHT11 modul potvrđen za rad na 3,3 V. R2 je dodatni pull-up otpornik 10 kΩ na 3V3; DATA i GPIO26 su isti čvor. Ne prebacuj modul sa ugrađenim pull-up otpornikom na 5 V bez prilagođavanja logičkih nivoa.

Šema povezivanja — električne veze navedene u tabeli ispod
Šema povezivanjaUvećajSVGPNG
Veze · Šema povezivanja
OdDoOpis veze
ESP32.3V3DHT1.VCCDHT11 modul koji pouzdano radi na 3,3 V.
ESP32.GNDDHT1.GNDZajednička masa.
DHT1.DATAESP32.GPIO26Dvosmjerna podatkovna linija DHT11.
ESP32.3V3R2.1R2 je pull-up otpornik 10 kΩ prema 3V3.
R2.2DHT1.DATADrugi kraj R2 na isti DATA čvor kao GPIO26.
  1. Odspoji USB. Provjeri da dokumentacija konkretnog modula dopušta napajanje od 3,3 V.
  2. Spoji VCC modula na 3V3, a GND modula na GND ESP32.
  3. Spoji DATA na GPIO26.
  4. Dodaj R2 od 10 kΩ između DATA i 3V3. Otpornik nije u seriji sa signalnom žicom: jedan kraj je na zajedničkoj DATA/GPIO26 vezi, drugi na 3V3.
  5. Ako modul već ima pull-up, provjeri da je i on vezan na 3,3 V. Referentna šema zadržava spoljašnji R2 radi jasno definisane veze.
  6. Pregledaj kratke žice i priključke, pa priključi USB napajanje ploče.

Pull-up vraća podatkovnu liniju u visoko stanje kada je učesnici komunikacije ne povlače prema masi. Adafruit uputstvo za povezivanje navodi otpornik od 10 kΩ i upozorava da nekim primjercima 3,3 V nije dovoljno. Ako tvoj modul ne radi pouzdano na 3,3 V, provjeri njegovu varijantu; nemoj ga samo prebaciti na 5 V jer ugrađeni pull-up tada može dovesti 5 V na GPIO26.

Priprema Arduino okruženja

U Arduino IDE-u 2.x izaberi ESP32 Dev Module, odgovarajući port i paket esp32 by Espressif Systems 3.3.12. Kroz Library Manager instaliraj:

  • DHT sensor library by Adafruit, verziju 1.4.7.
  • Adafruit Unified Sensor, verziju 1.1.15, kao zavisnost paketa.

Naziv i autor su bitni: druga biblioteka sa sličnim nazivom može imati drugi API. Adafruit Arduino vodič objašnjava instalaciju biblioteka. Naš program koristi objekat DHT, bez dodatnog sloja Unified API-ja, ali instaliramo prijavljenu zavisnost.

Raspakuj primjer, otvori dht11_monitor/dht11_monitor.ino i zadrži odgovarajući naziv foldera. Serial Monitor podesi na 115200 baud.

Library Manager — dokumentovane verzije i zavisnosti
Biblioteka i izdanjeVerzijaZavisnosti
DHT sensor library1.4.7Adafruit Unified Sensor 1.1.15
Adafruit Unified Sensor1.1.15Nema

Kompletan Arduino program

dht11_monitor.ino Arduino / C++
Preuzmi .ino

#include <Arduino.h>
#include <DHT.h>
#include <math.h>

constexpr uint8_t DHT_PIN = 26;
constexpr uint32_t SAMPLE_MS = 2500;
DHT dht(DHT_PIN, DHT11);
uint32_t lastSampleAt = 0;

void setup() {
  Serial.begin(115200);
  dht.begin();
  lastSampleAt = millis();
  Serial.println("DHT11: first sample after 2.5 seconds; units are Celsius and percent RH.");
}

void loop() {
  const uint32_t now = millis();
  if (static_cast<uint32_t>(now - lastSampleAt) < SAMPLE_MS) return;
  lastSampleAt = now;
  const float humidity = dht.readHumidity();
  const float temperature = dht.readTemperature();
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("SENSOR ERROR: DHT11 read failed; check DATA, 3.3 V, GND and pull-up.");
    return;
  }
  Serial.print("T_C="); Serial.print(temperature, 1);
  Serial.print(" RH_pct="); Serial.println(humidity, 1);
}

Prvo pokreni priloženi program bez izmjena. Za njega su odabrani DHT_PIN = 26, tip DHT11 i SAMPLE_MS = 2500.

Kako se čita jedan uzorak

Objekat DHT dht(DHT_PIN, DHT11) povezuje izabrani pin sa tipom senzora. dht.begin() priprema komunikaciju. Program pamti lastSampleAt i prvi pokušaj pravi tek poslije 2500 ms od početka rasporeda u setup().

Pozivi readHumidity() i readTemperature() daju vlažnost i temperaturu. Podrazumijevana temperatura je u Celzijusima. Biblioteka za uzastopne pozive koristi sačuvani rezultat iste komunikacije, pa ovaj par ne treba tumačiti kao dva nezavisna mjerenja u istom trenutku. Odabrani razmak je duži od internog minimuma biblioteke od dvije sekunde.

Prije ispisa program provjerava isnan() za obje vrijednosti. Ako je bilo koja nevažeća, odbacuje cijeli par i prijavljuje SENSOR ERROR. Nula je moguća brojčana vrijednost; ne smije predstavljati zamjenu za neuspjeli prijenos. Program nastavlja i ponovo pokušava u sljedećem terminu.

Pokretanje i očekivani ispis

Klikni Verify, zatim Upload. Otvori Serial Monitor i sačekaj prvi pokušaj nakon početnog intervala. Uspješne poruke koriste oznake T_C i RH_pct; greška je posebno označena. Vrijednosti zavise od stvarne prostorije, položaja i senzora. Ovdje nijedna brojka nije unaprijed proglašena rezultatom tvoje probe.

Ne očekuj promjenu svakog uzorka. Drži senzor podalje od ploče koja se zagrijava, direktnog sunca i dodirivanja prstima. Daj mu vremena da odgovori na promijenjene uslove. Ovaj raspored je vježba za unutrašnji prostor; kućište i način mjerenja nisu pripremljeni za vremenske uticaje napolju.

Eksperiment i dnevnik

Zabilježi deset uzastopnih pokušaja. Za svaki upiši vrijeme poruke, temperaturu, relativnu vlažnost i status. Kod greške polja mjerenja ostavi prazna.

SituacijaOčekivano ponašanjeŠta pratiš
Uspješno očitavanjePrikazane obje vrijednosti.Jedinice i razmak poruka.
Stabilna prostorijaViše rezultata može biti jednako.Ponavljanje nije samo po sebi greška.
Senzor pomjeren dalje od tople pločeMoguća postepena promjena.Sačekaj stabilizaciju i uporedi.
DATA odspojen prije uključivanjaPoruka o grešci pri pokušaju.Nema zamjenskih nula.

Za posljednju probu isključi USB, odspoji DATA, uključi i posmatraj. Zatim opet isključi USB i vrati vezu.

Najčešći problemi

SimptomProvjera i postupak
DHT.h nije pronađenInstaliraj DHT biblioteku autora Adafruit.
Stalno SENSOR ERRORProvjeri DATA/GPIO26, GND, tip DHT11, R2 i podržano napajanje modula.
Povremene greškeUčvrsti i skrati žice; vrati interval 2500 ms i provjeri napajanje.
Nečitljive porukeIzaberi 115200 baud i pravi serijski port.
Temperatura izgleda previsokaOdmakni senzor od izvora toplote; poređenje zahtijeva sličan položaj i vrijeme stabilizacije.

Samostalni zadatak

Povećaj SAMPLE_MS na 5000 i posmatraj razmak poruka. Zatim na papiru obradi niz izmišljenih temperatura: 22,0; nevažeće; 24,0. Izračunaj prosjek važećih rezultata i uporedi ga sa pogrešnim prosjekom koji bi nastao zamjenom greške nulom.

Pitanja za provjeru

  1. Zašto R2 ide prema 3V3, a ne prema 5 V?
  2. Da li greška komunikacije znači da je temperatura 0 °C?
  3. Hoće li češći ispis učiniti DHT11 preciznijim?

Smjernice i rješenje

Sa intervalom 5000 ms novi pokušaji stižu približno svakih pet sekundi. Prosjek važećih 22,0 i 24,0 iznosi 23,0 °C. Uključivanje izmišljene nule dalo bi približno 15,3 °C i prikrilo gubitak podatka. Ovaj račun je zadatak, a ne mjerenje na ploči.

Pull-up prema 3V3 čuva odgovarajući visoki nivo DATA linije. NaN označava nevažeći broj, ne temperaturu nula. Veća učestalost ispisa ne popravlja osobine senzora. Vrati interval na 2500 ms prije kursa o sobnoj mjernoj stanici.

Preuzimanja

Primarni izvori