Modul laserového snímače

Modul laserového snímače je vstupní modul pro Arduino. Na desce tohoto modulu se nachází kromě indikační LED diody a pomocných odporů hlavně laserový detektor. Tento detektor dokáže snímat široké spektrum světla a je určen hlavně pro detekci laserových paprsků, které míří na jeho čočku. Zároveň ho ale může aktivovat i ostřejší denní světlo, takže nejlepších výsledků dosáhneme v tmavém prostředí.
Pro napájení laserového snímače je doporučeno použít napětí 5V, přičemž i výstup dosahuje aktivní hrany na 5 Voltech. Zmíněná indikační LED dioda na modulu indikuje připojené napájení, nikoliv funkci snímače.

Pro úspěšné propojení laserového snímače a Arduino desky je nutné zapojit celkem 3 vodiče. Propojíme VCC s +5V Arduina, OUT s pinem D3 a GND se zemí Arduina. Pro jednoduchý test ale můžeme taktéž modul zapojit přímo do Arduina, kdy jsem pin VCC zapojil do pinu D2, OUT do D3 a GND do D4. V programu pak jednoduše připojím GND na logickou 0 a VCC na logickou jedničku, abych tak dosáhl správného napájení modulu.
Pro digitální vstup je nutné vybrat pin, který slouží jako přerušovací. Seznam těchto pinů pro jednotlivé desky si můžete prohlédnout zde, u Arduino UNO desky jsou to například piny D2 a D3.

Ukázkový kód obsahuje na svém začátku nastavení čísel propojovacích pinů a vytvoření proměnné, do které budeme ukládat čas posledního přerušení snímače, tedy detekce přerušení paprsku. Společně s tím je vytvořena i proměnná pro uložení stavu snímače.
V podprogramu setup provedeme nejprve inicializaci sériové linky s rychlostí 9600 baudů a následně nastavíme pro všechny 3 piny jejich správný směr. Pro napájení snímače nastavíme vhodně logickou nulu a jedničku na napájecí piny a poté nastavíme detekci přerušení na náš datový pin, kdy při sestupné hraně (FALLING) bude vykonán podprogram prerus.
Nekonečná smyčka loop je v této ukázce jednoduchá, kdy vždy v prvním kroku načteme stav digitálního vstupu do proměnné, se kterou pracuje podprogram prerus. Poté vytiskneme informaci o času od poslední detekce přerušení a počkáme po nastavený čas před novým během smyčky.
V podprogramu prerus se vždy kontroluje detekovaný stav smyčkou loop. Pokud je poslední detekovaný stav rovný jedničce, tedy detekovanému paprsku, provedeme dvě jednoduché operace. Nejprve vytiskneme informaci o detekování hladiny kapaliny a následně uložíme do proměnné aktuální čas, abychom mohli s touto proměnnou pracovat ve smyčce loop. Tímto způsobem budeme mít vyfiltrované případné rušení paprsku a také omezený počet zpráv při delším přerušení paprsku.

// Modul laserového snímače
// navody.dratek.cz

// nastavení čísel propojovacích pinů
#define pinVcc 2
#define pinOut 3
#define pinGnd 4
// proměnná pro uložení času přerušení
unsigned long casPreruseni = 0;
// proměnná pro uložení stavu paprsku
bool stav = 0;

void setup() {
  // inicializace komunikace po sériové lince
  // rychlostí 9600 baud
  Serial.begin(9600);
  // nastavení směrů propojovacích pinů
  pinMode(pinVcc, OUTPUT);
  pinMode(pinOut,  INPUT);
  pinMode(pinGnd, OUTPUT);
  // nastavení napájecích pinů pro správné napájení modulu
  digitalWrite(pinGnd, LOW);
  digitalWrite(pinVcc, HIGH);
  // krátká pauza pro ustálení stavu modulu
  delay(10);
  // nastavení přerušení na pin Out
  // při sestupné hraně (log1->log0) se vykoná program prerus
  attachInterrupt(digitalPinToInterrupt(pinOut), prerus, FALLING);
}

void loop() {
  // načteme aktuální stav pinu Out,
  // kdy 1 znamená detekovaný paprsek
  stav = digitalRead(pinOut);
  // pravidelná informace o času od poslední detekce
  Serial.print("Cas od posledni detekce přerušení: ");
  Serial.print(millis() - casPreruseni);
  Serial.println(" ms.");
  // pauza před novým během smyčky
  delay(1000);
}
void prerus() {
  // pokud byl před přerušením detekovaný paprsek,
  // vytiskneme informace o jeho přerušení
  if (stav == 1) {
    // výpis informace při detekci
    Serial.println("Detekovana preruseni laseru!");
    // uložení času aktivace
    casPreruseni = millis();
  }
}

Po nahrání uvedeného ukázkového kódu do Arduino desky s připojeným laserovým snímačem dostaneme například tento výsledek, kde si můžete všimnout, že jsem 2x přerušil laserový paprsek.

Cas od posledni detekce přerušení: 120 ms.
Cas od posledni detekce přerušení: 1121 ms.
Detekovana preruseni laseru!
Cas od posledni detekce přerušení: 786 ms.
Cas od posledni detekce přerušení: 1787 ms.
Cas od posledni detekce přerušení: 2787 ms.
Cas od posledni detekce přerušení: 3788 ms.
Cas od posledni detekce přerušení: 4788 ms.
Cas od posledni detekce přerušení: 5789 ms.
Cas od posledni detekce přerušení: 6789 ms.
Detekovana preruseni laseru!
Cas od posledni detekce přerušení: 452 ms.
Cas od posledni detekce přerušení: 1453 ms.

Modul laserového snímače je malý a jednoduchý modul, který nám umožňuje s Arduinem vytvářet například bezpečnostní či snímací zařízení. Můžeme s ním totiž vytvořit detektor přerušení laserového paprsku, jaký můžete znát z různých akčních filmů, či třeba laserový snímač otáček. Při konstrukci těchto zařízení si musíme dát pozor hlavně na omezení přístupu okolního světla, protože ostřejší denní světlo nebo vnitřní osvětlení může náš senzor taktéž aktivovat a nám tak kazit měření.

Seznam použitých komponent:
https://dratek.cz/arduino/1258-klon-arduino-uno-r3-atmega328p-ch340g-usb-typ-b-kabel-1459967190.html
https://dratek.cz/arduino/1708-modul-laseroveho-snimace.html

Další podobné články