Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

12. diel - Arduino - Senzory a programovanie pohybového senzora PIR

V predchádzajúcej lekcii, Arduino - Druhy motorov a programovanie servo motora , sme si predstavili rôzne druhy motorov a vytvorili sme nový projekt s mikroservem.

Dnešný diel nášho HW Arduino tutoriálu bude viac teoretický. Predstavíme si totiž novú skupinu elektronických komponentov, a to senzory. Povieme si základné informácie o senzorike a senzoroch všeobecne a potom sa pozrieme podrobnejšie na pohybový senzor typu PIR. Nakoniec si urobíme malý projekt, kde nasimulujeme automatické vonkajšie osvetlenie. Ukážeme si zapojenie nášho senzora, ktorý si vzápätí aj naprogramujeme.

Senzorika

Najprv by sme začali tým, čo to vôbec je senzorika. Senzorika zaisťuje automatické funkcie rôznych strojov, výrobných liniek a dopravných systémov. Pre tieto systémy sú potrebné špeciálne snímače, snímače a meracie systémy. Dnes sú už senzory prakticky všade, na autách, v domoch a napríklad aj v mobiloch. Aká je teda definícia senzora?

Senzor je všeobecne zdroj informácií pre nejaký riadiaci systém, ktorým môže byť napr. ústredňa alebo mikropočítač Arduino. V užšom slova zmysle je senzorom technické zariadenie, teda súčiastka, ktorá meria určitú fyzikálnu alebo technickú veličinu a prevádza ju na signál. Tento signál je možné diaľkovo prenášať a ďalej spracovať v meracích riadiacich systémoch. Najčastejšie ide o elektrický signál (časový priebeh napätia alebo prúdu).

Pokiaľ meraná veličina nie je elektrická, hovoríme o elektrickom meraní neelektrickej veličiny.

Senzory môžu byť používané drôtovo alebo dokonca aj bezdrôtovo.

Požiadavky na senzory

Na senzory je kladených mnoho požiadaviek, ktoré musia spĺňať:

  • jednoznačná závislosť výstupnej veličiny na vstupnej,
  • vysoká presnosť,
  • vhodné dynamické vlastnosti,
  • odolnosť voči vonkajším vplyvom, ktoré nemeriame,
  • minimálne zaťažovanie meraného objektu,
  • jednoduchá konštrukcia,
  • jednoduchá montáž a údržba,
  • prijateľná cena.
Delenie senzorov

Senzory je možné rozdeliť do niekoľkých skupín, kritériom môže byť:

  • typ meranej veličiny,
  • spôsob prenosu signálu (elektrické, hydraulické, pneumatické a iné senzory),
  • druh fyzikálneho princípu, teda spôsob prevodu hodnoty meranej veličiny na hodnotu signálu,
  • možnosť styku s prostredím (dotykové či dištančné, bezdotykové senzory),
  • stupeň integrácie.
Druhy meraných veličín

Merané veličiny delíme na elektrické a neelektrické. Medzi elektrické veličiny patrí napätie, prúd, odpor, výkon, frekvencia, kapacita a indukčnosť. Neelektrickou veličinou je napríklad poloha, rýchlosť, zrýchlenie, teplota, tlak, sila či objem.

Poďme si teraz bližšie predstaviť sľúbený pohybový senzor.

Pohybový senzor

Pasívne infračervené čidlo, skrátene PIR (Passive Infrared Sensor), je elektromagnetické čidlo, ktoré meria infračervené žiarenie (IR) vyžarujúce z objektov v zornom poli čidla. Toto čidlo sa najčastejšie používa v domácnosti, najviac ho uvidíme ako súčasť elektronického zabezpečovacieho systému (EZS), kde stráži konkrétne objekty pred vniknutím narušiteľa. Hojne sa používa aj pri osvetlení riadenom na základe pohybu.

Existujú rôzne druhy PIR čidiel, tie sa hlavne líšia v dosahu a rozptyle šošovky:

  • Klasické PIR má dosah cca 12 ma rozptyl okolo 115 ° a je vhodný do klasických miestností.
  • Vejár má dosah cca 7 ma rozptyl 360 °, je vhodný do kúpeľní alebo vstupných hál.
  • Chodbové PIR s najvyšším dosahom, cca 25 ma rozptylom 45 ° nájdeme najmä v dlhých chodbách.
  • Duálny PIR je vhodný použiť, ak máme doma domáceho maznáčika. Aby sa spustil alarm, musia sa aktivovať obe zóny. Dosah má cca 12 ma rozptyl okolo 115 °.
Na obrázku môžeme vidieť konkrétny model PIR, ktorý sa využíva v praxi:
PIR - Arduino - Hardvér

My si naprogramujeme trochu iný model, ktorý však pracuje na rovnakom princípe. Poďme sa teda vrhnúť na zapojenie nášho senzora.

Schéma zapojenia

Naše zapojenie bude veľmi jednoduché, tu je zoznam súčiastok, ktoré budeme potrebovať:

  • Arduino,
  • nepájivé pole,
  • 1x LED,
  • 1x fotorezistor,
  • 1x rezistor 1 [kΩ],
  • 1x rezistor 150 [Ω],
  • PIR senzor a
  • prepojovacie káble.
Ak máme všetky súčiastky, zapojíme ich podľa uvedenej schémy:
PIR-Zapojenie - Arduino - Hardvér

Ak máme zapojené, môžeme sa vrhnúť na programovanie.

Programovanie PIR senzora

Najprv si povieme, čo by mal náš projekt vedieť. Chceme nasimulovať vonkajšie osvetlenie ovládané pomocou pohybu. Keď teda PIR senzor zaznamená pohyb, rozsvieti LED na určitú dobu. To všetko ale nastane iba ak bude noc, nie deň. Z toho dôvodu sme do projektu zapojili aj fotorezistor, ktorý reaguje na množstvo prijatého svetla.

Poďme si teda spoločne popísať jednotlivé časti nášho kódu:

#define PIR 2 // Definování digitálního pinu pro PIR
#define LED 3 // Definování digitálního pinu pro LED
#define FOTOREZISTOR A0 // Definování analogového pinu pro FOTOREZISTOR
int hodnota_fotorezistor; // Proměnná, ve které budeme uchovávat hodnotu fotorezistoru
volatile bool pohyb;

Ako prvé si definujeme jednotlivé piny pomocou príkazu #define, PIR senzor a LED zapojíme klasicky do digitálnych pinov, avšak fotorezistor musíme zapojiť do analógového pinu, pretože pracujeme s inými hodnotami ako 0 a 1.

Ďalej si vytvoríme dve premenné. Do prvej budeme ukladať hodnotu fotorezistora, druhá nám poslúži ako pomocná premenná na zistenie aktivácie čidla. Jej pomocou potom určíme, či sa má LED rozsvietiť alebo zostať zhasnutá. Premenná má označenie volatile, ktoré si vysvetlíme nižšie.

Vo funkcii setup() nastavíme pinMode() pre jednotlivé prvky a Serial.begin(9600), aby sme mohli písať do sériového monitora:

void setup()
{
  pinMode(PIR, INPUT);
  pinMode(LED, OUTPUT);
  pinMode(FOTOREZISTOR, INPUT);
  Serial.begin(9600);
}

Hlavná slučka

V hlavnom cykle budeme volať pomocnú funkciu Pohyb(), poďme si ju doplniť:

void Pohyb() // Funkce pro zaznamenání pohybu
{
  if (hodnota_fotorezistor < 200)
  {
      pohyb = true;
  }
}

Uvedenou funkciou meníme hodnotu našej pomocnej premennej, ale iba za predpokladu, že je vonku tma. Máme tu teda najskôr podmienku testujúcu hodnotu fotorezistora.

Teraz môžeme doplniť funkciu loop():

void loop()
{
  hodnota_fotorezistor = analogRead(FOTOREZISTOR);
  Serial.print("Hodnota fotorezistoru je: ");
  Serial.println(hodnota_fotorezistor);

  // Funkce pro správné fungování PIR čidla, jako parametry bere pin, volanou funkci a mód
  attachInterrupt(digitalPinToInterrupt(PIR), Pohyb, RISING);

  if (pohyb)
  {
    Serial.println("Pohyb zaznamenan");
    digitalWrite(LED, HIGH);
    delay(5000);
    digitalWrite(LED, LOW);
    pohyb = false;
  }
}

Na začiatku tu načítame hodnoty z fotorezistora a ukladáme ich do premennej hodnota_fotorezistor, ktorú hneď vypíšeme do sériového monitora.

Funkcia attachInterrupt():

Ako ďalšia je tu funkcia attachInterrupt(digitalPinToInterrupt(PIR), Pohyb, RISING), ktorá je pre nás úplne nová. Táto funkcia pripojí užívateľskú funkciu obsluhy prerušenia na pin externého prerušenia. To umožňuje vyhnúť sa periodickej kontrole nejakého pinu a reagovať iba na konkrétnu udalosť na pinu. Prerušenie Arduino spustí, keď dôjde k zmene digitálneho signálu, ktorý chceme monitorovať.

Môžeme si ale vybrať, čo presne chceme sledovať. Na to slúži tretí parameter funkcie attachInterrupt(). Máme na výber zo štyroch typov prerušení:

  • RISING: Prerušenie bude spustené, keď signál prejde z LOW do HIGH.
  • FALLING: Prerušenie bude spustené, keď signál prejde z HIGH na LOW.
  • CHANGE: Prerušenie bude spustené, keď sa signál zmení.
  • LOW: Prerušenie bude spustené vždy, keď je signál LOW.
V prvom parametri potom uvádzame konkrétny pin, ktorého hodnotu odosielame pomocou príkazu digitalPinToInterrupt(). Druhý parameter potom obsahuje volanú pomocnú funkciu.

Pomocná funkcia, ktorú v prerušení voláme nesmie mať žiadnu návratovú hodnotu (je typu void) a nesmie brať žiadne parametre!

Funkciu attachInterrupt() sme nastavili obsluhu nášho PIR senzora a volania funkcie Pohyb(), pokiaľ senzor pohyb zaznamená, teda dosiahne hodnotu HIGH. Vo funkcii Pohyb() potom meníme pomocnú premennú pohyb, ktorú sme v úvode kvôli tomu označili ako volatile.

V prípade záznamu pohybu a nízkych hodnotách fotorezistora bude teda nasledujúca podmienka splnená. Informáciu vypíšeme do sériového monitora a na päť sekúnd rozsvietime diódu. Tú potom zhasneme a nastavíme pomocnú premennú na false.

Testovanie

Teraz máme funkčný PIR senzor! Projekt si môžeme spustiť a vyskúšať. Ako ale v Tinkercade zariadime zmenu osvetlenia alebo simuláciu pohybu? Na zmenu svetla stačí, keď pri spustenej simulácii klikneme na fotorezistor a zobrazí sa nám posuvná vodorovná lišta, kde intenzitu svetla posunutím zmeníme. Ako môžeme vidieť, pri spustení je fotorezistor nastavený na nulovú hodnotu, teda najväčšiu tmu.

Simuláciu pohybu zariadime obdobne. Pri spustenej simulácii klikneme na pohybový senzor a zobrazí sa nám uhol jeho záberu. V ňom je malé koliesko, ktorým môžeme pohnúť a pohybový senzor tak aktivovať.


 

Predchádzajúci článok
Arduino - Druhy motorov a programovanie servo motora
Všetky články v sekcii
Arduino - Hardvér
Článok pre vás napísal Dominik Němeček
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování mikropočítačů Arduino.
Aktivity