Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:pir-ctrl

Zadání

Prozkoumejte možnosti pohybového čidla HC-SR501 s PIR senzorem, postaveného na čipsetu BISS0001. Pomocí vhodné vývojové desky se vstupem AD převodníku připojte na vhodné analogové signály PIR čidla (16=1OUT, resp. 12=2OUT) a proveďte analýzu parametrů čidla.


PIR detektory

Modul HC-SR501 slouží k detekci pohybu. Princip je založen na pyroelektrickém jevu, kdy sensor generuje elektrický potenciál při změně teploty, konkrétně dochází k deformaci krystalické mřížky. Pomocí optického systému (zrcadlo nebo Fresnelova čočka) se dopadající IR záření, které vyzařují okolní předměty, soustřeďuje na PIR element.

PIR element

Jedná se o polovodičovou součástku, která je hlavním prvkem PIR detektoru. Po dopadu IR záření se generuje elektrický povrchový náboj Q. Výstupní signal je následně meřen citlivým FET tranzistorem. Pyroelektrický snímač bývá take vybaven filtrem záření pro omezení rozsahu vlnových délek dopadajících na detektor (8 – 14 μm). Lidské tělo vyzařuje do prostoru záření o vlnové délce 9,4 μm.

 PIR element

Zpracování signálu

  1. Analogové – dochází k vyhodnocování signálu na základě překročení dané prahové úrovně po určitou dobu (zamezení chybného vyhodnocení)
  2. Digitální – sofistikovanější metoda, při níž dochází ke kvantování. Vyhodnocuje se velikost signálu, jeho strmost, časování a kmitočtové spektrum. Pro zamezení chybného vyhodnocení je signál take filtrován.

 Výstupni signál PIR senzoru pro zpracování

Modul HC-SR 501

Modul obsahuje PIR senzor, integoravný obvod BIS0001 sloužící k vyhodnocování signálu z PIR senzorů a další pomocné součástky. Modul umožňuje pomocí dvou odporových trimrů měnit vzdálenost pro detekci pohybu (až 7 m) a dobu sepnutí logického výstupu při vyhodnocení pohybu (5 s – 200 s). Dále umožňuje pomocí jumperu volit mezi jednorázovým nebo opakovaným sepnutím výstup (single nebo repeatable trigger).

Parametry čidla HC-SR 501

Parametr Hodnota
Napájecí napětí 5 - 20V
Výstup 0, 3.3V TTL
Doba sepnutí 5 – 200 sek
Dosah detekce cca 7 m
Úhel detekce menší než 120°
Klidový proud méně než 50 uA
Pracovní teplota -15°C až 70°C
Rozměr 32x24x24 mm

 Čidlo HC-SR 501

Chipset BISS0001

Jedná se o integrovaný obvod založený na technologii CMOS, který zpracovává výstupní signal PIR senzoru a detekuje tak pohyb v blízkosti čidla. Obsahuje dvojici kaskádně řazených operačních zesilovačů zajišťujících zesílení výstupního signálu senzoru.

Blokový diagram chipsetu BIS0001  Blokový diagram chipsetu BISS0001


Testování

Za účelem testování byla použita vývojová deska FRDM KL25Z a vývojové prostředí mbed OS. Na příslušné analogové a digitální vstupy byly připojeny výstupní signály modulu (TTL výstup, analogové výstupy operačních zesilovačů čipsetu BISS0001). Napájecí napětí čidla HC-SR 501 bylo 5V.

Na úvod byl proveden test ověření funkčnosti se sledováním logického výstupu čidla HC-SR 501. Byl napsán kód, který umožňuje změřit dobu aktivního výstupu při jednorázovém sepnutí (s přislušným nastavením jumperu pro Single trigger mód). Tímto byl ověřen nastavitelný rozsah doby sepnutí.

Část zdrojového kódu pro zjištění doby sepnutí (single trigger delay)

#include "mbed.h"
#include "USBSerial.h"
#include "millis.h"
 
DigitalOut  myLed(LED1);
DigitalIn   digitalOutputPIR(PTB0);
USBSerial   serial;
 
int MeasureTriggerDelay(void) {
 
    uint8_t measureFlagON = 0;
    uint8_t completeMeasureFlag = 0;
    time_t triggerTime, offTime;
 
    while(!completeMeasureFlag){
 
        if(digitalOutputPIR) {
 
            myLed = 0;
            if(!measureFlagON) {
 
                triggerTime = millis() / 1000;
                serial.printf("/KALIBRACE/ Detekovan pohyb /KALIBRACE/\r\n");
 
            }
            measureFlagON = 1;
 
        }
        else {
 
            myLed = 1;
            offTime = millis() / 1000;
            serial.printf("/KALIBRACE/ Vystup odpojen, trigger delay je %d sekund /KALIBRACE/\r\n", offTime - triggerTime);
            if(measureFlagON) completeMeasureFlag = 1;
 
       }         
 
    }
 
    return (offTime - triggerTime);
}
 
 
int main() {
 
    int triggerDelayTime = 4;
    int printFlag = 0;
    int triggerTime = 0;
    myLed = 1;
 
    millisStart();
    wait(5);
 
    serial.printf("Zjistuji dobu aktivniho vystupu - trigger delay\r\n");
    while(digitalOutputPIR != 1) {};
    triggerDelayTime = MeasureTriggerDelay();
 
    while(1) {
 
 
    }
}

Výstup na sériovém portu při nastavení časovacího trimru na nejnižší hodnotu je uveden v následujícím bloku. Změřená doba sepnutéhu výstupu byla 3 sekundy, výrobce uvádí minimální dobu 5 sekund.

Zjistuji dobu aktivniho vystupu - trigger delay
/KALIBRACE/ Detekovan pohyb /KALIBRACE/
/KALIBRACE/ Vystup odpojen, trigger delay je 3 sekund /KALIBRACE/

Při nastavení trimru přibližně v polovině rozsahu byla doba sepnutí 302 sekund, při nastavení trimru na maximum pak 620 sekund, přičemž výrobce uvádí maximální dobu 500 sekund.

V rozšířené verzi zdrojového kódu je po počátečním měření parametru triggerDelayTime vykonáváno ve smyčce měření, které vyhodnocuje dobu sepnutí logického výstupu a ze známého parametru triggerDelayTime se určuje kolikrát došlo k opakovanému sepnutí během jedné periody (doby log.1 na výstupu).

Ukázka výstupu pro různá měření

Zjistuji dobu aktivniho vystupu - trigger delay
/KALIBRACE/ Detekovan pohyb /KALIBRACE/
/KALIBRACE/ Vystup odpojen, trigger delay je 3 sekund /KALIBRACE/
Detekovan pohyb 19 sekund od zapnuti FRDM
LED vypnuta po 6 sekundach od sepnuti
Opakovany trigger probehl 1x krat
Detekovan pohyb 32 sekund od zapnuti FRDM
LED vypnuta po 4 sekundach od sepnuti
Opakovany trigger probehl 0x krat
Detekovan pohyb 53 sekund od zapnuti FRDM
LED vypnuta po 26 sekundach od sepnuti
Opakovany trigger probehl 7x krat

Analogové signály

Dále byl zkoumán výstupní analogový signál prvního operačního zesilovače integrovaného obvodu BISS0001 (pin 16) a jeho vliv na logický výstup čidla. Analogový a digitální výstup je v nekonečné smyčce vzorkován s periodou 10 ms a následně odeslán po virtuálním sériovém portu do PC. Data jsou vizualizována pomocí Serial Plotteru vývojového prostředí Arduino IDE. Logický výstup čidla je indikován vestavěnou LED diodou.

Zdrojový kód pro zkoumání analogového výstupu

#include "mbed.h"
#include "USBSerial.h"
 
DigitalOut  myLed(LED1);
DigitalIn   digitalOutputPIR(PTB0);
AnalogIn    analogOutputPIR(A1);
USBSerial   serial;
 
int main() {
 
    float analogValue = 0;
 
    while(1) {
 
        analogValue = float(analogOutputPIR);
        myLed = !digitalOutputPIR;
 
        serial.printf("%f", 255*analogValue); //posli analogovou hodnotu na UART
        serial.printf(" ");
 
        if(digitalOutputPIR) serial.printf("50\r\n"); //posli hodnotu logickeho vystupu na UART (50 = log. 1, scaling osy Y)
        else serial.printf("0\r\n");
        wait_ms(10);
 
    }
}

Na následujícím obrázku jsou zachyceny výstupní signály (červeně - logický výstup, modře - analogový) při nastavené době sepnutí výstupu 3 sekundy. Obvod po přechodu výstupu do log. 0 blokuje signály na vstupu po dobu 2,5 sekundy z důvodu možného indukčního rušení (vypnutí relé).

Na následujícím obrázku je modul přepnut jumperem do režimu Repeatable trigger, kdy „drží“ výstup v log.1 po dobu, kdy je detekován pohyb.

Při rychlejším pohybu však nevykazuje detektor konzistentní výstup, viz. následující obrázek. Nacházejí se zde 4 přibližně stejné změny v signálu, detekce je buď okamžitá, opožděná nebo žádná.


Ukázka

Zdrojové kódy

Zdroje informací

2017/pir-ctrl.txt · Poslední úprava: 2018/01/14 13:06 autor: Jaroslav Venhoda