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
NaNi 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
| Komponenta | Količina | Specifikacija i napomene |
|---|---|---|
| ESP32 razvojna ploča sa klasičnim ESP32-WROOM-32 modulom | 1 | GPIO nazivi moraju odgovarati referentnom profilu; fizički položaj izvoda provjeriti na ploči. |
| USB kabl za podatke i napajanje | 1 | Priključak prilagoditi ploči; komplet na slici navodi Micro-USB. |
| Eksperimentalna ploča | 1 | Komplet navodi 830 kontaktnih tačaka. Provjeriti eventualni prekid naponskih vodova. |
| DHT11 modul temperature i relativne vlažnosti | 1 | Tropriključ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Ω | 1 | R2: pull-up DATA linije na 3V3. Količina po vrijednosti u kompletu nije potvrđena. |
| Spojni kablovi | 5 | M-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.
| Od | Do | Opis veze |
|---|---|---|
ESP32.3V3 | DHT1.VCC | DHT11 modul koji pouzdano radi na 3,3 V. |
ESP32.GND | DHT1.GND | Zajednička masa. |
DHT1.DATA | ESP32.GPIO26 | Dvosmjerna podatkovna linija DHT11. |
ESP32.3V3 | R2.1 | R2 je pull-up otpornik 10 kΩ prema 3V3. |
R2.2 | DHT1.DATA | Drugi kraj R2 na isti DATA čvor kao GPIO26. |
- Odspoji USB. Provjeri da dokumentacija konkretnog modula dopušta napajanje od 3,3 V.
- Spoji VCC modula na 3V3, a GND modula na GND ESP32.
- Spoji DATA na GPIO26.
- 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.
- 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.
- 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.
| Biblioteka i izdanje | Verzija | Zavisnosti |
|---|---|---|
| DHT sensor library | 1.4.7 | Adafruit Unified Sensor 1.1.15 |
| Adafruit Unified Sensor | 1.1.15 | Nema |
Kompletan Arduino program
#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.
| Situacija | Očekivano ponašanje | Šta pratiš |
|---|---|---|
| Uspješno očitavanje | Prikazane obje vrijednosti. | Jedinice i razmak poruka. |
| Stabilna prostorija | Više rezultata može biti jednako. | Ponavljanje nije samo po sebi greška. |
| Senzor pomjeren dalje od tople ploče | Moguća postepena promjena. | Sačekaj stabilizaciju i uporedi. |
| DATA odspojen prije uključivanja | Poruka 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
| Simptom | Provjera i postupak |
|---|---|
DHT.h nije pronađen | Instaliraj DHT biblioteku autora Adafruit. |
Stalno SENSOR ERROR | Provjeri DATA/GPIO26, GND, tip DHT11, R2 i podržano napajanje modula. |
| Povremene greške | Učvrsti i skrati žice; vrati interval 2500 ms i provjeri napajanje. |
| Nečitljive poruke | Izaberi 115200 baud i pravi serijski port. |
| Temperatura izgleda previsoka | Odmakni 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
- Zašto R2 ide prema 3V3, a ne prema 5 V?
- Da li greška komunikacije znači da je temperatura 0 °C?
- 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.
