Come modellare lo stato di partenza / entrata in casa

3

Ho due sensori: uno che rileva se la porta è aperta o chiusa, un'altra se è stato rilevato un movimento nel corridoio. Voglio rilevare se la persona ha lasciato o è entrato a casa. Di solito la persona ha lasciato se:

  1. movimento rilevato
  2. porta aperta
  3. porta chiusa
  4. nessun movimento rilevato dopo la porta chiusa

A causa dei problemi di temporizzazione e degli stati di sovrapposizione (la porta è aperta ma anche la persona si muove), penso che lo stato del modello di progettazione non sia appropriato qui. Ma sto lottando per trovare una struttura migliore.

Qualsiasi aiuto?

    
posta matcauthon 19.03.2015 - 15:59
fonte

3 risposte

4

Puoi usare una variabile con 3 possibili stati:

  • qualcuno a casa
  • nessuno a casa
  • indeterminato

Questi stati si escludono a vicenda, quindi avrà senso utilizzarli per la modellazione. Ogni volta che si apre la porta, impostare lo stato su "indeterminato". Ogni volta che la porta si chiude, avvia un timer e quando il timer termina, cambi lo stato in "qualcuno a casa" o "nessuno in casa", a seconda di ciò che il sensore di movimento ti ha detto nell'intervallo di tempo misurato. Dovrebbe essere ovvio che quando la porta viene riaperta durante l'intervallo di tempo, devi fermare il timer e mantenere lo stato "indeterminato". Potresti anche considerare di impostare lo stato su "qualcuno a casa" ogni volta che c'è movimento all'interno del corridoio, anche quando la porta non è aperta o chiusa.

Questo modello si prende cura del fatto che una persona a casa potrebbe aprire la porta, ma non se ne va, o viceversa viene da fuori, apre la porta, cambia idea e non entra. Si correggerà anche da solo quando avrai sbagliato lo stato (forse perché la persona è uscita o non è entrata dalla porta principale), e più tardi misurerà qualche movimento all'interno.

Naturalmente, quando c'è più di una persona a casa, e solo una lascia, questo modello avrà lo stato sbagliato, ma questo non è nulla che possa essere risolto da un modello migliore, solo da più sensori; -)

    
risposta data 19.03.2015 - 16:49
fonte
5

Il concetto che stai cercando è noto come "Isteresi" (Wikipedia) . Ma non perdere troppo tempo a leggere l'articolo, dato che la tua situazione è piuttosto semplice.

Hai un numero di input, che hanno stati, e hai anche uno "stato logico" (persona dentro o fuori casa) che devi calcolare da loro. Lo "stato logico" non può essere semplicemente una funzione diretta degli stati degli input; invece, il tuo software deve avere un concetto di tempo e deve essere in grado di aspettare un certo periodo di tempo dopo una transizione di stato di uno qualsiasi degli input prima di calcolare il suo nuovo stato logico.

    
risposta data 19.03.2015 - 16:25
fonte
1

Il diagramma dello stato con i tempi è un ottimo modo per modellare la tua situazione.

Questoèsiacomprensibilechefaciledaimplementare.Il"movimento rilevato" potrebbe essere inteso come transizione dal rilevamento del movimento a nessun movimento rilevato. Potresti renderlo migliore se avessi delle transizioni "movimento iniziato", "movimento terminato" e "movimento continuo".

    
risposta data 19.03.2015 - 17:21
fonte