Sensor – HC-SR501 – PIR bewegingssensor
Hardware
Informatie
Met deze Infrarood bewegings-sensor (PIR) (Passive InfraRed) sensor kun je beweging detecteren, wordt vaak gebruikt als mensen of dieren binnen het sensorbereik bewegen, ze zijn klein, niet duur, verbruiken weinig vermogen en zijn makkelijk te gebruiken.
Deze PIR heef een bereik tot 7 meter, er zitten 2 stelknoppen op, één voor de detectietijd en één voor vertragings tijd voor de volgende interval.
Specificaties:
- Voltage: DC 4.5 tot 20V
- Verbruik: 50uA
- Blok tijd: 2.5 seconden (standaard)
- Vertragings tijd: 0.3 tot 18 seconden (standaard)
- Detectie hoek: <110 graden
- Detectie bereik :3 meter (standaard) tot max 7 meter
- Lens diameter: 23mm (standaard)
Informatie
De PIR sensor zelf heeft twee sleuven met daarin 2 voelers van speciaal materiaal dat gevoelig is voor IR. Wanneer de sensor inactief is detecteren beide voelers evenveel uitgestraald IR licht in de omgevingslucht, kamer, muren of van buiten. Wanneer een warm lichaam van een mens of dier passeert, onderschept die de 1ste helft van de PIR-sensor, wat een positieve verandering tussen de twee voelers veroorzaakt (verschil). Wanneer het warme lichaam het detectiebereik verlaat, gebeurt het omgekeerde, De verandering in deze pulsen van de voeler wordt gedetecteerd en kan een signaal uitgestuurd worden.
Pinout
Arduino
Sluit de module aan volgens onderstaand overzicht:
Arduino pin: | PIR pin: |
---|---|
+5v | 01 (+5v) |
D2 | 02 (OUT) |
GND | 03 (GND) |
De OUT wordt HIGH (5v) als de PIR een detectie meet, uitlezen van de Arduino is dan vrij simpel en er is geen bibliotheek nodig.
Script
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 |
// Configureer de pin voor de LED. int ledPin = 13; // Configureer de INPUT pin van de PIR. int inputPin = 2; // Zet de pirstate op LOW, aannemend dat er geen beweging is gedetecteerd wanneer de PIR start. int pirState = LOW; // Een variabele voor de pinstatus van de PIR. int val = 0; void setup() { // Stel de digitale in- of uitgangen in. pinMode(ledPin, OUTPUT); pinMode(inputPin, INPUT); Serial.begin(9600); } void loop(){ // Uitlezen van de PIR pin, is deze hoog of laag? val = digitalRead(inputPin); // Als de PIR pin HOOG is. if (val == HIGH) { // Zet de LED aan. digitalWrite(ledPin, HIGH); if (pirState == LOW) { //De PIR is AAN. Serial.println("Beweging gedetecteerd!"); // We reageren alleen op de verandering aan de OUT pin, niet de PIR status. pirState = HIGH; } } else { // Zet de LED uit. digitalWrite(ledPin, LOW) if (pirState == HIGH){ // De PIR is UIT. Serial.println("Beweging beëindigd!"); // We reageren alleen op de verandering aan de OUT pin, niet de PIR status. pirState = LOW; } } } |
Raspberry Pi
Sluit de DHT sensor aan zoals aangegeven op onderstaand schema:
Raspberry Pi pin: | PIR pin: |
---|---|
+5v | 01 (+5v) |
GPIO18 | 02 (OUT) |
GND | 03 (GND) |
Scripts
Met onderstaande Python code kan de pin van de PIR uitgelezen worden, maak een bestand aan genaamd pir.py met deze inhoud:
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 |
#!/bin/python # importeer de GPIO bibliotheek. import RPi.GPIO as GPIO # Importeer de time biblotheek voor tijdfuncties. from time import sleep # Definieer pin voor PIR pir_sensor = 18 # Zet de pinmode op Broadcom SOC. GPIO.setmode(GPIO.BCM) # Zet waarschuwingen uit. GPIO.setwarnings(False) # Zet de GPIO pin als ingang. GPIO.setup(pir_sensor, GPIO.IN) try: while True: # Wacht 1/4 van een seconde sleep(.250) # Lees de status van de GPIO pin uit. if GPIO.input(pir_sensor): # Pin is HOOG (beweging gedetecteerd). print "Beweging gedetecteerd!, GPIO status:", GPIO.input(pir_sensor) else: print "GEEN beweging, GPIO status:", GPIO.input(pir_sensor) except KeyboardInterrupt: # GPIO netjes afsluiten GPIO.cleanup() |
En start dit bestand met het commando: sudo python pir.py
Ps. Druk op CTRL+C om het script te stoppen!
Output
1 2 3 4 5 6 7 8 9 |
GEEN beweging, GPIO status: 0 GEEN beweging, GPIO status: 0 GEEN beweging, GPIO status: 0 Beweging gedetecteerd!, GPIO status: 1 Beweging gedetecteerd!, GPIO status: 1 Beweging gedetecteerd!, GPIO status: 1 GEEN beweging, GPIO status: 0 GEEN beweging, GPIO status: 0 GEEN beweging, GPIO status: 0 |
Voorbeeld met buzzer
Bron: pimylifeup.com
Sluit het volgende aan volgens onderstaand schema:
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 |
#!/usr/bin/env python """ Detects motion and outputs a sound via a piezo buzzer. """ import RPi.GPIO as GPIO import time pir_sensor = 11 piezo = 7 GPIO.setmode(GPIO.BOARD) GPIO.setup(piezo,GPIO.OUT) GPIO.setup(pir_sensor, GPIO.IN) current_state = 0 try: while True: time.sleep(0.1) current_state = GPIO.input(pir_sensor) if current_state == 1: print("GPIO pin %s is %s" % (pir_sensor, current_state)) GPIO.output(piezo,True) time.sleep(1) GPIO.output(piezo,False) time.sleep(5) except KeyboardInterrupt: pass finally: GPIO.cleanup() |
En start dit bestand met het commando: sudo python pirnuzzer.py
Ps. Druk op CTRL+C om het script te stoppen!
Bronnen:
community.wolfram.com
raspberrypi-spy.co.uk
classthink.com
Schema
Afmetingen
Teardown
Datasheet
Fritzing
Downloads
GEEN GEGEVENS