Arduino with PIR Motion Sensor

In this project you’re going to create a simple circuit with an Arduino and PIR motion sensor that can detect movement. An LED will light up when movement is detected.

Watch the video below to see how it works

Introducing the PIR Motion Sensor

The PIR motion sensor is ideal to detect movement. PIR stand for “Passive Infrared”. Basically, the PIR motion sensor measures infrared light from objects in its field of view.

So, it can detect motion based on changes in infrared light in the environment. It is ideal to detect if a human has moved in or out of the sensor range.

pir

The sensor in the figure above has two built-in potentiometers to adjust the delay time (the potentiometer at the left) and the sensitivity (the potentiometer at the right).

Pinout

Wiring the PIR motion sensor to an Arduino is pretty straightforward – the sensor has only 3 pins.

  • GND – connect to ground
  • OUT – connect to an Arduino digital pin
  • 5V – connect to 5V

Parts required

1parts

Here’s the required parts for this project

You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!

Schematics

Assemble all the parts by following the schematics below.

Arduino with PIR motion sensor schematics

 

Code

Upload the following code.

/*  
    Arduino with PIR motion sensor
    For complete project details, visit: http://RandomNerdTutorials.com/pirsensor
    Modified by Rui Santos based on PIR sensor by Limor Fried
*/
 
int led = 13;                // the pin that the LED is atteched to
int sensor = 2;              // the pin that the sensor is atteched to
int state = LOW;             // by default, no motion detected
int val = 0;                 // variable to store the sensor status (value)

void setup() {
  pinMode(led, OUTPUT);      // initalize LED as an output
  pinMode(sensor, INPUT);    // initialize sensor as an input
  Serial.begin(9600);        // initialize serial
}

void loop(){
  val = digitalRead(sensor);   // read sensor value
  if (val == HIGH) {           // check if the sensor is HIGH
    digitalWrite(led, HIGH);   // turn LED ON
    delay(100);                // delay 100 milliseconds 
    
    if (state == LOW) {
      Serial.println("Motion detected!"); 
      state = HIGH;       // update variable state to HIGH
    }
  } 
  else {
      digitalWrite(led, LOW); // turn LED OFF
      delay(200);             // delay 200 milliseconds 
      
      if (state == HIGH){
        Serial.println("Motion stopped!");
        state = LOW;       // update variable state to LOW
    }
  }
}

View raw code

Wrapping Up

This post shows a simple example on how to use the PIR motion sensor with the Arduino. Now, you can use the PIR motion sensor in more advanced projects. For example, you can build a Night Security Light project.

If you’re an absolute beginner, and you’re just getting started, we recommend taking a look at our Free Arduino Mini Course.

Thanks for reading. If you like this post probably you might like our next ones, so please support us by subscribing our blog.


Learn how to program and build projects with the ESP32 and ESP8266 using MicroPython firmware DOWNLOAD »

Learn how to program and build projects with the ESP32 and ESP8266 using MicroPython firmware DOWNLOAD »


Enjoyed this project? Stay updated by subscribing our weekly newsletter!

51 thoughts on “Arduino with PIR Motion Sensor”

    • Hi!
      Not exactly, I do plan to make a more advanced tutorial in a few weeks.
      Integrate the PIR motion sensor with my website: http://homeautomationserver.com/
      So it notifies on your account and changes the state when motion is detected.
      I’m currently working on the homeautomationserver API, so we can send input data, such as temperature or sensor values.
      But it’s taking longer than I thought and I won’t have much time left in the upcoming weeks.

  1. You should connect the data PIR connector to the GND with a resistor on your schematic to delete the no-wanted parasits signal

  2. You need targeted visitors for your Arduino with PIR Motion Sensor | Random Nerd Tutorials website so why not try some for free? There is a VERY POWERFUL and POPULAR company out there who now lets you try their website traffic service for 7 days free of charge. I am so glad they opened their traffic system back up to the public! Check it out here: http://kururu.info/yourls/2u

  3. Dear
    Sir I very like your project and learnd and can you tell about how to make the gsm security alarm with this project and code. Thank you very much

  4. Sir,
    I like you PIR motion sensor with arduino project. Can you tell me how can I use this model in place of 230v switch to make it automated? Can you provide me with diagram of the circuit and the materials required in this project?
    Thank you

  5. the PIR sensor is very sensitive. can you somehow tell me how to reduce the turning on and off of the sensor on its own…. please reply cuz i need to submit it quickly.

  6. /*
    I NEED FURTHER EXPLANATION BECAUSE IM JUST A BEGINNER

    */

    int led = 13; // the pin that the LED is atteched to
    int sensor = 2; // the pin that the sensor is atteched to
    int state = LOW; // by default, no motion detected
    int val = 0; // variable to store the sensor status (value)

    void setup() {
    pinMode(led, OUTPUT); // initalize LED as an output
    pinMode(sensor, INPUT); // initialize sensor as an input
    Serial.begin(9600); // initialize serial
    }

    void loop(){
    val = digitalRead(sensor); // read sensor value
    if (val == HIGH) { // check if the sensor is HIGH
    digitalWrite(led, HIGH); // turn LED ON
    delay(100); // delay 100 milliseconds

    if (state == LOW) { //————————-IN THIS PART HOW TO MAKE IT STOP?
    Serial.println(“Motion detected!”);
    state = HIGH; // update variable state to HIGH //——- THERE IS NO TIME INTERVAL PUTTED HERE
    }
    }
    else {
    digitalWrite(led, LOW); // turn LED OFF
    delay(200); // delay 200 milliseconds

    if (state == HIGH){
    Serial.println(“Motion stopped!”);
    state = LOW; // update variable state to LOW
    }
    }
    }

    I dont really understand the part which motion is detected… how you make if stop if it detects a motion?

    can you please explain me further?
    thank you ! and godbless

  7. Trying with an wemos hooked up the pir to pin 4 D2 and the led to pin 13 D7 the led blinking like crazy , tried in dark, tried the resistor between data pin of pir and GND , tried with a second brand new pir adjusted those both potentiometers on the pir all directions .. btw(why there 2 whats the role of the second? if one is sensitivity?) nothing still blinking like crazy any idea?
    thanks
    Teodor

    • Hi Teodor.
      The best way to use the PIR with the wemos is setting it as an interrupt and set a callback function to light up the LED for a predetermined number of seconds whenever the interrupt is triggered.
      With the code in this example, you may get a lot of interference and get false positives, which results in the LED blinking.
      Regards,
      Sara 🙂

Leave a Comment

Download our Free eBooks and Resources

Get instant access to our FREE eBooks, Resources, and Exclusive Electronics Projects by entering your email address below.