Arduino a falešné poplachy

Jakuza

Arduino a falešné poplachy
« kdy: 06. 07. 2017, 22:20:43 »
Z arduina sem si udelal jednoduchy alarm.

Kód: [Vybrat]

attachInterrupt(digitalPinToInterrupt(2), changeState, HIGH).

void changeState(){
 delay(1000);
 pinStatus=digitalRead(2);
 if (pingStatus==1){
  .....
 }

}


Pokud PIR cidlo nedetekuje pohyb je pin trvale pripojen na zem. Jak pir zaregistruje pohyb a okruh se rozpoji pin je ve stavu 1 a jde se do preruseni. Tam se ceka vterinu (pro pripad nejakeho zaruseni) a pak se pin otestuje na stav...

Cas od casu dostanu falesny poplach. Nevim co ho muze vyvolavat. Pir cidlo miri do mistnosti a neni primo oslnovano sluncem ci jinym zdrojem. Cele je to napajene spinanym zdrojem 15V pres stabilizator na 12V. Vsechny zeme mam pospojovane, ale nejsem schopny prijit na to kde je chyba.

Zkousel sem kontakt cidla trvale pripojit a byl klid tak podezrivam cidlo, ale uvital bych nazor Vas ostatnich. Je to jen hracka, ale i tak me stve, ze nemuzu prijit na kloub tomu, kde se berou ty plane poplachy.

Prece jen puls musi trvat neco dele pres 1,2 vteriny...



« Poslední změna: 07. 07. 2017, 20:54:57 od Roman Bořánek »


Olda

Re:Arduino a falesne poplachy
« Odpověď #1 kdy: 06. 07. 2017, 23:58:55 »


Prece jen puls musi trvat neco dele pres 1,2 vteriny...
Nemusí, pokud se rušivý puls objeví znovu po 1000ms, tak si Arduino myslí, že hodnota H trvala už od přerušení.
Při obsluze přerušení jako první změnit přerušení na sestupnou hranu a pak měřit dobu mezi náběžnou (první přerušení) a sestupnou (druhé přerušení) hranou.

Trupik

Re:Arduino a falesne poplachy
« Odpověď #2 kdy: 07. 07. 2017, 06:21:06 »
Falošné poplachy sú častým problémom aj profesionálnych riešení. Obvykle sa proti nim bojuje tým, že sa poplach vyhlási až po detekovaní na dvoch rozdielnych čidlách.

Daevid

Re:Arduino a falesne poplachy
« Odpověď #3 kdy: 07. 07. 2017, 07:35:09 »
V programe je chyba "if (pingStatus==1){"

Daevid

Re:Arduino a falesne poplachy
« Odpověď #4 kdy: 07. 07. 2017, 07:45:04 »
Note

Inside the attached function, delay() won't work and the value returned by millis() will not increment. Serial data received while in the function may be lost. You should declare as volatile any variables that you modify within the attached function. See the section on ISRs below for more information.


Nemam skusenosti, tak to mozno iba zle chapem ale tu sa pise ze vo funkcii prerusenia delay nefunguje! Opravte ma ak som to zle pochopil...


SB

Re:Arduino a falesne poplachy
« Odpověď #5 kdy: 07. 07. 2017, 12:35:00 »
Jak píše Olda, vy jste změřil pouze to, že sekundu od sebe byl příznak čidla aktivní. Co se dělo mezitím, není známo.
Osobně bych to řešil hlídáním CHANGE místo HIGH a pořízením příznaku výskytu HI a LO (na začátku oba false) a jejich testováním před a po čekání 1 s.
Také je možné, že má čidlo zákmity podobně jako tlačítko (neznám ho), takže se to dá řešit integrací příznaku sepnutí po tu dobu sekundy a vyhodnocení dostatečné naintegrované hodnoty.

Hellraiser

Re:Arduino a falesne poplachy
« Odpověď #6 kdy: 07. 07. 2017, 13:02:16 »
Daevid ma pravdu v preruseni by delay nemel fungovat ale snad se to necha obejit pouzitim detachInterrupt uvnitr funkce preruseni. Mozna to chapu spatne ale kdyz ma pin 2 hodnotu HIGH spusti se funkce preruseni ktera vterinu ceka nez zacne neco delat. Ale kdyz se behem cekani hodnota zmeni na LOW a pak zpet na HIGH tak se znova spusti preruseni od zacatku ne?
Priznam se ze preruseni v arduinu mi zrovna nefunguju podle mejch predpokladu, takze se muzu mylit, ale myslim ze tohle by mohlo delat problem. Navic funkce preruseni ma bejt co nejkratsi na dobu vykonani.

Fbi

Re:Arduino a falesne poplachy
« Odpověď #7 kdy: 07. 07. 2017, 13:18:29 »
Takto se s přerušením nepracuje.

Nastav přerušení tak, že bude reagovat na náběžnou/sestupnou (Tu, která přijde jakmile čidlo registruje pohyb) hranu signálu. Uvnitř prerušení spusť timer, který bude generovat přerušení po 1000ms (Nebo jaký čas to chceš) a uprav původní přerušení tak, aby reagovalo na opačnou hranu signálu.

Pokud přijde opačná hrana, tak zastavíš timer a vrátíš prerušení do původního stavu. Pokud ne, tak se po 1000ms rozběhne přerušení z timeru, kde už se můžou provádět akce, které chceš...

SPECZ

Re:Arduino a falesne poplachy
« Odpověď #8 kdy: 07. 07. 2017, 13:19:21 »
Jedna věc je sw ošetření čtení stavu, druhá věc je HW - nevidí čidlo na něco co může být zdrojem tepla ? Svýho času jsem takhle dost dlouho koumal nad tím co mi v chodbě rozsvěcí světlo, a pak jsem přišel na to že to dělá lednička - jak začne chladit a z chladiče začne stoupat teplo, tak se rozsvěcelo světlo. Dělalo to ovšem jen v noci, kdy bylo dost chladno na to aby teplo unikající z chladiče ledničky udělalo dostatečně skokový rozdíl oproti teplotě pozadí ...

Erik

Re:Arduino a falesne poplachy
« Odpověď #9 kdy: 07. 07. 2017, 13:42:52 »
Jak to máš pospojované? Máš tam nějaký pull down odpor na signál PIR?

Mirek

Re:Arduino a falesne poplachy
« Odpověď #10 kdy: 07. 07. 2017, 14:45:19 »
Něco už tu zaznělo, něco ještě ne.

1. Delay() v obsluze přerušení je prasárna jako Brno. V některých případech to bude fungovat, ale takhle se to prostě nedělá a tečka.

2. Typická řešení jsou v podstatě 2:
  - stav číst interruptem od hodnoty signálu, ten nastavit na hranu přechodu z neaktivního na aktivní, v ISR nahodit příznak a v aplikační hlavní smyčce následně řešit de-bouncing.
  - stav číst periodicky z ISR timeru, de-bouncing jednoduše čtením přes několik period timeru


Re:Arduino a falešné poplachy
« Odpověď #11 kdy: 23. 09. 2017, 00:15:54 »
Tak hlavne naco preruseni kdyz to je jednoduchy alarm navic s dobou trvani 1.2 s.
Udelej to v hlavnim Loop.

Re:Arduino a falešné poplachy
« Odpověď #12 kdy: 23. 09. 2017, 03:35:28 »
Zkousel sem kontakt cidla trvale pripojit a byl klid tak podezrivam cidlo, ale uvital bych nazor Vas ostatnich. Je to jen hracka, ale i tak me stve, ze nemuzu prijit na kloub tomu, kde se berou ty plane poplachy.

Můžu Vám akorát říct, jak fungují profesionální alarmy. Pokud čidla sama mohou mít nastavitelnou citlivost. Ale k tomu všemu se ještě za vyhlášení alarmu bere buďto kombinace alarmů z vícero čidel, nebo opakované signalizování alarmu z téhož čidla. Vím, že se to kdysi lišilo čidlo od čidla, výrobci to poměrně ladili, aby měli co nejméně falešných poplachů, a přitom moc neoslabili bezpečnost.

Doufám, že Vás to aspoň maličko nasměruje, jinak se omlouvám za v podstatě OT.

zapik

Re:Arduino a falešné poplachy
« Odpověď #13 kdy: 23. 09. 2017, 08:48:11 »
Otázkou je jak je udělaný vlastní HW. Pokud je čidlo  open-kolektor, mezi čidlem a arduinem je velký kus drátu a pullup je v arduinu, tak je to blbě - v okamžiku kdy je open-kolektor ve stavu off - tak je ke vstupu připojena jedna dlouhá anténa, která dělá bordel - vyzkoušeno.  Dlouhý drát je třeba budit tvrdým budičem v obou polohách.
Schema by mohlo pomoci.

kkt1

  • *****
  • 796
    • Zobrazit profil
Re:Arduino a falešné poplachy
« Odpověď #14 kdy: 01. 08. 2018, 19:24:58 »
 ;D