contapersone bidirezionale

salve,
vorrei realizzare un conta persone con due sensori pir come questi

messi uno dopo l'altro.

lo scopo è rilevare in base a quale dei due sensori si è acceso prima (o in qualsiasi altro modo) se una persona entra o esce e incrementare o diminuire un contatore in modo da accendere il led se ci sono persone nella stanza e spegnerlo se no.

questo è il codice:

const int sensorA=3;
const int sensorB=4;
const int output=13;
int count=0;

boolean sensorATriggered=false ; 
unsigned long sensorATime ;
byte currStateA;
byte prevStateA = LOW;

boolean sensorBTriggered=false; 
unsigned long sensorBTime;
byte currStateB;
byte prevStateB = LOW;

void setup() {
Serial.begin(9600);
pinMode(sensorA,INPUT);
pinMode(sensorB,INPUT);
pinMode(output,OUTPUT);
}

void loop() {
currStateA = digitalRead(sensorA);

   if(currStateA != prevStateA)
   {
        if(currStateA == HIGH)
      {
        Serial.println ("pir1");
         sensorATriggered = true;
         sensorATime = millis();
      }
   }
   prevStateA = currStateA;  

  currStateB = digitalRead(sensorB);
   if(currStateB != prevStateB)
   {
      if(currStateB == HIGH)
      {
        Serial.println ("pir2");
         sensorBTriggered = true;
         sensorBTime = millis();
      }
   }
   prevStateB = currStateB;

   if(sensorBTriggered && sensorATriggered)
{
     if(sensorATime>sensorBTime)
    {
      count++;
      
    }
     if(sensorBTime>sensorATime)
    {
      count--;
      
    }
     else 
    {
      
      
     }
}
    
if(count>0)
{
  digitalWrite(output,HIGH);
}
else 
{
digitalWrite(output,LOW);
}
  

  

}

grazie per l'aiuto :slight_smile:

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

ok grazie :slight_smile:

Quali sensori pir hai usato? Puoi pure mettere un link,non c'e' problema.

come questi


senza marchio cinesi

Se cerchi nel forum c'era un altro topico che faceva la stessa cosa.

secondo me i sensori pir per fare quello che vuoi fare tu non sono adatti.
faccio un esempio:
visto che il pir dal momento che rileva la persona, sta eccitato per qualche secondo, se nel frattempo entrano altre persone non le conteggia, stesso discorso per le persone in uscita.
gia' usando una barriera ir, a volte il conteggio viene falsato. (es. due persone che entrano una immediatamente dietro all'altra che si sovrappongono anche parzialmente daranno adito ad un conteggio errato, il sistema ne vede solo una e quando questa esce il sistema spegne le luci,ma l'altra accende l'accendino ).
conclusione, conteggiare il numero di persone che entrano/escono da una stanza sembra una cosa banale, ma all'atto pratico non è poi così facile.
se è un esercizio didattico allora va bene tutto, ma se deve essere messo in campo.....
ciao.

Impossibile con quelli e nemmeno con le fotocellule in coppia... Puoi mettere un tornello in tutte le stanze però, quello non sbaglia un colpo :slight_smile:

grazie per le risposte,
leggendo il post consigliato sembra che il problema è che il pir resta high per almeno 3 sec, quindi bisognerebbe usare gli interrupt ed è troppo complesso per me, proverò comprando questi moduli ir

simili a questi usati in questo progetto

il problema non sono gli interrupt,
il problema che il pir quando vede un ir passivo (persona) mette alta la sua uscita e la mantiene per tre secondi, in quei tre secondi, se passano altre persone lui non se ne accorge, di conseguenza arduino non le conta.

gli schedini che hai postato lavorano a riflessione pertanto non fanno una barriera vera e propria.
dalla parte opposta della porta devi mettere un catarinfrangente.
ma se passa ad esempio una donna con un bell'abito coi lustrini, ,lui non se ne accorge, perchè lui non sa che i lustrini non sono il catarifrangente e per lui non è passato nessuno.
:slight_smile:
bisogna mettre il tx su una spalletta della porta e l'rx sull'altra in modo che facciano un raggio che viene sicuramente interrotto anche se passa la famosa donna con i lustrini. :confused:
ciao

quindi ci vuole un sistema a prova di lustrini :slight_smile:
ho due tcrt5000 non so se i led in essi sono abbastanza potenti, il fatto è che tra le due spallette ci sono 2metri, ci vorrà un led più potente e arduino fornisce pochi mv :confused: ci vuole un circuito apposito boh

grazie per l'aiuto

anche quello è a riflessione come gli altri ed in piu' non ha elettronica, sono solo due led ir (tx ed rx)

per la distanza no problem (ho fatto una barriera da 7,5 m e va benissimo).

la corrente che fornisce arduino sul pin è sufficiente.
il tx deve essere modulato (deve trasmettere ad impulsi) altrimenti non vai lontano, inoltre l'rx deve essere protetto da fonti di illuminazione estranee che possono dare falsi positivi, in parole povere lo devi inserire in un tubetto nero e deve essere allineato perfettamente verso il tx.
guarda le barriere dei cancelli elettrici, ce ne sono anche con distanze ben superiori e funzionano, pero' in questo caso c'è da dire che hanno le lenti per collimare il raggio.

ciao.

p.s. fai levare i lustrini :confused:

Molto piu semplicemente, prevedi un sistema misto ... oltre al conteggio con le barriere, metti ANCHE uno o piu pir, in modo che se il sistema conta fino a zero e dovrebbe non esserci piu nessuno, ma i pir all'interno rilevano ancora movimento, il contatore capisca di essersi sbagliato e "torni indietro" di uno (ma solo di uno alla volta, cioe' turna indietro di uno se luce spenta piu movimento, ma non se luce accesa piu movimento), attendendo un'altra uscita ... e cosi via, finche' zero persone piu nessun movimento non gli dicono che nella stanza effettivamente non c'e' piu nessuno ...

Se poi le persone nella stanza sono immobili quando il "presunto" ultimo esce e la luce si spegne, il primo che si muove la fa riaccendere (contatore + 1 come se qualcuno rientrasse, ma solo se la luce e' spenta, altrimenti il pir NON deve far incrementare di nuovo il contatore) ...

E se poi quando la luce si spegne c'e' ancora qualcuno ma rimane immobile, o sta dormendo, o e' morto, o sta facendolo apposta per rompere i maroni ... nei primi due casi non gli serve che la luce si riaccenda, nel terzo resta al buio e peggio per lui :stuck_out_tongue: :smiley: