Beweging
Een passieve infrarood sensor aansluiten
Voor deze opdracht ga je een passieve infrarood sensor of PIR sensor aansluiten.
Opdracht: informatie uit de datasheet halen
Zoek op internet een datasheet van de PIR-sensor die jij gebruikt. Het typenummer van de PIR-sensor die wij gebruiken is: HC-SR501. Als jij hetzelfde type PIR-sensor gebruikt kun je op dat typenummer zoeken. In het engels heet het: PIR motion sensor of PIR motion detector. PIR staat voor Pyroelectric InfraRed. Zie ook:
https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/how-pirs-work
Noteer de volgende eigenschappen:
a. Spanning waarop de PIR sensor werkt
b. De stroomsterkte die de PIR sensor zal afnemen
c. De verschillende aansluitingen
d. Wat verandert er bij het detecteren van een beweging?
e. Wat kun je instellen aan de PIR sensor? (Wat kun je doen met de twee schroefjes op de PIR-sensor?)
f. De hoek waaronder de PIR sensor beweging kan detecteren
g. De afstand waarbinnen hij nog beweging kan detecteren
h. Wat is het verschil tussen H-mode en L-mode?
Opdracht: sluit de PIR-sensor aan
Bouw de schakeling zoals hieronder.
Test vervolgens of de PIR-sensor goed is aangesloten door gebruik te maken van de seriële monitor. Verderop in deze pagina vind je een programma hiervoor dat je kunt gebruiken.
Test het programma en de werking van de sensor. Wanneer verschijnt er een 0? Wanneer een 1? Wat gebeurt er als je de instellingen (gevoeligheid en vertraging) van de PIR-sensor aanpast? Wat gebeurt er als je de trigger aanpast (L-mode of H-mode)?
Wees je er van bewust dat de PIR-sensor steeds even moet opstarten als je hem aansluit. Ook zal de PIR-sensor bij het overgaan van HIGH (1) naar LOW (0) minstens 3 seconden op LOW blijven, voordat de output weer HIGH kan worden (als er een beweging wordt gedetecteerd).
De aansluitingen van de PIR sensor zitten aan de onderzijde dus die kun je niet zomaar in het breadboard prikken. Je zult daarvoor met draadjes moeten werken.
Bij veel van deze PIR sensoren zie je niet meteen waar welke aansluiting voor dient. Vaak staat het dan onder het witte kapje. Dat kun je er eenvoudig even af halen. Maar doe het er wel weer op want dat kapje fungeert als een lens.
Hieronder vind je een programma waarmee je de werking van de PIR-sensor kunt testen met behulp van de seriele monitor.
const int sensorPin = 2;
void setup() {
pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
void loop() {
Serial.println (digitalRead(sensorPin));
}
Zorg dat de jumper (als die op de sensor zit) in de H-mode staat (zie afbeelding hieronder).
Programmeren van de PIR-sensor
Je hebt de PIR-sensor aangesloten. Tijd dus om het programma voor de straatverlichting te maken.
Laten we de PIR sensor beschouwen als een bewegingsmelder van een lamp. In dat geval moet er dus bij beweging een lampje aangaan. Daarvoor kunnen we eenvoudig gebruik maken van de interne led van de Arduino. Ga uit van het onderstaande toestandsdiagram.
Je hoeft voor deze opdracht nog geen gebruik van timers te maken.
We hebben dus de volgende toestanden:
- Het ledje / de lamp is uit
- Het ledje / de lamp is aan
Hieronder vind je het programma voor de Arduino dat hoort bij bovenstaande toestandsdiagram.
Opdracht: Test het programma
Test nu de werking van de sensor met behulp van bovenstaande programma. Zorg dat je het programma begrijpt. Zie je de relatie tussen het toestandsdiagram en het programma.
De volgende stap is om in een programma te bepalen hoe lang de lamp aan moet blijven (zie ook: Toestandsdiagram met timer).
Programmeren een timer
Als tijdens een beweging het ledje aangegaan is, mag deze niet meteen, bij het eindigen van de beweging, weer uit gaan. We gaan daarvoor in het programma een timer programmeren. Kortom, we laten de Arduino de seconden tellen.
De minimumtijd van de PIR sensor zelf, gerekend vanaf het moment dat er geen persoon meer wordt gedetecteerd, is ongeveer 2,5 seconde. We laten die voor het gemak echter buiten beschouwing.
Laten we er van uit gaan dat er 10 seconden moeten verstrijken voor het licht uitgaat.
We gebruiken onderstaande toestandsdiagram. Je ziet dat er een timer is toegevoegd.
Aan de aansluiting van de Arduino hoeven we niets te veranderen. We gaan immers het gedrag van het systeem aanpassen door het programma te veranderen.
In het algemene deel van cyclus 2 hebben we laten zien hoe je een timer kunt programmeren. Hier laten we zien hoe je dat voor de Arduino kunt doen.
Ten eerste heb je een variabele nodig:
unsigned long eindTimer = 0;
Stel, je wilt een timer starten voor 10 seconden. Gebruik dan de volgende regel om de timer te starten of te resetten:
eindTimer = millis() + 10000;
De functie millis() geeft het aantal milliseconden dat verstreken is sinds de Arduino is opgestart. Het getal 10000 geeft het aantal milliseconden weer, dat is gelijk aan 10 seconden.
Om te zien of de timer afloopt gebruik je:
millis() >= eindTimer
Hieronder vind je een uitgewerkt programma voor het bovenstaande toestandsdiagram. Je mag natuurlijk ook zelf een programma schrijven op basis van het toestandsdiagram.
Opdracht: test het programma met de timer
Test het bovenstaande programma.
Voorbeeld: knipperend lampje programmeren
Hierbij geven we een voorbeeld van een knipperend lampje met behulp van een timer. Dit is het toestandsdiagram dat we gebruiken.
- Toestand 1 betekent: lamp is uit
- Toestand 2 betekent: lamp is aan
In plaats van een lamp gebruiken we de interne led op de Arduino.
Hieronder kun je het programma downloaden. Download het en test het gerust.
Actieve infrarood sensor
Je kent ze ongetwijfeld. Van die poortjes bij een supermarkt of bouwmarkt. Je kunt er wel in maar moet via de kassa weer naar buiten. Vaak werkt zo’n poortje met een actieve infrarood sensor. Zodra je je in de straal bevindt gaat het poortje korte tijd open.
Afbeelding met toestemming van Alrecar B.V. Sprang-Capelle overgenomen
Je hebt actieve infrarood sensoren waarbij aan één kant van de doorgang zich de zender bevindt die dus het infrarode licht uitzendt en er tegenover zit dan de ontvanger. Zodra de ontvanger geen infrarood licht ontvangt kan op die veranderde situatie gereageerd worden.
Hieronder een afbeelding van een eenvoudiger infrarood sensor. De zender en de ontvanger zitten naast elkaar. Het infrarode licht wordt uitgezonden en wanneer er dan iemand of iets zich in die lichtstraal bevindt wordt deze teruggekaatst en weer opgevangen door de ontvanger. De sensor reageert dan door een poort HIGH of LOW te maken. Wij zullen ons in verband met de eenvoud alleen bezig houden met dit type infrarood sensor.
Opdracht: datasheet van de actieve infraroodsensor
Zoek een datasheet van de actieve infrarood sensor zoals hierboven afgebeeld en noteer de volgende eigenschappen:
- Spanning waarop de actieve infrarood sensor werkt
- De stroomsterkte die de actieve infrarood sensor zal afnemen
- De aansluitingen
- De hoek waaronder voorwerpen gedetecteerd kunnen worden.
- Wat verandert er bij het detecteren van een voorwerp?
- De afstand waarbinnen de actieve infrarood sensor een voorwerp kan detecteren (en binnen welke afstanden in te stellen).
Bouw een toegangspoort
Je gaat nu een prototype maken voor een toegangspoortje zoals in een supermarkt. Het idee is als volgt. Zodra de sensor detecteert dat er iets of iemand voor het poortje staat moet het poortje open gaan (er gaat een motortje draaien voor ongeveer 1 seconde). Als gedurende 5 seconden niets wordt gedetecteerd moet het poortje weer dicht gaat (het motortje draait de andere kant op voor ongeveer 1 seconde).
Je voor deze opdracht een motortje gebruiken. Je moet dan zelf uitzoeken hoe je het motortje moet aansluiten en aan sturen. In het materiaal van Freek Pols vind je daar meer informatie over. En op internet is natuurlijk ook veel te vinden.
In plaats van een motortje dat het poortje open doet mag je ook gebruiken van een ledje. Met het ledje boots je het gedrag van het motortje na: als de lamp aan is draait de motor (voor- of achteruit). Het lampje brandt dus hooguit 1 seconde achter elkaar. Hieronder vind je een opstelling met de actieve infraroodsensor en een ledje.
Nog even ter herinnering:
Denk aan het volgende: het langste pootje van het ledje is de plus en deze moet aangesloten worden aan poort 10 van de Arduino. In serie met het ledje moet een voorschakelweerstand geplaatst worden omdat anders de stroom door het ledje te hoog wordt. Deze weerstand moet een waarde hebben van 220 Ω (kleurcode rood-rood-bruin).
Denk er ook om dat niet van alle actieve infraroodsensoren de aansluitingen gelijk zijn. Dus let goed op het opschrift op de sensor.
Opdracht: ontwikkel prototype van een toegangspoortje
- Bouw de bovenstaande schakeling waarmee we ons een toegangspoortje voorstellen.
- Teken het toestandsdiagram. Maak gebruik van één of meerdere timers.
- Maak het programma op basis van het toestandsdiagram voor deze schakeling en test deze.
Terug naar voorpagina Arduino