Tutorial: HC-SR501 PIR Bewegingssensor aansluiten en gebruiken

Het detecteren van beweging om bijvoorbeeld automatisch het licht te schakelen of een bewegingsmelder te maken kan erg makkelijk met de HC-SR501. Deze passief infrarood bewegingssensor is eenvoudig in gebruikt, heeft een groot bereik en kan geheel standalone werken. In deze tutorial leer je hoe de PIR sensor moet aansluiten, instellen en gebruiken.

1. Benodigdheden HC-SR501 Tutorial

Om deze tutorial te volgen heb je wat hardware en software nodig. Helemaal onderaan de pagina zie je de producten die je bij ons kunt kopen om gelijk aan de slag te gaan.

Hardware

Software

  • Arduino IDE

2. Een kijkje in de HC-SR501 bewegingssensor

De HC-SR501 is een PIR (Passive Infra Red) bewegingssensor en kan gebruikt worden om veranderingen in het infrarood licht spectrum te detecteren. Hierbij moet je weten dat elk voorwerp een bepaalde temperatuur heeft, en dus infrarood licht (warmte) uitstraalt. Hoe warmer het object, des te meer infrarood licht deze uitstraalt. Deze bewegingssensor maakt van dat natuurkundig verschijnsel gebruik om beweging van warmere objecten t.o.v. een statische achtergrond te detecteren. Beweging kan dus worden gedetecteerd als een persoon, dier of warm voorwerp zich verplaatst. Er is geen detectie van beweging als bijvoorbeeld een bal door de kamer rolt, aangezien die dezelfde temperatuur uitstraalt als de meeste voorwerpen in de kamer en dus niet gezien wordt door de sensor.

Om ervoor te zorgen dat de pyroelektrische sensor goed werkt, en een groot bereik heeft, wordt gebruik gemaakt van een zogenaamde Fresnel lens. De Fresnel is het witte kapje dat op de sensor zit. In de afbeelding hierboven hebben wij het kapje eraf gehaald zodat je de sensor ziet zitten.

De Fresnel lens is voorzien van ongeveer 31 kleinere lensjes die een deel van het licht focussen op de pyroelektrische sensor. Hierdoor ontstaan er in feite 31 punten waarop de sensor gevoelig is, en dus beweging kan detecteren. Zonder deze lens heeft de sensor slechts een bereik van een tiental centimeters.

Gevoeligheid & Triggertijd
Op de HC-SR501 module zitten twee potmeters waarmee je de gevoeligheid en de triggertijd kunt instellen. De instelling van de gevoeligheid mag voor zichzelf spreken en zul je proefondervindelijk moeten instellen in de ruimte waar je de bewegingssensor gaat gebruiken.

Voor de triggertijd moet je weten dat er op de module een digitale uitgang, ook wel triggerpin genoemd, zit die een hoog signaal afgeeft zodra er een beweging is gedetecteerd. Met de potmeter voor de triggertijd stel je in hoe lang deze trigger pin hoog blijft nadat de beweging is gedetecteerd. Je kunt deze instellen van 2 seconden tot ongeveer 5 minuten.

Triggermode: single of continuous
Nog een belangrijke functionaliteit is de manier waarop de triggerpin wordt aangestuurd. Middels de gele jumper op de module kun je kiezen voor single of continuous mode. Welke mode jouw voorkeur heeft is afhankelijk van de toepassing.

Bij single mode zal de module de trigger pin hoog maken zodra er een bewegiging is gedetecteerd. Er gaat dan een interne timer lopen die de triggerpin hoog houdt. Zodra deze timer is afgelopen wordt de triggerpin weer laag gemaakt. Tijdens de periode dat de triggerpin hoog is worden er géén bewegingen meer gedetecteerd.

Bij continuous mode zit het net wat anders. Ook in deze mode zal de triggerpin hoog worden gemaakt nadat er een beweging is gedetecteerd, en ook de interne timer begint te lopen. Echter, zodra er nóg een beweging gedetecteerd wordt, tijdens de periode dat de triggerpin hoog is, zal de interne timer gereset worden!

Hoe stel je de triggermode in? Als je goed op de onderkant van de module kijkt zie je naast deze jumper de letters 'L' en 'H' gedrukt. Als je de jumper op positie H zet, dan staat de module in continuous mode. Zet je de jumper op positie L dan heb je single mode te pakken.

Detectietijd
Er zit echter een nadeel aan deze module is dat is de detectietijd. Nadat er een beweging is gedetecteerd duurt het ongeveer 5 tot 6 seconden voordat een volgende beweging verwerkt kan worden met deze module. Het is dus belangrijk om met deze vertraging rekening te houden.Hierover zal later in de tutorial een praktisch voorbeeld aan bod komen om dit 'euvel' op een aantal elegante manieren op te vangen.

3. De HC-SR501 als standalone bewegingssensor gebruiken

De reden dat deze sensor zo populair is komt omdat deze standalone kan werken, en is dus niet afhankelijk van een microcontroller. Hierdoor blijft de schakeling klein en goedkoop. Je kunt bijvoorbeeld de triggerpin direct aansluiten op een relais module om zo een lichtpunt te schakelen. Voor deze tutorial maken we echter gebruik van een Arduino en wat andere randcomponenten, lees daarom snel verder.

4. De HC-SR501 Bewegingssensor aansluiten op Arduino

Het aansluiten van de sensor is erg eenvoudig, aangezien er maar 3 pinnen zijn. Kijk even op de afbeelding hierboven waar de pinnen zich bevinden op de module.

  • VCC - Aansluiten op de VCC (5V) van de Arduino
  • OUT - Dit is de uitgang (triggerpin) met een signaalniveau van 3.3V. Sluit deze aan op pin 2 van de Arduino
  • GND - Aansluiten op de GND van de Arduino

De VCC kan eventueel ook op een externe spanningsbron worden aangesloten die ligt tussen de 4V en 20V gelijkspanning. Het voltage dat de triggerpin uitstuurt als hoog signaal zal, ongeacht de voedingsspanning, 3.3V zijn.

Verder maken we gebruik van de ongebouwd LED op de Arduino om de status van de triggerpin uit te lezen. Heb je deze LED niet? Koppel dan een LED met een 1K weerstand aan pin 13 van de Arduino.

5. De Arduino Software voor het uitlezen van de bewegingssensor

De software die we gaan schrijven is erg eenvoudig aangezien er maar 1 pin ingelezen hoeft te worden. Op basis van de activiteit van de sensor zal de LED (pin 13) op de Arduino in- of uitgeschakeld worden.

#define trigger 2 // Output from HC-SR501 module

void setup() {
  pinMode(LED_BUILTIN, OUTPUT); // LED_BUILTIN is pin 13 on Arduino Uno
}

void loop() {
  if(digitalRead(trigger)){
    digitalWrite(LED_BUILTIN, HIGH);
}else{ digitalWrite(LED_BUILTIN, LOW);
} }

Eerst geven we aan dat de triggerpin van de module is aangesloten op pin 2 van de Arduino. Daarna zal in de setup() pin 13 (LED_BUILTIN) als output worden gezet.

In de loop() wordt de triggerpin continue uitgelezen. Zodra deze hoog is (beweging gedetecteerd) zal de LED aan gaan. Als deze weer laag is zal de LED uit gaan.

Upload de sketch maar naar de Arduino en kijk wat er gebeurd. Stel vervolgens de triggertijd zodanig in dat deze 2-3 seconden is. Dat doe je door de potmeter helemaal naar links te draaien.

6. De module verbeteren via hardware en software

Wat je wellicht opvalt is dat de LED met bovenstaande code niet aan blijft, ook al beweeg je continue met je had voor de sensor. Ook maakt het niet uit of je single mode of continuous mode kiest. Wat is er aan de hand?

Dit heeft te maken met de eerder genoemde detectietijd van 5-6 seconden. Dat is de tijd die de sensor nodig heeft om opnieuw een beweging te detecteren. Aangezien je nu een triggertijd hebt van 3 seconden betekend dat de triggerpin na 3 seconden alweer uit gaat.

Als je gebruik maakt van single mode dan zal de triggerpin altijd laag worden nadat de triggertijd is verstreken. Daarna moet je 5-6 seconden wachten voordat die weer hoog wordt. Wil je de sensor in single mode gebruiken, en iets schakelen langer dan 5 minuten? Dan moet je gebruik maken van een Arduino en het probleem softwarematig oplossing. Zodra er een beweging is gedetecteerd stuur je een uitgang hoog

if(digitalRead(trigger)){
  digitalWrite(LED_BUILTIN, HIGH);
  for(int i=0; i < 600; i++){ // Wait 600 seconds (10 minutes)
    delay(1000);
}
digitalWrite(LED_BUILTIN, LOW);

Om zonder tussenkomst van een microcontroller toch de triggerpin continue hoog te houden zul je moeten kiezen voor de continuous mode. Zet daarbij de triggertijd op minimaal 30 seconden.

Ga zelf aan de slag en bestel bij VDR Electronics

Verder lezen

Deel deze handleiding