Pohybové čidlo typu HC-SR501 obsahuje pyroelektrický senzor, který snímá své okolí pod úhlem přibližně 120 stupňů. Pokud v tomto snímaném prostoru proběhne větší změna teplot, tedy například projde člověk či zvíře, je tato změna zaznamenána pomocnou elektronikou na modulu pohybového čidla a uživatel se o této skutečnosti dozví díky změně výstupního napětí. Na modulu HC-SR501 se také nachází dva trimry. Pomocí prvního lze nastavit citlivost snímání okolí (označen jako Sx či sensitivity), druhým trimrem se nastavuje časová prodleva, respektive délka sepnutého výstupu po detekci pohybu. Při použití pohybového čidla HC-SR501 je však výhodné nastavit citlivost dle snímaného prostoru a čas co nejkratší z důvodu co nejčastější opakované detekce osob či zvířat.
Pro propojení s Arduino deskou stačí propojit 3 vodiče. Připojíme Vcc na +5V, OUT na pin 2 nebo jiný volný datový pin na Arduino desce a GND na zem.
Ukázkový kód je velice jednoduchý. Na začátku obsahuje nastavení čísla propojovacího pinu a v podprogramu setup nastavení komunikace přes sériovou linku, nastavení pinu cidloPin jako vstupní a také nastavení tohoto pinu pro využití přerušení číslo 0. Přerušení jde využít u desky Arduino Uno pouze na pinech 2 a 3, je tedy dobré zvolit jeden z těchto pinů. Přerušení je v tomto případě nastaveno na detekci náběžné (či rostoucí) hrany, tedy při zvýšení napětí z 0 na 5V. V nekonečné smyčce loop se v této ukázce nachází tisknutí informace o času od zapnutí Arduino desky a je to pouze z demonstračních účelů. V běžném použití by tedy zde mohla probíhat jakákoliv činnost. Na konci programu se nachází důležitý podprogram detekce, který se zavolá vždy při detekci přerušení. V tomto případě se vypíše opět na sériovou linku informace o detekci pohybu pomocí pohybového čidla HC-SR501.
// Pohybové čidlo HC-SR501 // nastavení čísla vstupního pinu const int cidloPin = 2; void setup() { // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); // inicializace digitálního vstupu pinMode(cidloPin, INPUT); // nastavení přerušení na pin 2 (int0) // při rostoucí hraně (logO->log1) se vykoná program prerus attachInterrupt(0, detekce, RISING); } void loop() { // pro ukázku se každou vteřinu vytiskne // zpráva o počtu vteřin od zapnutí Arduina Serial.print("Cas od zapnuti: "); Serial.print(millis()/1000); Serial.println(" vterin."); delay(1000); } void detekce() { // pokud je aktivován digitální vstup, // vypiš informaci po sériové lince Serial.println("Detekce pohybu pomoci HC-SR501!"); }
Po nahrání programu do Arduino desky a detekci pohybu v okolí čidla dostaneme například tento výpis:
Cas od zapnuti: 30 vterin. Detekce pohybu pomoci HC-SR501! Cas od zapnuti: 31 vterin. Cas od zapnuti: 32 vterin. Cas od zapnuti: 33 vterin. Cas od zapnuti: 34 vterin. Cas od zapnuti: 35 vterin. Cas od zapnuti: 36 vterin. Cas od zapnuti: 37 vterin. Detekce pohybu pomoci HC-SR501! Cas od zapnuti: 38 vterin.
Pohybové čidlo HC-SR501 lze využít v různých aplikacích, kdy je třeba detekovat pohyb osob či zvířat v okolí zařízení. Pyroelektrický senzor obsažený v tomto pohybovém čidle totiž dokáže poměrně dobře detekovat změny teploty ve svém zorném poli. Zároveň je ale nutné počítat s tím, že při větších výkyvech teploty v okolí čidla HC-SR501 může docházet k falešným detekcím.
Seznam použitých komponent:
http://dratek.cz/arduino/839-arduino-pohybove-cidlo.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html