PIR Motion Sensor

De Grove PIR Motion Sensor laat toe om beweging te gaan detecteren. Dit kan worden gebruikt om bijvoorbeeld een licht aan te doen wanneer iemand in de ruimte binnenkomt. De detectie afstand van deze sensor is beperkt tot een 6tal meter.

Motion Sensor

Specificaties

ParameterWaarde
Spanning3V - 5V
Stroomverbruik bij 5V150uA
Detectie afstand0.1 - 6m
Default detectie afstand3m
Houdtijd1 - 25s
Golflengte7 - 14um
Detectiehoek120 graden

Aansluiten

Om de sensor te verbinden met het SODAQ bord dien je eerst en vooral een 4-pins connector aan te sluiten op de PCB. Vervolgens sluit je de andere zijde van de connector aan op het SODAQ bord. Opgelet, je dient hier wel de connectie te maken met de correcte header op het SODAQ bord, namelijk deze met de digitale/analoge pins, niet de I2C header. In volgende afbeelding wordt dit nog eens weergegeven.

PIR sensor op het SODAQ bord aansluiten

Als je de markeringen op de PCB van de drukknop bekijkt en vergelijkt met deze op het SODAQ bord, zal je zien dat de output van PIR sensor (aangeduid met D1) is aangesloten op D15. NC staat voor Not Connected of niet aangesloten.

Starter Applicatie

Onderstaand vind je een demo sketch die de output van de PIR sensor leest om de 500 milliseconden. De resultaten van de bewegingsdetectie wordt vervolgens in de console weergegeven.

De vertraging kan worden aangepast.

//**********************************************************
// Hier gaan we globale variabelen declareren.
// Deze zijn beschikbaar doorheen de volledige sketch.
//**********************************************************
const int PIR_PIN = 15;             // Pin van de bewegingssensor

//**********************************************************
// De setup van Arduino, wordt in het begin van je sketch
// eenmalig uitgevoerd.
// Als je sensor moet initialiseren, dan doe je dit hier
//**********************************************************
void setup() {
  SerialUSB.begin(115200);

  // 10 seconden wachten op SerialUSB. 
  while ((!SerialUSB) && (millis() < 10000)) { }
  
  pinMode(PIR_PIN, INPUT);          // Digitale pin als ingang

  SerialUSB.println("Starten van starter sketch bewegingssensor.");
}

//**********************************************************
// De main loop van Arduino, deze blijft telkens herhalen.
//**********************************************************
void loop() {
  // Lees de huidige stand van de PIR sensor in
  int pirState = digitalRead(PIR_PIN);

  if (pirState == HIGH) {
    SerialUSB.println("Beweging gedetecteerd");
  }
  else {
    SerialUSB.println("Geen beweging gedetecteerd");
  }

  // 500 milliseconden wachten, kan je verhogen of verlagen
  delay(500);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

Met tijdsvenster

In plaats van moment opnames te nemen willen we eigenlijk weten of er binnen een bepaald tijdsvenster beweging was. Dit kan dan worden doorgestuurd via LoRaWAN. Door een lus te maken die 1000x de sensor controleert en telkens 10ms wacht, komen we aan een tijdsvenster van 10s.

//**********************************************************
// Hier gaan we globale variabelen declareren.
// Deze zijn beschikbaar doorheen de volledige sketch.
//**********************************************************
const int PIR_PIN = 15;             // Pin van de bewegingssensor

//**********************************************************
// De setup van Arduino, wordt in het begin van je sketch
// eenmalig uitgevoerd.
// Als je sensor moet initialiseren, dan doe je dit hier
//**********************************************************
void setup() {
  SerialUSB.begin(115200);

  // 10 seconden wachten op SerialUSB. 
  while ((!SerialUSB) && (millis() < 10000)) { }
  
  pinMode(PIR_PIN, INPUT);          // Digitale pin als ingang

  SerialUSB.println("Starten van starter sketch bewegingssensor met tijdsvenster.");
}

//**********************************************************
// De main loop van Arduino, deze blijft telkens herhalen.
//**********************************************************
void loop() {
  bool motionDetected = false;
  
  for (int i = 0; i < 1000; i++) {
    // Lees de huidige stand van de PIR sensor in
    int pirState = digitalRead(PIR_PIN);

    // Als er ook maar 1x beweging is, dan gaan we dit detecteren
    if (pirState == HIGH) {
      motionDetected = true;
    }

    delay(10);    // 10ms * 1000 = tijdsvenster van 10 seconden
  }

  // Rapportering
  if (motionDetected) {
    SerialUSB.println("Beweging gedetecteerd in tijdsvenster");
  } else {
    SerialUSB.println("Geen beweging gedetecteerd in tijdsvenster");
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

Dit zou dan volgende output moeten opleveren:

Output Window

Meer informatie

Meer informatie is beschikbaar op https://wiki.seeedstudio.com/Grove-PIR_Motion_Sensor/open in new window.