V tomto návode sa naučíme, ako použiť infračervený senzor na detekciu prekážok s modulom ESP32. Tento projekt ukáže, ako môže senzor spustiť bzučiak, keď sa zistí prekážka. Zapojenie tiež zobrazí stav detekcie na sériovom monitore, čo poskytne jasný a interaktívny spôsob pozorovania funkčnosti senzora.
Budeme pracovať so SunFounder ESP32 IoT Learning Kit, ktorý obsahuje mikrokontrolér ESP32 s podporou Wi-Fi a Bluetooth. Infračervený senzor funguje tak, že vysiela infračervené svetlo, ktoré sa odrazí od blízkych prekážok. Keď sa svetlo odrazí späť, senzor spustí výstupný signál, ktorý prečítame v našom kóde. Zahrnieme aj bzučiak, ktorý sa aktivuje pri zistení prekážky a poskytne zvukový signál.
Vysvetlenie hardvéru
Hlavné komponenty tohto projektu zahŕňajú modul ESP32, infračervený senzor na detekciu prekážok a bzučiak. Modul ESP32 slúži ako centrálna procesorová jednotka, ktorá spracováva vstupy zo senzorov a riadi výstupy. Môže byť napájaný lítiovou batériou, vďaka čomu je prenosný a flexibilný pre rôzne aplikácie.
Infračervený senzor na detekciu prekážok pozostáva z vysielača a prijímača. Vysielač emituje infračervené svetlo, zatiaľ čo prijímač deteguje odrazené svetlo od blízkych objektov. Keď je prítomná prekážka, výstupný pin senzora prejde do nízkej úrovne, čo signalizuje ESP32, aby konal, napríklad zapol bzučiak.
Podrobnosti z datasheetu
Výrobca
SunFounder
Číslo dielu
Infračervený senzor na detekciu prekážok
Prevádzkové napätie
3,3 V - 5 V
Typ výstupu
Digitálny (nízka úroveň pri zistení prekážky)
Rozsah detekcie
Až 20 cm
Čas odozvy
Menej ako 10 ms
Balenie
Modul
Napájanie: 3,3 V až 5 V pre prevádzku.
Výstupný signál prejde do nízkej úrovne, keď sa zistí prekážka.
Nastaviteľná citlivosť pomocou potenciometra.
Typický rozsah detekcie je až 20 cm.
Rýchla odozva pod 10 ms.
Pokyny na zapojenie
ESP32-19-obstacle_voide-wiring
Na zapojenie infračerveného senzora na detekciu prekážok k ESP32 začnite pripojením pinu VCC senzora na pin 5V na ESP32. Potom pripojte pin GND senzora na jeden z pinov GND na ESP32. Nakoniec pripojte pin OUT senzora na GPIO pin 14 na ESP32.
Pre bzučiak pripojte záporný terminál na GND a kladný terminál na GPIO pin 27. Uistite sa, že všetky spojenia sú pevné a že je senzor správne napájaný. Zapojenie by malo byť jednoduché, pretože senzor a bzučiak vyžadujú iba jednoduché napájacie a signálové pripojenia.
Príklady kódu a vysvetlenie
V kóde najprv definujeme pin pripojený k senzoru na detekciu prekážok. Toto sa vykoná pomocou identifikátora avoidPin nastaveného na 14. Tiež deklarujeme premennú avoidState na uchovanie výstupného stavu senzora.
const int avoidPin = 14; // číslo pinu modulu na detekciu prekážok
int avoidState = 0;
Vo funkcii setup inicializujeme sériovú komunikáciu a nastavíme avoidPin ako vstup. To umožňuje ESP32 čítať výstupný stav senzora.
Vo funkcii loop nepretržite čítame výstup senzora pomocou digitalRead(avoidPin) a ukladáme výsledok do avoidState. Táto hodnota sa potom vytlačí na sériový monitor, čo nám umožní vidieť, kedy je zistená prekážka (výstup bude 0) alebo nie (výstup bude 1).
Pre úplný kód sa prosím pozrite na časť s načítaním nižšie v článku.
Demonštrácia / Čo očakávať
Keď je zapojenie dokončené a kód je nahraný, mali by ste vidieť na sériovom monitore zobrazenú hodnotu 0 alebo 1 v závislosti od toho, či je zistená prekážka. Keď je prekážka v rozsahu detekcie, výstup bude 0 a bzučiak zaznie. Ak sa prekážka odstráni, výstup bude 1 a bzučiak sa zastaví. Táto funkčnosť je demonštrovaná vo videu (vo videu o 12:30).
Bežné problémy môžu zahŕňať nesprávne zapojenie, ktoré by mohlo viesť k nesprávnemu fungovaniu senzora, alebo nesprávnu prenosovú rýchlosť na sériovom monitore, čo bráni presnému zobrazeniu údajov. Ak narazíte na problémy, skontrolujte tieto aspekty.
818-ESP32 Tutorial 19/55- Arduino code for obstacle avoidance module
Jazyk: C++
// set pin
const int avoidPin = 14; // the number of the avoid avoid module pin
// variable for storing the avoid status
int avoidState = 0;
void setup() {
Serial.begin(115200);
// initialize the avoid pin as an input
pinMode(avoidPin, INPUT);
}
void loop() {
// read the state of the avoid value
avoidState = digitalRead(avoidPin);
Serial.println(avoidState);
}