IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

Lekce 12 - Arduino - Senzory a programování pohybového senzoru PIR

V předchozí lekci, Arduino - Druhy motorů a programování servo motoru, jsme si představili různé druhy motorů a vytvořili jsme nový projekt s mikroservem.

Dnešní díl našeho HW Arduino tutoriálu bude více teoretický. Představíme si totiž novou skupinu elektronických komponent, a to senzory. Povíme si základní informace o senzorice a senzorech obecně a poté se koukneme podrobněji na pohybový senzor typu PIR. Nakonec si uděláme malý projekt, kde nasimulujeme automatické venkovní osvětlení. Ukážeme si zapojení našeho senzoru, který si vzápětí i naprogramujeme.

Senzorika

Nejprve bychom začali tím, co to vůbec je senzorika. Senzorika zajišťuje automatické funkce různých strojů, výrobních linek a dopravních systémů. Pro tyto systémy je potřeba speciálních snímačů, čidel a měřících systémů. Dnes jsou již senzory prakticky všude, na autech, v domech a třeba i v mobilech. Jaká je tedy definice senzoru?

Senzor je obecně zdroj informací pro nějaký řídící systém, jímž může být např. ústředna nebo mikropočítač Arduino. V užším slova smyslu je senzorem technické zařízení, tedy součástka, která měří určitou fyzikální nebo technickou veličinu a převádí ji na signál. Tento signál lze dálkově přenášet a dále zpracovat v měřících řídích systémech. Nejčastěji jde o elektrický signál (časový průběh napětí nebo proudu).

Pokud měřená veličina není elektrická, hovoříme o elektrickém měření neelektrické veličiny.

Senzory mohou být používány drátově nebo dokonce i bezdrátově.

Požadavky na senzory

Na senzory je kladeno mnoho požadavků, které musejí splňovat:

  • jednoznačná závislost výstupní veličiny na vstupní,
  • vysoká přesnost,
  • vhodné dynamické vlastnosti,
  • odolnost vůči vnějším vlivům, které neměříme,
  • minimální zatěžování měřeného objektu,
  • jednoduchá konstrukce,
  • snadná montáž a údržba,
  • přijatelná cena.

Dělení senzorů

Senzory lze rozdělit do několika skupin, kritériem může být:

  • typ měřené veličiny,
  • způsob přenosu signálu (elektrické, hydraulické, pneumatické a jiné senzory),
  • druh fyzikálního principu, tedy způsob převodu hodnoty měřené veličiny na hodnotu signálu,
  • možnost styku s prostředím (dotykové či distanční, bezdotykové senzory),
  • stupeň integrace.

Druhy měřených veličin

Měřené veličiny dělíme na elektrické a neelektrické. Mezi elektrické veličiny patří napětí, proud, odpor, výkon, frekvence, kapacita a indukčnost. Neelektrickou veličinou je například poloha, rychlost, zrychlení, teplota, tlak, síla či objem.

Pojďme si nyní blíže představit slíbený pohybový senzor.

Pohybový senzor

Pasivní infračervené čidlo, zkráceně PIR (Passive Infrared Sensor), je elektromagnetické čidlo, které měří infračervené záření (IR) vyzařující z objektů v zorném poli čidla. Toto čidlo se nejčastěji používá v domácnosti, nejvíce ho uvidíme jako součást elektronického zabezpečovacího systému (EZS), kde hlídá konkrétní objekty před vniknutím narušitele. Hojně se používá také u osvětlení řízeného na základě pohybu.

Existují různé druhy PIR čidel, ty se hlavně liší v dosahu a rozptylu čočky:

  • Klasické PIR má dosah cca 12 m a rozptyl okolo 115° a je vhodný do klasických místností.
  • Vějíř má dosah cca 7 m a rozptyl 360°, je vhodný do koupelen nebo vstupních hal.
  • Chodbové PIR s nejvyšším dosahem, cca 25 m a rozptylem 45° najdeme zejména v dlouhých chodbách.
  • Duální PIR je vhodný použít, pokud máme doma domácího mazlíčka. Aby se spustil alarm, musí se aktivovat obě zóny. Dosah má cca 12 m a rozptyl okolo 115°.

Na obrázku můžeme vidět konkrétní model PIR, který se využívá v praxi:

PIR - Arduino - Hardware

My si naprogramujeme trochu jiný model, který ovšem pracuje na stejném principu. Pojďme se tedy vrhnout na zapojení našeho senzoru.

Schéma zapojení

Naše zapojení bude velice jednoduché, zde je seznam součástek, které budeme potřebovat:

  • Arduino,
  • nepájivé pole,
  • 1x LED,
  • 1x fotorezistor,
  • 1x rezistor 1 [kΩ],
  • 1x rezistor 150 [Ω],
  • PIR senzor a
  • propojovací kabely.

Máme-li všechny součástky, zapojíme je podle uvedeného schématu:

PIR-Zapojení - Arduino - Hardware

Máme-li zapojeno, můžeme se vrhnout k programování.

Programování PIR senzoru

Nejprve si řekneme, co by měl náš projekt umět. Chceme nasimulovat venkovní osvětlení ovládané pomocí pohybu. Když tedy PIR senzor zaznamená pohyb, rozsvítí LED na určitou dobu. To vše ale nastane pouze, pokud bude noc, nikoliv den. Z toho důvodu jsme do projektu zapojili i fotorezistor, který reaguje na množství přijatého světla.

Pojďme si tedy společně popsat jednotlivé části našeho 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;

Jako první si definujeme jednotlivé piny pomocí příkazu #define, PIR senzor a LED zapojíme klasicky do digitálních pinů, avšak fotorezistor musíme zapojit do analogového pinu, protože pracujeme s jinými hodnotami než 0 a 1.

Dále si vytvoříme dvě proměnné. Do první budeme ukládat hodnotu fotorezistoru, druhá nám poslouží jako pomocná proměnná pro zjištění aktivace čidla. Její pomocí poté určíme, zda se má LED rozsvítit či zůstat zhasnutá. Proměnná má označení volatile, které si vysvětlíme níže.

Ve funkci setup() nastavíme pinMode() pro jednotlivé prvky a Serial.begin(9600), abychom mohli psát do sériového monitoru:

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

Hlavní smyčka

V hlavním cyklu budeme volat pomocnou funkci Pohyb(), pojďme si ji doplnit:

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

Uvedenou funkcí měníme hodnotu naší pomocné proměnné, ale pouze za předpokladu, že je venku tma. Máme tu tudíž nejdříve podmínku testující hodnotu fotorezistoru.

Nyní můžeme doplnit funkci 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čátku zde načítáme hodnoty z fotorezistoru a ukládáme je do proměnné hodnota_fotorezistor, kterou hned vypíšeme do sériového monitoru.

Funkce attachInterrupt()

Jako další je zde funkce attachInterrupt(digitalPinToInterrupt(PIR), Pohyb, RISING), která je pro nás zcela nová. Tato funkce připojí uživatelskou funkci obsluhy přerušení na pin externího přerušení. To umožňuje vyhnout se periodické kontrole nějakého pinu a reagovat pouze na konkrétní událost na pinu. Přerušení Arduino spustí, když dojde ke změně digitálního signálu, který chceme monitorovat.

Můžeme si ale vybrat, co přesně chceme sledovat. K tomu slouží třetí parametr funkce attachInterrupt(). Máme na výběr ze čtyři typů přerušení:

  • RISING: Přerušení bude spuštěno, když signál přejde z LOW do HIGH.
  • FALLING: Přerušení bude spuštěno, když signál přejde z HIGH na LOW.
  • CHANGE: Přerušení bude spuštěno, když se signál změní.
  • LOW: Přerušení bude spuštěno vždy, když je signál LOW.

V prvním parametru pak uvádíme konkrétní pin, jehož hodnotu odesíláme pomocí příkazu digitalPinToInterrupt(). Druhý parametr pak obsahuje volanou pomocnou funkci.

Pomocná funkce, kterou v přerušení voláme nesmí mít žádnou návratovou hodnotu (je typu void) a nesmí brát žádné parametry!

Funkci attachInterrupt() jsme nastavili obsluhu našeho PIR senzoru a volání funkce Pohyb(), pokud senzor pohyb zaznamená, tedy dosáhne hodnoty HIGH. Ve funkci Pohyb() pak měníme pomocnou proměnnou pohyb, kterou jsme v úvodu kvůli tomu označili jako volatile.

V případě záznamu pohybu a nízkých hodnotách fotorezistoru bude tedy následující podmínka splněna. Informaci vypíšeme do sériového monitoru a na pět sekund rozsvítíme diodu. Tu poté zhasneme a nastavíme pomocnou proměnnou na false.

Testování

Nyní máme funkční PIR senzor! Projekt si můžeme spustit a vyzkoušet. Jak ale v Tinkercadu zařídíme změnu osvětlení nebo simulaci pohybu? Pro změnu světla stačí, když při spuštěné simulaci klikneme na fotorezistor a zobrazí se nám posuvná vodorovná lišta, kde intenzitu světla posunutím změníme. Jak můžeme vidět, při spuštění je fotorezistor nastaven na nulovou hodnotu, tudíž největší tmu.

Simulaci pohybu zařídíme obdobně. Při spuštěné simulaci klikneme na pohybový senzor a zobrazí se nám úhel jeho záběru. V něm je malé kolečko, kterým můžeme pohnout a pohybový senzor tak aktivovat.

Příště, v lekci Arduino - Měření vzdálenosti ultrasonickým modulem HC-SR04, si ukážeme, jak je možné měřit vzdálenosti pomocí ultrazvukového senzoru. Vysvětlíme si, jak funguje, jak jej zapojit i naprogramovat.


 

Předchozí článek
Arduino - Druhy motorů a programování servo motoru
Všechny články v sekci
Arduino - Hardware
Přeskočit článek
(nedoporučujeme)
Arduino - Měření vzdálenosti ultrasonickým modulem HC-SR04
Článek pro vás napsal Dominik Němeček
Avatar
Uživatelské hodnocení:
8 hlasů
Autor se věnuje programování mikropočítačů Arduino.
Aktivity