Go Down

Topic: Difetto_PIR_Allarme (Read 960 times) previous topic - next topic

skizzo942

Buon giorno ragazzi come sempre ho bisogno del vostro aiuto. Il mio progetto oggi riguarda un piccolo allarme fatto con un PIR esattamente questo:Modulo HC-SR501 IR PIR sensore infrarosso movimento (http://cgi.ebay.it/ws/eBayISAPI.dll?ViewItem&item=151062339856&clk_rvr_id=515698005301&mfe=sidebar). Cosi come ho scritto il codice quando mi rileva il movimento per esempio il passaggio della mia mano si accendono i led e suona e manda a video il messaggio "pir attivo". Bene quel che voglio ottenere però è che l'allarme continui a suonare fin quando il movimento non termina. Perchè ORA anhe se continuo a muovermi davanti al pir l'allarme si comporta in questo modo:suona poi dopo mi stampa a video"pir disattivo"(nonostante io stia continuando a muovermi) per poi riprendere a suonare....come risolvo? grazie in anticipo del vostro aiuto!! sono davvero agli albori della programmazione quindi sono davvero un ignorante quindi se mi scrivete direttamente del codice forse riesco ad apprendere meglio e più in fretta almeno mi assicuro una buona spiegazione..
ANCORA GRAZIE!!!!
Code: [Select]

int StatoSensore = 0;
int BUZZER=9;
int rosso=13;
int rosso1=11;


void setup()
{

  //Init Seriale
  Serial.begin(9600);
  //Config porta 2 come ingresso
  pinMode(2, INPUT);
  pinMode(9,OUTPUT);
  pinMode(rosso,OUTPUT);
  pinMode(rosso1,OUTPUT);

}

void loop()
{

//leggo segnale Sensore PIR
StatoSensore = digitalRead(2);

//invia i dati solo se rilevo un movimento
if (StatoSensore == HIGH)
    //Invio dati alla seriale
    {
      Serial.println("PIR ATTIVO");
    for (int i=0; i<10; i++)
    {
    tone(BUZZER, (3100+(50*i)));
    delay(10);
    }
    digitalWrite(rosso,HIGH);
    delay(50);
    digitalWrite(rosso1,HIGH);
    delay(50);
    digitalWrite(rosso,LOW);
    delay(50);
    digitalWrite(rosso1,LOW);
    delay(50);
   
    //Lettura ogni mezzo secondo
    }
    else{Serial.println("PIR DISATTIVO");
  delay(10);
noTone(9);
delay(10);}

}

uwefed

Secondo me dovresti indagare in che modo manda il modulo i segnale. Le descrizioni sono purtroppo scarse e poco chiare.
Prova a variare il trigger:
Trigger: H / repeated trigger (default)
Ciao Uwe

PaoloP

Prova così:
Code: [Select]
const byte sensorpin = 2;  // Sensore PIR collegato al pin 2

void setup()
{
  pinMode(sensorpin, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
  digitalWrite(LED_BUILTIN, digitalRead(sensorpin));
  delay(10);
}


Accende il led di Arduino se rileva un segnale alto sul sensorpin.
Se anche passando la mano il led rimane spento vuol dire che c'è un temporizzatore nel PIR.

Etemenanki

Qui c'e' una specie di datasheet di quel sensore http://elecfreaks.com/store/download/datasheet/sensor/DYP-ME003/Specification.pdf ... ritardi, modo di funzionamento e tempo di accensione sono regolabili.
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Go Up