Infračervený optický senzor

Infračervený optický senzor má velice rozmanité možnosti použití. Jeho hlavní funkcí je detekce přiblížení tělesa k senzoru, ať už se jedná o překážku robota, papír v tiskárně či měření otáček kola. Tento infračervený optický senzor funguje, jak už z názvu vyplývá, za pomoci dvojice součástek, a to infračervené diody a optického přijímače, v tomto případě fototranzistoru.

Při bližším pohledu na samotný senzor na modulu si můžeme všimnout, že tyto dvě součástky jsou odděleny plastovou přepážkou, bez které by senzor trvale detekoval přiblížení. Celá jeho funkce totiž spočívá v tom, že infračervená dioda vyšle světelný pulz, který se odrazí od případné překážky zpět a je zachycen optickým detektorem. Podle množství dopadajícího světla se pak adekvátně otevře tranzistor a díky operačnímu zesilovači umístěnému na modulu můžeme na výstupu měřit analogové napětí v rozmezí 0 – 5 V. Je však důležité zdůraznit, že tento optický senzor má maximální detekovatelnou vzdálenost okolo 20 cm. Nejpřesnější je pak zhruba na 5 cm, přičemž rozdělení výstupního napětí neodpovídá lineárně vzdálenosti, poloviční napětí například odpovídá zhruba 3 cm.

Tento modul s infračerveným optickým senzorem má čtyři propojovací piny. Propojení s Arduinem je jednoduché a uvedené na obrázku níže. Stačí tedy připojit Vcc na napájecí napětí v rozpětí 3,3 – 5 V, Gnd na zem a dále nám zbývají piny A0 a D0. Tyto slouží pro získání informací od senzoru. Pin A0 poskytuje analogovu hodnotu napětí, je tedy připojen do analogového vstupu A0 na Arduinu. Pin D0 pak poskytuje digitální hodnotu, kdy práh sepnutí si volíme trimrem umístěným na modulu. V případě vzdálené překážky je digitální výstup D0 roven napájecímu napětí a při detekci spadne na Gnd. Tento výstup je výhodný v tom případě, kdy nepotřebujeme měřit vzdálenost dynamicky, ale stačí nám vědět pouze informaci „sepnuto/nesepnuto“.

Ukázkový kód pro zapojení a vyzkoušení infračerveného optického senzoru obsahuje jako první inicializaci datových pinů a proměnnou pro čtení hodnoty napětí. V podprogramu setup nejprve nastavíme komunikaci po sériové lince s rychlostí 9600 baud, dále nastavíme oba piny jako vstupní a také zapojíme digitální vstup D0 na pinu 2 jako vstup pro přerušení. Toto přerušení má tvar: číslo přerušovacího pinu (pro nás 0, případně 1 pro pin 3), název podprogramu obsahujícího příkazy, které se mají provést a na posledním místě typ detekce. Tato detekce má čtyři různá nastavení: LOW pro detekci logické nuly (Gnd), CHANGE pro detekci změny z jedné úrovně do druhé, RISING pro detekci náběžné hrany (log0 na log1) a jako poslední FALLING pro detekci klesající hrany (log1 na log0). Vzhledem k chování modulu, kdy v případě detekce přiblížení je nastavena log0, jsem použil v příkladu detekci klesající hrany FALLING.

V loop smyčce se nachází příkazy, které nejprve do proměnné „analog“ nahrají příslušnou hodnotu napětí v rozsahu 0-1023, kdy 0 odpovídá Gnd. Následuje ještě zmíněný podprogram „prerus“, který pro názornost vytiskne po sériové lince zprávu o detekci pohybu.

// Infračervený optický senzor

// čísla pinu připojeného digitálního
// a analogového vstupu
const int d0 = 2;
const int a0 = A0;

// proměnná pro čtení napětí analogového vstupu
int analog = 0;

void setup() {
  // komunikace přes sériovou linku rychlostí 9600 baud
  Serial.begin(9600);  
  // inicializace obou vstupů
  pinMode(d0, INPUT);
  pinMode(a0, INPUT);
  // nastavení přerušení na pin 2 (int0) 
  // při klesající hraně (log1->log0) se vykoná program prerus 
  attachInterrupt(0, prerus, FALLING);
}

void loop(){
  // načtení hodnoty analogového vstupu
  analog = analogRead(a0);
  Serial.print("Analogova hodnota: ");
  Serial.println(analog);
  // vyčkej 1 s kvůli zbytečnému množství tisknutých znaků
  delay(1000);
}

void prerus(){
  // pokud je aktivován digitální vstup,
  // vykonej následující
  Serial.println("Detekce pohybu!");
  delay(1000);
}

Po nahrání programu do Arduino desky si můžeme otevřít Sériový monitor a sledovat výstupní hodnotu analogového vstupu. A také můžeme otestovat digitální výstup při přiblížení překážky kolmo k modulu.

Tabulka rozložení přerušovacích pinů:

Deska

Digitální piny pro přerušení

Uno, Nano, Mini (Atmega 328)

2, 3

Mega, Mega2560, MegaADK

2, 3, 18, 19, 20, 21

Micro, Leonardo (Atmega 32u4)

0, 1, 2, 3, 7

Zero, MKR1000

Všechny digitální piny, kromě 4

Due

Všechny digitální piny

Seznam použitých komponent:

http://dratek.cz/arduino/1142-arduino-infracerveny-opticky-sezor-1449929310.html

http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

http://dratek.cz/arduino/844-arduino-nepajive-pole.html

http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1063-arduino-vodice-samec-samec-40-kusu.html

Další podobné články