Testes ao PIR SE-10 com resultados preocupantes

<< < (4/4)

bubulindo:
Quote from: neuron_upheaval on May 03, 2012, 06:06:58 am

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().

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.

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:

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:
Quote from: xaral on May 04, 2012, 05:24:51 am

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

Navigation

[0] Message Index

[*] Previous page