Go Down

Topic: Testes ao PIR SE-10 com resultados preocupantes (Read 3475 times) previous topic - next topic

bubulindo


além do mais, Serial.print()'s e delay()'s também bloqueiam o programa


Bloqueavam, agora só o delay é que bloqueia o programa... daí ter sugerido não usar o pulseIn, já que o pulseIn faz o mesmo que o delay().

This... is a hobby.

bubulindo

Lembrei-me de ver os tutoriais do Nick Gammon (com o mesmo nick aqui no fórum) e ele tem um exemplo para usar um timer como contador de eventos. :)

NEste link:

http://gammon.com.au/forum/?id=11504

O primeiro exemplo que aparece conta o número de pulsos no pino T1, ou seja D5 no arduino. Experimenta e vê os resultados.

P.S.: O código completo cria um contador de eventos e de frequência, no entanto no teu caso podes limpar o código de tudo o que tenha a ver com o Timer2.
This... is a hobby.

xaral

Bem esta ajuda talvez seja demasiada avançada para o meu projeto. Penso não ser necessário incluir este código.
Estou um pouco confuso com tanta informação  :~ daí talvez seja melhor dizer de novo o que estou procurando.
O sistema PIR deve detetar quando uma pessoa está num dado espaço. Como o objetivo é relacionar a presença de pessoas com o consumo, e enviar os dados para processing, vai-se assumir que essa pessoa permanece na sala um x tempo até o sensor fazer nova deteção.
Isto acontece pois é dificil construir um sistema com estes sensores que detete de forma eficaz a entrada e a saída de pessoas. Eu vi algo do género neste projeto http://r00li.com/rolihome mas como se vê pelas images não seria muito fácil adaptar o sistema.

O Arduino é mesmo um mundo bem grande  XD

Muito obrigado pela ajuda Bubu

xaral

Aqui fica o código de principiante que estou a utilizar neste momento :)
Esqueci-me de referir que estou a usar dois sensores PIR e além destes cou acrescentar um de ultra-sons...

Code: [Select]
int PIR1 = 2;
int PIR2 = 3;
int LED1 = 4;
int LED2 = 5;
int val1 = 0;
int val2 = 0;
int count1 = 0;
int count2 = 0;
int calibrationTime = 20;

void setup (){
  Serial.begin(9600);
  pinMode(PIR1,INPUT);
  pinMode(PIR2,INPUT);
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
 
  //give the sensor some time to calibrate
  Serial.println("Sensor Calibration in Progress");
  Serial.println("------------------------------");
  for(int i = 0; i < calibrationTime; i++){
    Serial.print(".");
    digitalWrite(LED1, HIGH);
    delay(250);
    digitalWrite(LED2, HIGH);
    delay(250);
    digitalWrite(LED1, LOW);
    delay(250);
    digitalWrite(LED2, LOW);
    delay(250);
  }

  Serial.println("");
  Serial.println("Sensor Calibration Completed");
  Serial.println("Sensor Reading Active");
  delay(100);
}

void loop(){
  int val1 = digitalRead(PIR1);
  int val2 = digitalRead(PIR2);

  if((val1 == LOW) )
    count1=1;
    Serial.print(val1);
    Serial.print(',');
 
  if((val2 == LOW) )
    count2=2;
    Serial.println(val2);
   
  if(count1>0){
    count1++;
    digitalWrite(LED1,HIGH);
  }   
 
  if(count2>0){
    count2++;
    digitalWrite(LED2,HIGH);
  }   
     
  if(count1 == 500){
    digitalWrite(LED1,LOW);
    Serial.print(val1);
    Serial.print(',');
    count1=0;
   
  }
 
  if(count2 == 500){
    digitalWrite(LED2,LOW);
    Serial.println(val2);
    count2=0;
   
  }
}

bubulindo


Isto acontece pois é dificil construir um sistema com estes sensores que detete de forma eficaz a entrada e a saída de pessoas.


O melhor que vi para isto até hoje foi um sensor de barreira. :\ Aí o pulso é indicativo de alguém a tapá-lo, enquanto que com estes PIR (a não ser que alteres a cúpula por cima deles) a gama de detecção é algo elevada demais para o que pretendes e durante o segundo que ele indicou movimento, pode haver muito mais gente a entrar e sair. Claro que alguém pode parar a conversar na porta e mais pessoas entrarem sem contagem... mas isso são pormenores. :P
This... is a hobby.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy