Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Jakuza 06. 07. 2017, 22:20:43

Název: Arduino a falešné poplachy
Přispěvatel: Jakuza 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...



Název: Re:Arduino a falesne poplachy
Přispěvatel: Olda 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.
Název: Re:Arduino a falesne poplachy
Přispěvatel: Trupik 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.
Název: Re:Arduino a falesne poplachy
Přispěvatel: Daevid 07. 07. 2017, 07:35:09
V programe je chyba "if (pingStatus==1){"
Název: Re:Arduino a falesne poplachy
Přispěvatel: Daevid 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...
Název: Re:Arduino a falesne poplachy
Přispěvatel: SB 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.
Název: Re:Arduino a falesne poplachy
Přispěvatel: Hellraiser 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.
Název: Re:Arduino a falesne poplachy
Přispěvatel: Fbi 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š...
Název: Re:Arduino a falesne poplachy
Přispěvatel: SPECZ 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í ...
Název: Re:Arduino a falesne poplachy
Přispěvatel: Erik 07. 07. 2017, 13:42:52
Jak to máš pospojované? Máš tam nějaký pull down odpor na signál PIR?
Název: Re:Arduino a falesne poplachy
Přispěvatel: Mirek 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

Název: Re:Arduino a falešné poplachy
Přispěvatel: Zdeno Sekerák 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.
Název: Re:Arduino a falešné poplachy
Přispěvatel: Miroslav Šilhavý 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.
Název: Re:Arduino a falešné poplachy
Přispěvatel: zapik 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.
Název: Re:Arduino a falešné poplachy
Přispěvatel: kkt1 01. 08. 2018, 19:24:58
 ;D