Raspberry Pi - Bewegingssensor

Heeft u zich ooit afgevraagd, “Hoe kan dat?” wanneer u automatische deuren, lampen of roltrappen tegenkomt? Zo ja, dan zal deze handleiding niet alleen uw vraag beantwoorden, maar u ook laten zien hoe u dit kunt realiseren met behulp van de Raspberry Pi en een bewegingssensor. Laten we beginnen!

Deze tutorial leert u hoe u een Raspberry Pi gebruikt met een bewegingssensor. In detail behandelen we:

Hardware Benodigd

1×Raspberry Pi 5
1×HC-SR501 Bewegingssensor
1×Jumper wires (verbindingsdraden)
1×(Aanbevolen) Schroefklem Block Shield voor Raspberry Pi
1×(Aanbevolen) Raspberry Pi Prototyping Basisplaat & Breadboard Kit
1×(Aanbevolen) HDMI-Touchscreen-Monitor voor Raspberry Pi

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over HC-SR501 Bewegingssensor

HC-SR501 Bewegingssensor

De HC-SR501 PIR sensor kan beweging detecteren van mensen (of dieren). Hij wordt veel gebruikt in diverse toepassingen, zoals het automatisch aan- en uitzetten van lampen, openen en sluiten van deuren, activeren en deactiveren van roltrappen en het detecteren van inbrekers.

Pinout van de Bewegingssensor

De HC-SR501 bewegingssensor heeft 3 pinnen:

  • GND pin: moet verbonden worden met GND (0V)
  • VCC pin: moet verbonden worden met VCC (5V)
  • OUTPUT pin: is een uitgangspin die LOW is wanneer geen beweging wordt gedetecteerd en HIGH wanneer er beweging wordt gesignaleerd. Deze pin dient aangesloten te worden op een input pin van de Raspberry Pi.

De HC-SR501 heeft één jumper en twee potentiometers. Deze worden gebruikt om de instellingen van de sensor aan te passen.

HC-SR501 Bewegingssensor pinout

Hoe Het Werkt

De HC-SR501 sensor herkent beweging op basis van veranderingen in infrarode straling die door een bewegend object wordt uitgezonden. Om door de HC-SR501 sensor te worden gedetecteerd, moet het object aan twee criteria voldoen:

  • Het moet bewegen of trillen.
  • Het moet infraroodlicht uitstralen.

Daarom:

  • Als een object beweegt maar geen infraroodstralen uitzendt (bijvoorbeeld een robot of speelgoedauto), wordt het niet door de sensor gedetecteerd.
  • Als een object infraroodstraling uitzendt maar niet beweegt (bijvoorbeeld een stilstaande persoon), wordt het ook niet gedetecteerd.

Mensen en dieren zijn bronnen van infraroodstraling. Daardoor kan de sensor hun bewegingen detecteren.

Status van de OUTPUT-pin:

  • Wanneer zich geen mens (of dier) binnen het door de sensor gedetecteerde bereik bevindt, is de OUTPUT pin LOW.
  • Wanneer een mens (of dier) het bereik van de sensor betreedt, verandert de OUTPUT pin van LOW naar HIGH, wat aangeeft dat beweging is gedetecteerd.
  • Wanneer de mens (of het dier) het sensorbereik verlaat, verandert de OUTPUT pin van HIGH naar LOW, wat aangeeft dat de beweging is gestopt.

De bovenstaande video toont hoe de bewegingssensor in theorie werkt. In de praktijk werkt de sensor iets anders, afhankelijk van de sensorinstellingen (die worden besproken in de sectie Geavanceerd Gebruik).

Detectie van Aanwezigheid van Mensen

De sensor herkent niet direct de aanwezigheid van mensen, maar detecteert alleen beweging. We gebruiken de Raspberry Pi om de aanwezigheid van mensen af te leiden op basis van de door de sensor gedetecteerde beweging, volgens het principe:

  • Als er beweging wordt waargenomen, dan zijn er mensen aanwezig.
  • Als er geen beweging wordt gedetecteerd, dan zijn er geen mensen aanwezig.

Deze regel is onvolmaakt in de praktijk: wanneer mensen binnen het bereik van de sensor zijn maar niet bewegen, wordt er geen beweging gedetecteerd. De Raspberry Pi concludeert dan dat er niemand aanwezig is.

Bijvoorbeeld: in uw vergaderruimte wordt de bewegingssensor gebruikt om het licht aan en uit te schakelen. Wanneer mensen de ruimte betreden, wordt het licht automatisch ingeschakeld. Als iedereen tijdens de vergadering stil blijft zitten, registreert de sensor geen beweging en wordt verondersteld dat er niemand aanwezig is, waardoor het licht wordt uitgezet. Om het licht weer aan te doen, moet iemand bewegen.

Deze beperking is echter NIET ernstig en aangezien de sensor goedkoop is, wordt hij veel gebruikt om mensen te detecteren in vele toepassingen.

Raspberry Pi - HC-SR501 Bewegingssensor

Verbind een digitale inputpin van de Raspberry Pi met de OUTPUT pin van de HC-SR501 sensor. Met behulp van code op de Raspberry Pi kunnen we de waarde van de OUTPUT pin controleren om beweging te detecteren.

Aansluitschema

Raspberry Pi Bewegingssensor aansluitdiagram

This image is created using Fritzing. Click to enlarge image

Begininstellingen

Tijdvertraging Insteller Draai deze volledig tegen de klok in.
Detectiebereik Insteller Draai deze volledig met de klok mee.
Herhaalde Trigger Selector Plaats de jumper zoals op de afbeelding.
arduino bewegingssensor begininstelling

Hoe Programma Schrijven Voor Bewegingssensor

  • Stel een digitale ingang op een pin van Raspberry Pi in met behulp van de GPIO.setup() functie.
GPIO.setup(PIR_PIN, GPIO.IN)
  • Lees de OUTPUT pin van de sensor met de GPIO.input() functie.
pir_value = GPIO.input(PIR_PIN)

Raspberry Pi Code - Print de Bewegingsstatus

Snelle Stappen

  • Zorg dat u Raspbian of een ander Raspberry Pi-compatibel besturingssysteem hebt geïnstalleerd op uw Pi.
  • Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw PC.
  • Zorg dat uw Raspberry Pi internettoegang heeft indien u bibliotheken moet installeren.
  • Als dit uw eerste keer is met Raspberry Pi, zie dan hoe u de Raspberry Pi instelt
  • Verbind uw PC met de Raspberry Pi via SSH met de ingebouwde SSH-client van Linux en macOS of PuTTY op Windows. Zie hoe u uw PC verbindt met Raspberry Pi via SSH.
  • Controleer of de RPi.GPIO bibliotheek is geïnstalleerd. Zo niet, installeer deze dan met het volgende commando:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Maak een Python-scriptbestand aan met de naam motion_sensor.py en voeg de volgende code toe:
# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/tutorials/raspberry-pi/raspberry-pi-motion-sensor import RPi.GPIO as GPIO import time # Set the GPIO mode and HC-SR501 PIR motion sensor pin GPIO.setmode(GPIO.BCM) PIR_PIN = 12 GPIO.setup(PIR_PIN, GPIO.IN) try: while True: # Read the HC-SR501 PIR motion sensor value pir_value = GPIO.input(PIR_PIN) # PIR output is high when motion is detected if pir_value == GPIO.HIGH: print("Motion detected!") else: print("No motion detected.") time.sleep(0.1) except KeyboardInterrupt: print("Exiting...") GPIO.cleanup()
  • Sla het bestand op en voer het Python-script uit met het volgende commando in de terminal:
python3 motion_sensor.py
  • Beweeg uw hand voor de sensor binnen het detectiebereik.
  • Controleer de uitvoer in de Terminal.
PuTTY - Raspberry Pi
No motion detected. No motion detected. No motion detected. Motion detected! Motion detected! Motion detected! Motion detected!

Het script draait in een oneindige lus totdat u Ctrl + C in de terminal indrukt.

De bovenstaande code controleert continu de bewegingsstatus en print deze. Soms wilt u misschien alleen reageren op veranderingen in de bewegingsstatus. In dat geval kunt u de volgende sectie bekijken.

Raspberry Pi Code - Detecteert Veranderingen in Bewegingsstatus

  • Maak een Python-scriptbestand aan met de naam motion_sensor_events.py en voeg de volgende code toe:
# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/tutorials/raspberry-pi/raspberry-pi-motion-sensor import RPi.GPIO as GPIO import time # Set the GPIO mode and HC-SR501 PIR motion sensor pin GPIO.setmode(GPIO.BCM) PIR_PIN = 12 GPIO.setup(PIR_PIN, GPIO.IN) # Initialize variables to keep track of previous and current states prev_pir_value = GPIO.LOW pir_value = GPIO.LOW try: while True: # Read the HC-SR501 PIR motion sensor value pir_value = GPIO.input(PIR_PIN) # Check for change event (motion started or stopped) if pir_value != prev_pir_value: if pir_value == GPIO.HIGH: print("Motion started!") else: print("Motion stopped!") # Update the previous value with the current value prev_pir_value = pir_value time.sleep(0.1) except KeyboardInterrupt: print("Exiting...") GPIO.cleanup()
  • Sla het bestand op en voer het Python-script uit met het volgende commando in de terminal:
python3 motion_sensor_events.py
  • Beweeg uw hand voor de sensor binnen het detectiebereik.
  • Controleer de uitvoer in de Terminal.
PuTTY - Raspberry Pi
Motion started! Motion stopped!

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Geavanceerd Gebruik

Deze sectie is gewijd aan diepgaande kennis. Maak u GEEN zorgen als u het niet begrijpt. Sla deze sectie over als deze u overweldigt en kom op een andere dag terug. Lees verder met de volgende secties.

Zoals eerder vermeld kunnen één jumper en twee potentiometers worden gebruikt om de configuratie van de sensor aan te passen.

Detectiebereik Insteller

Deze potentiometer wordt gebruikt om het detectiebereik aan te passen (tussen ongeveer 3 en 7 meter).

  • Volledig rechts draaien: detecteert tot ongeveer 3 meter afstand.
  • Volledig links draaien: detecteert tot ongeveer 7 meter afstand.
Bewegingssensor detectiebereik instellen

Tijdvertraging Insteller

Deze potentiometer regelt de tijdvertraging:

  • Volledig met de klok mee gedraaid: tijdvertraging ongeveer 5 minuten.
  • Volledig tegen de klok in gedraaid: tijdvertraging ongeveer 3 seconden.

Het volgende deel legt het concept tijdvertraging uit in relatie tot de optie Herhaalde Trigger.

bewegingssensor tijdvertraging instellen

Herhaalde Trigger Selector

Er is een jumper die wordt gebruikt om de triggermodus te kiezen: enkele trigger of herhaalbare trigger.

bewegingssensor trigger selectie

We noemen de tijdvertraging zoals ingesteld via de Tijdvertraging Insteller time_delay. Als u gedurende lange tijd (aangeduid als motion_time, wat meerdere keren langer is dan time_delay) continu in het bereik van de sensor beweegt, dan zal in de Enkele Trigger modus de status van de OUTPUT pin meerdere keren wisselen tussen LOW en HIGH. De HIGH duurtijd is gelijk aan time_delay, terwijl de LOW duurtijd vast staat op 3 seconden.

bewegingssensor enkele trigger modus
  • Herhaalbare trigger modus: De OUTPUT pin blijft HIGH gedurende (motion_time + time_delay).
bewegingssensor herhaalbare trigger modus

Testen

  • Enkele trigger modus:
    • Plaats de jumper om de enkele trigger modus te selecteren.
    • Beweeg uw hand ongeveer 10 seconden voor de sensor.
    • Beweeg uw hand weg van de sensor.
    • Wacht 3 seconden en u ziet de volgende output in het serial monitor scherm:
    PuTTY - Raspberry Pi
    Motion started! Motion stopped! Motion started! Motion stopped! Motion started! Motion stopped!
    • Herhaalbare trigger modus:
    • Plaats de jumper om de herhaalbare trigger modus te selecteren.
    • Beweeg uw hand ongeveer 10 seconden voor de sensor.
    • Verwijder uw hand uit het detectiebereik.
    • Wacht 3 seconden en de output in het serial monitor scherm is als volgt:
    PuTTY - Raspberry Pi
    Motion started! Motion stopped!

    We zien dat in de enkele trigger modus de sensor twee of drie keer activeert, terwijl hij in de herhaalbare trigger modus slechts één keer activeert.

    ※ Notiz:

    Tijdens de LOW periode van 3 seconden, die een vaste en niet-aanpasbare waarde is, kan de sensor geen beweging detecteren. Dit betekent dat hij in deze tijd geblokkeerd is, maar dit veroorzaakt geen problemen.

    Het wordt aanbevolen om de herhaalbare trigger modus te gebruiken.

    In veel praktische toepassingen:

    • Schakelen we machines of apparaten aan wanneer een persoon aanwezig is.
    • Schakelen we machines of apparaten niet direct uit als een persoon niet meer aanwezig is, maar na een time-out.

    Hoe Tijdvertraging te Gebruiken

    Als er geen mens wordt gedetecteerd, wacht het automatiseringssysteem een bepaalde tijd voordat het actie onderneemt.

    De bewegingssensor heeft een Tijdvertraging Insteller die op minimaal 3 seconden en maximaal 5 minuten kan worden gezet. Daarnaast kan ook elke gewenste waarde in de Raspberry Pi code worden ingesteld door middel van programmeren.

    Als er geen time-out wordt gespecificeerd in de Raspberry Pi code, is de time-out gelijk aan de ingestelde tijdvertraging van de sensor.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!