Fotoelektrický snímač otáček je vstupní modul pro Arduino. Tento snímač je původně používaný v tiskárnách od firmy Hewlett Packard, kde slouží pro detekci polohy tiskové hlavy. Uvnitř snímače najdeme optickou bránu, která díky dvěma snímačům dokáže detekovat nejen průchod předmětu, ale i směr průchodu.
Součástí balení je kromě senzoru i nerezové kolečko, které slouží jako otočný čtený element. Je ale nutné ho správně upevnit s ohledem na průchod senzorem. Pro napájení je možné použít 3,3 nebo 5 Voltů z Arduina.

Fotoelektrický snímač otáček

Pro úspěšné propojení senzoru proudu a Arduino desky propojíme celkem 4 vodiče. Připojíme „+“ na 5V Arduina, „-„ na GND, O1 na pin D2 a O2 na pin D3. Pro datové piny je nutné použít piny, které umí funkci přerušení (anglicky interrupt), kdy u Arduino UNO jsou to piny D2 a D3. Více informací najdete zde https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/.

Fotoelektrický snímač otáček

Ukázkový kód obsahuje na svém začátku nastavení čísel propojovacích pinů a vytvoření proměnných pro běh programu.
Ve funkci setup zahájíme komunikaci po sériové lince a poté nastavíme oba datové piny jako vstupní. V posledním kroku nastavíme přerušovací piny tak, aby každý reagoval na správnou změnu a zavolal příslušnou funkci.
Nekonečná smyčka loop v prvním kroku vždy nahraje poslední přečtený stavu pinu O1 do proměnné předchozí stav a poté porovná starou hodnotu a aktuální pozici. Pokud došlo ke změně pozice, vypíšeme novou pozici po sériové lince a uložíme si aktuální pozici jako starou hodnotu, aby nedocházelo k tištění pozice každý běh smyčky.
Funkce nactiO1 je zavolána vždy při přerušení pinu O2. V této funkci načteme stav pinu O1 a poté kontrolujeme, jestli nedošlo ke změně stavu oproti předchozí uložené hodnotě. Pokud ke změně došlo, tak podle stavu pinu O2 buď přičteme nebo odečteme jedničku z proměnné pozice.
Funkce nactiO2 je zavolána vždy při přerušení pinu O1. V této funkci pouze načteme stav pinu O2 do proměnné.

// Fotoelektrický snímač otáček HP
// navody.dratek.cz

// nastavení čísel propojovacích pinů
#define pinO1 2
#define pinO2 3
// proměnné pro běh programu
int pozice = 0;
int predchoziStav = LOW;
int staraHodnota = 0;
int stavO1 = LOW;
int stavO2 = LOW;

void setup() {
  // zahájení komunikace po sériové lince
  Serial.begin(9600);
  // nastavení vstupních pinů
  pinMode(pinO1, INPUT);
  pinMode(pinO2, INPUT);
  // nastavení přerušovacích rutin pro oba piny
  attachInterrupt(digitalPinToInterrupt(pinO1), nactiO2, FALLING);
  attachInterrupt(digitalPinToInterrupt(pinO2), nactiO1, CHANGE);
}

void loop() {
  // uložení stavu pinu 01 jako předchozí hodnoty
  predchoziStav = stavO1;
  // porovnání staré hodnoty a aktuální pozice,
  // pokud se liší, vytiskneme aktuální pozici
  if (pozice != staraHodnota) {
    Serial.println(pozice, DEC);
    // uložení aktuální pozice do proměnné,
    // aby docházelo k tištění pouze při změně
    staraHodnota = pozice;
  }
}

void nactiO1() {
  // načtení stavu pinu O1
  stavO1 = digitalRead(pinO1);
  // kontrola stavu oproti předchozímu měření
  if ((predchoziStav == LOW) & (stavO1 == HIGH)) {
    // pokud došlo ke změně, tak podle stavu O2
    // přičteme nebo odečteme pozici
    if (stavO2 == LOW) {
      pozice--;
    }
    else {
      pozice++;
    }
  }
}

void nactiO2() {
  // načtení stavu pinu O2 do proměnné
  stavO2 = digitalRead(pinO2);
}

Po nahrání ukázkového kódu do Arduino desky s připojeným snímačem otáček si můžete vyzkoušet pohyb předmětu z jedné či druhé strany snímače a dostanete například tento výsledek:

-3
-2
-1
0
-1
-2
-3

Fotoelektrický snímač otáček je zajímavá ukázka, jak lze snímat otáčky včetně informace o směru pomocí jednoduché kombinace dvou snímačů. Uvedený ukázkový program slouží hlavně pro otestování samotného senzoru, protože například následná kalibrace v zařízení či měření rychlosti už záleží na umístění a provedení otočného elementu. Tento snímač pak lze použít v různých zařízeních, kde potřebujeme snímat otáčky pomocí foto elementů bez ovlivňování samotného zařízení.

Seznam použitých komponent:
https://dratek.cz/arduino/7763-seeeduino-v4.2-arduino-uno-kompatibilni.html
https://dratek.cz/arduino/1296-fotoelektricky-snimac-otacek-hewlett-packard.html

FB tw

Další podobné články