Arduino Nano - Bewegingssensor

Heeft u zich ooit afgevraagd: “Hoe kan dat nou?” wanneer u automatische deuren, verlichting of roltrappen tegenkomt? Dan zal deze handleiding uw vraag niet alleen beantwoorden, maar u ook laten zien hoe u dit zelf kunt maken met een Arduino Nano en een bewegingssensor. Laten we aan de slag gaan!

Deze handleiding leert u hoe u de Arduino Nano gebruikt met een bewegingssensor. In detail behandelen we:

Hardware Benodigd

1×Official Arduino Nano
1×Alternatief: DIYables ATMEGA328P Nano Development Board
1×USB A naar Mini-B USB-kabel
1×HC-SR501 Bewegingssensor
1×Jumper wires (verbindingskabels)
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Breakout Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Stromsplitter voor Arduino Nano

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 is in staat beweging van mensen (of dieren) te detecteren. Het wordt veel gebruikt in diverse toepassingen, zoals het automatisch aan- of uitzetten van verlichting, het openen en sluiten van deuren, het activeren of deactiveren van roltrappen, en het detecteren van indringers.

De Pinout van de Bewegingssensor

De HC-SR501 bewegingssensor heeft 3 pinnen:

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

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

HC-SR501 Bewegingssensor pinout

Hoe Werkt Het

De HC-SR501 sensor detecteert beweging op basis van veranderingen in infrarode straling van een bewegend object. Om de sensor een object te laten detecteren, moeten twee voorwaarden worden voldaan:

  • Het object moet in beweging zijn of trillen
  • Het object moet infrarode straling uitstralen

Als gevolg daarvan:

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

Mensen en dieren zijn bronnen van infrarode straling. Daardoor kan de sensor hun beweging detecteren.

Staat van de OUTPUT pin:

  • Als er geen mens (of dier) aanwezig is binnen het detectiebereik van de sensor, is de OUTPUT pin LOW.
  • Als een mens (of dier) het detectiebereik binnenloopt, verandert de OUTPUT pin van LOW naar HIGH, wat Bewegung detectie aangeeft.
  • Wanneer de mens (of dier) het detectiebereik verlaat, schakelt de OUTPUT pin terug van HIGH naar LOW, wat het stoppen van beweging aangeeft.

De bovenstaande video toont de basiswerking van de bewegingssensor. In de praktijk kan de sensor anders werken afhankelijk van de configuratie (beschreven in de sectie Geavanceerde toepassingen).

Detecteer de Aanwezigheid van Mensen

De sensor zelf herkent geen mensen, hij detecteert alleen beweging. Wij gebruiken een Arduino Nano om aanwezigheid van mensen te concluderen op basis van de door de sensor gedetecteerde beweging, volgens de volgende regel:

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

Deze regel werkt in de praktijk niet perfect: als mensen binnen het bereik van de sensor zijn maar niet bewegen, wordt er geen beweging gedetecteerd. De Arduino Nano concludeert dan onterecht dat er geen mensen aanwezig zijn.

Bijvoorbeeld, de bewegingssensor in uw vergaderruimte is zo ingesteld dat de lichten aangaan wanneer er mensen zijn. Tijdens een vergadering waarbij niemand beweegt, wordt er geen beweging gedetecteerd en wordt de aanwezigheid van mensen niet herkend, waardoor de lichten uitgaan. Om ze weer aan te krijgen, moet iemand bewegen.

Deze beperking is echter NIET ernstig en de sensor is goedkoop. Daarom wordt hij breed ingezet in veel toepassingen om mensen te detecteren.

Arduino Nano - HC-SR501 Bewegingssensor

Verbind een digitale input pin van de Arduino met de OUTPUT pin van de HC-SR501 sensor. Met de Arduino Nano code kunnen we de waarde van de OUTPUT pin controleren om beweging te detecteren.

Bedradingsschema

Arduino Nano Bewegingssensor bedrading

This image is created using Fritzing. Click to enlarge image

Initiële Instelling

Tijdvertraging Insteller Draai deze helemaal tegen de klok in.
Detectiebereik Insteller Draai deze helemaal met de klok mee.
Herhaalde Trigger Selector Plaats de jumper zoals in de afbeelding is aangegeven.
arduino motion sensor initial setting

Hoe Programmeert U Voor de Bewegingssensor

  • Stel een pin van de Arduino in als digitale input met behulp van de pinMode() functie.
pinMode(MOTION_SENSOR_PIN, INPUT);
  • Controleer de staat van de OUTPUT pin van de sensor met de digitalRead() functie.
motion_state = digitalRead(MOTION_SENSOR_PIN);
  • Herken wanneer beweging begint (de pin verandert van LOW naar HIGH).
prev_motion_state = motion_state; // sla de vorige staat op motion_state = digitalRead(MOTION_SENSOR_PIN); // lees nieuwe staat if (prev_motion_state == LOW && motion_state == HIGH) { // pin verandering: LOW -> HIGH Serial.println("Motion detected!"); }
  • Herken wanneer de pin verandert van HIGH naar LOW, wat aangeeft dat beweging gestopt is.
prev_motion_state = motion_state; // sla de vorige staat op motion_state = digitalRead(MOTION_SENSOR_PIN); // lees nieuwe staat if (prev_motion_state == HIGH && motion_state == LOW) { // pin verandering: HIGH -> LOW Serial.println("Motion stopped!"); }

Arduino Nano Code

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-motion-sensor */ #define MOTION_SENSOR_PIN 2 // The Arduino Nano pin connected to the OUTPUT pin of motion sensor int motion_state = LOW; // current state of pin int prev_motion_state = LOW; // previous state of pin void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(MOTION_SENSOR_PIN, INPUT); // set arduino pin to input mode to read value from OUTPUT pin of sensor } void loop() { prev_motion_state = motion_state; // store old state motion_state = digitalRead(MOTION_SENSOR_PIN); // read new state if (prev_motion_state == LOW && motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); // TODO: turn on alarm, light or activate a device ... here } else if (prev_motion_state == HIGH && motion_state == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); // TODO: turn off alarm, light or deactivate a device ... here } }

Snelle Stappen

  • Kopieer bovenstaande code en open deze in de Arduino IDE.
  • Klik op de Upload knop in de Arduino IDE om de code te compileren en te uploaden naar de Arduino Nano.
  • Open de Seriële Monitor.
  • Beweeg uw hand binnen het bereik van de sensor.
  • Controleer de uitvoer in de Seriële Monitor.
COM6
Send
Motion detected! Motion stopped!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

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.

Geavanceerde Toepassingen

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 we de sensorconfiguratie aanpassen met een jumper en twee potentiometers.

Insteller voor Detectiebereik

Deze potentiometer verandert hoe ver een object gedetecteerd kan worden (ongeveer 3 tot 7 meter).

  • Wanneer deze helemaal naar rechts draait, detecteert de sensor tot circa 3 meter afstand.
  • Wanneer deze helemaal naar links draait, detecteert de sensor tot circa 7 meter afstand.
Bewegingssensor detectiebereik aanpassen

Met de potentiometer kunt u een bereik tussen 3m en 7m instellen.

Insteller voor Tijdvertraging

Deze potentiometer wordt gebruikt om de tijdvertraging aan te passen:

  • Wanneer deze helemaal met de klok mee is gedraaid, is de tijdvertraging ongeveer 5 minuten.
  • Wanneer deze helemaal tegen de klok in is gedraaid, is de tijdvertraging ongeveer 3 seconden.

De volgende sectie legt het concept van tijdvertraging in combinatie met Repeat Trigger uit.

bewegingssensor tijdvertraging instellen

Herhaalde Trigger Selector

Er is een jumper die wordt gebruikt om trigger-modi te kiezen: enkelvoudige trigger of herhaalbare trigger.

bewegingssensor trigger selectie

Laten we de tijdvertraging ingesteld via de Tijdvertraging Insteller time_delay noemen. Als u langere tijd binnen het bereik van de sensor beweegt (de zogenaamde motion_time), die meerdere keren langer is dan time_delay:

  • In Enkelvoudige Trigger Modus: de OUTPUT pin wisselt meerdere keren tussen LOW en HIGH. De HIGH duur is gelijk aan time_delay, terwijl de LOW duur vaststaat op 3 seconden.
bewegingssensor enkelvoudige trigger modus
  • In Herhaalbare Trigger Modus: de OUTPUT pin blijft HIGH gedurende (motion_time + time_delay).
bewegingssensor herhaalbare trigger modus

Testen

  • Enkelvoudige trigger modus:
    • Plaats de jumper in de positie voor enkelvoudige trigger modus
    • Wrijf ongeveer 10 seconden met uw hand voor de sensor
    • Verplaats uw hand uit het gebied van de sensor
    • Wacht 3 seconden, u zult de volgende uitvoer zien in de seriële monitor:
    COM6
    Send
    Motion detected! Motion stopped! Motion detected! Motion stopped! Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Herhaalbare trigger modus:
    • Plaats de jumper in de positie voor herhaalbare trigger modus
    • Wrijf ongeveer 10 seconden met uw hand voor de sensor
    • Verplaats uw hand uit het bereik van de sensor
    • Wacht 3 seconden, de output in de seriële monitor zal als volgt zijn:
    COM6
    Send
    Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

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

    ※ Notiz:

    Tijdens de LOW tijd (3 seconden, een vaste en niet aanpasbare waarde) kan de sensor geen beweging detecteren. Dit veroorzaakt in de praktijk geen problemen.

    Het is aan te raden om de herhaalbare trigger modus te gebruiken.

    In veel praktische situaties:

    • Schakelen of activeren we devices/machines zodra een mens aanwezig is
    • Schakelen of deactiveren we devices/machines NIET meteen na afwezigheid van een mens, maar pas na enige tijd

    Hoe Gebruik Je Tijdvertraging

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

    De bewegingssensor heeft een Tijdvertraging Insteller waarmee u de tijdvertraging kunt instellen van minimaal 3 seconden tot maximaal 5 minuten. Daarnaast kan ook in de Arduino Nano code elke gewenste tijdvertraging worden ingesteld.

    Als in de Arduino Nano code geen timeout gespecificeerd wordt, is de timeout gelijk aan de tijdvertraging van de sensorinstelling.

    Als er wel een timeout in de Arduino Nano code is ingesteld, is dit de som van de tijdvertraging in de sensorconfiguratie en de tijdvertraging in de Arduino Nano code.

    Tijdvertraging Instellen in de Arduino Nano Code

    /* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-motion-sensor */ #define MOTION_SENSOR_PIN 2 // The Arduino Nano pin connected to the OUTPUT pin of motion sensor int motion_state = LOW; // current state of pin int prev_motion_state = LOW; // previous state of pin const unsigned long DELAY_TIME_MS = 30000; // 30000 miliseconds ~ 30 seconds bool delay_enabled = false; unsigned long delay_start_ms; void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(MOTION_SENSOR_PIN, INPUT); // set arduino pin to input mode to read value from OUTPUT pin of sensor } void loop() { prev_motion_state = motion_state; // store state motion_state = digitalRead(MOTION_SENSOR_PIN); // read new state if (prev_motion_state == LOW && motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); Serial.println("Turning on / activating"); delay_enabled = false; // disable delay // TODO: turn on alarm, light or activate a device ... here } else if (prev_motion_state == HIGH && motion_state == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); delay_enabled = true; // enable delay delay_start_ms = millis(); // set start time } if (delay_enabled == true && (millis() - delay_start_ms) >= DELAY_TIME_MS) { Serial.println("Turning off / deactivating"); delay_enabled = false; // disable delay // TODO: turn off alarm, light or deactivate a device ... here } }

    Indien herhaalbare trigger modus is ingeschakeld, is de vertraging in de code 30 seconden plus time_delay, ingesteld via de Tijdvertraging Insteller aan de sensorzijde.

Daag Uzelf Uit

Gebruik de bewegingssensor voor een van deze projecten:

  • Zet de verlichting aan als u een kamer binnenkomt en zet deze uit na 30 seconden nadat u bent vertrokken. Tip: Bekijk Arduino Nano - Relay.
  • Activeer een alarm wanneer iemand uw kostbare spullen nadert. Tip: Bekijk Arduino Nano - Piezo Buzzer.

Functie Referenties

※ 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!