V tomto návode si ukážeme, ako použiť svetelne závislý rezistor (LDR) s mikrokontrolérom ESP32 na meranie intenzity svetla. Čítaním odporu LDR môžeme spúšťať akcie, napríklad zapnúť bzučiak, keď úroveň svetla prekročí určitú hranicu. Tento projekt demonštruje interakciu medzi úrovňami svetla a schopnosťami ESP32 čítať analógové hodnoty, čo nám umožňuje vytvárať aplikácie reagujúce na okolité svetlo. (vo videu o 5:30)
Vysvetlenie hardvéru
Hlavné komponenty, ktoré použijeme v tomto projekte, zahŕňajú mikrokontrolér ESP32, LDR a 10 kΩ rezistor. LDR mení svoj odpor na základe intenzity svetla dopadajúceho na jeho povrch: viac svetla znamená nižší odpor, zatiaľ čo menej svetla znamená vyšší odpor. Táto vlastnosť nám umožňuje merať rôzne úrovne svetla zapojením LDR do deliča napätia s rezistorom.
Mikrokontrolér ESP32 má vstavané Wi-Fi a Bluetooth, vďaka čomu je ideálny pre IoT projekty. Má niekoľko analógových pinov, ktoré dokážu čítať rôzne úrovne napätia, čo využijeme na monitorovanie napätia na LDR. Toto napätie sa prevedie na analógovú hodnotu, ktorú ESP32 spracuje a použije na spúšťanie akcií, ako je aktivácia bzučiaka.
Podrobnosti z datasheetu
Výrobca
Espressif Systems
Označenie súčiastky
ESP32
Logické/IO napätie
3,3 V
Napájacie napätie
3,0 - 3,6 V
Výstupný prúd (na GPIO)
max. 40 mA
Odporúčaná frekvencia PWM
1 kHz - 40 kHz
Logické vstupné prahy
Vysoká: min. 2,0 V, Nízka: max. 0,8 V
Úbytok napätia / RDS(on) / saturácia
max. 0,3 V
Tepelné limity
-40 °C až 125 °C
Puzdro
QFN48
Poznámky / varianty
Podporuje viacero Wi-Fi a Bluetooth protokolov
Použite 10 kΩ rezistor v sérii s LDR na delenie napätia.
Uistite sa, že ESP32 je napájaný 3,3 V, aby nedošlo k poškodeniu.
Pripojte LDR a rezistor správne na meranie intenzity svetla.
V prípade potreby použite kondenzátor na oddelenie napájania na stabilizáciu zdroja.
Skontrolujte hodnoty analógového čítania, aby ste sa uistili, že spadajú do očakávaných rozsahov.
Pokyny na zapojenie
ESP32-22_light_sensor-wiring
Na zapojenie LDR a rezistora k ESP32 začnite pripojením jedného vývodu LDR na 3,3 V napájací pin na ESP32. Druhý vývod LDR by mal byť pripojený k jednému vývodu 10 kΩ rezistora. Druhý vývod rezistora pripojte na zem.
Ďalej pripojte prepojovací vodič z bodu spojenia medzi LDR a rezistorom na pin 35 na ESP32. Toto zapojenie vytvára delič napätia, ktorý umožňuje ESP32 čítať meniace sa napätie na základe intenzity svetla dopadajúceho na LDR. Uistite sa, že všetky spojenia sú pevné a že LDR je umiestnený tak, aby mohol presne snímať zmeny svetla.
Príklady kódu a vysvetlenie
V kóde začneme inicializáciou sériovej komunikácie na monitorovanie hodnôt z LDR. Kľúčovým identifikátorom je tu analogValue, ktorý ukladá hodnotu z pinu 35.
void setup() {
Serial.begin(115200);
}
void loop() {
int analogValue = analogRead(35);
Serial.printf("ADC analog value = %d\n",analogValue);
delay(100);
}
Tento úryvok kódu inicializuje sériový monitor pri prenosovej rýchlosti 115200 a nepretržite číta analógovú hodnotu z pinu 35. Hodnota sa vypíše na sériový monitor, čo nám umožňuje pozorovať, ako sa mení s rôznymi úrovňami svetla.
Keď sa zmení intenzita svetla, odpor LDR sa mení, a teda sa mení aj napätie čítané ESP32, čo odráža svetelné podmienky (vo videu o 12:45).
Demonštrácia / Čo očakávať
Keď spustíte program a pozorujete sériový monitor, mali by ste vidieť, ako sa ADC analog value mení na základe podmienok okolitého svetla. Keď zakryjete LDR, hodnota by sa mala zvýšiť, čo indikuje vyšší odpor, zatiaľ čo vystavenie jasnému svetlu by malo hodnotu výrazne znížiť. Toto správanie možno použiť na spustenie bzučiaka alebo akejkoľvek inej akcie na základe vopred definovaných prahov.
Ak sa hodnoty nemenia podľa očakávania, skontrolujte zapojenie, uistite sa, že LDR nie je voľný, a potvrďte, že ESP32 je správne napájaný. To pomôže predísť bežným chybám a zabezpečí plynulú prevádzku (vo videu o 15:30).
821-ESP32 Tutorial 22/55- Arduino code for Light dependant resistor
Jazyk: C++
void setup() {
// initialize serial communication at 115200 bits per second:
Serial.begin(115200);
}
void loop() {
// read the analog value
int analogValue = analogRead(35);
// print out the values you read:
Serial.printf("ADC analog value = %d\n",analogValue);
delay(100); // delay in between reads for clear read from serial
}
Vyhlásenie: Ako partner Amazon zarábame na kvalifikovaných nákupoch. To znamená, že môžeme dostať malú províziu, ak kliknete na odkaz a uskutočníte nákup bez ďalších nákladov pre vás.