PIR Motion Sensor with Arduino

Hi folks I am back once again to share with you my simple but useful project and step-by-step descriptive video to show you, how you can auto-turn on the room Light when someone come inside the room. It’s only work when someone moves in the room and after a few second lights will turn off automatically. To detect the motion I have used PIR Motion Sensor and program the arduino board to read the sensor signal and turn on the light for a few seconds.

List of components to make this prototype.

  1. Arduino UNO
  2. PIR Motion Sensor
  3. LED
  4. Jumper Wire

PIR Motion Sensor with Arduno Video tutorial.

Arduino code for PIR Motion Sensor prototype

//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;        

//the time when the sensor outputs a low impulse
long unsigned int lowIn;         

//the amount of milliseconds the sensor has to be low 
//before we assume all motion has stopped
long unsigned int pause = 5000;  

boolean lockLow = true;
boolean takeLowTime;  

int pirPin = 3;    //the digital pin connected to the PIR sensor's output
int ledPin = 13;


/////////////////////////////
//SETUP
void setup(){
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(pirPin, LOW);

  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
    for(int i = 0; i < calibrationTime; i++){
      Serial.print(".");
      delay(1000);
      }
    Serial.println(" done");
    Serial.println("SENSOR ACTIVE");
    delay(50);
  }

////////////////////////////
//LOOP
void loop(){

     if(digitalRead(pirPin) == HIGH){
       digitalWrite(ledPin, HIGH);   //the led visualizes the sensors output pin state
       if(lockLow){  
         //makes sure we wait for a transition to LOW before any further output is made:
         lockLow = false;            
         Serial.println("---");
         Serial.print("motion detected at ");
         Serial.print(millis()/1000);
         Serial.println(" sec"); 
         delay(50);
         }         
         takeLowTime = true;
       }

     if(digitalRead(pirPin) == LOW){       
       digitalWrite(ledPin, LOW);  //the led visualizes the sensors output pin state

       if(takeLowTime){
        lowIn = millis();          //save the time of the transition from high to LOW
        takeLowTime = false;       //make sure this is only done at the start of a LOW phase
        }
       //if the sensor is low for more than the given pause, 
       //we assume that no more motion is going to happen
       if(!lockLow && millis() - lowIn > pause){  
           //makes sure this block of code is only executed again after 
           //a new motion sequence has been detected
           lockLow = true;                        
           Serial.print("motion ended at ");      //output
           Serial.print((millis() - pause)/1000);
           Serial.println(" sec");
           delay(50);
           }
       }
  }
28 Comments
  1. JF 9 years ago

    Hi,

    Thanks for the how to. Question for you: I have followed your instructions to the T.

    However, the LED is just blinking, about 1 second off, 3 seconds on.

    Any idea what this is?

    Also, some of these sensors have the jumper shown on yours, while others do not. The pin holes are there, but not pins and no jumpers. It looks like there are two modes to the sensor. Can you explain those and how it might impact your code?

  2. Daniel Fernandes 9 years ago

    Greetings!
    How would the circuit and Arduino code for, instead of using the LED, use a stepper motor to run until the end of a limit switch?
    Thank you

  3. Donald Frank-Rice 9 years ago

    I’m a bit new to this, so please excuse my ignorance. I can follow along in the code well enough to know that motion is detected when the PIR reads HIGH and is not detected when the PIR reads LOW. I am wondering, though, if you can explain the significance of LockLow and TakeLowTime. I am not sure that I follow what they are doing all that well.

  4. abid 8 years ago

    good work

  5. aravind 8 years ago

    sir its very urgent i made this project but the led is always on it is not turning off it shows motion detected at 30s but the motion never ends

    • Ben 7 years ago

      hi aravind I think the pir sensor is spoilt. I had the same issue, bought a new pir sensor, plugged it in and now it works!

    • Muhammad 4 months ago

      Have you successed that project, I’m also trying it now?

  6. amirul nizam 8 years ago

    Hello, i would like to ask. after constructing all the component and upload the code into board.

    there are no changes on led after calibrating, motion detected all the time.

    covering the pir motion using cardboard, also did not response well.

    the led doesnt blink just like demonstration video.

    thank you.

  7. nabihah mardhiah 8 years ago

    hye, if i’m not using LED, how can i know the sensor detect motion or not?

    • Chantuen 8 years ago

      you can see the light on the Arduino Uno board it have a light on it

  8. sherk 8 years ago

    hi sir
    program error
    56 digitalWrite(ledPin, LOW);
    “LedPin was not declared in this scope”
    you can guide me how to fix it?
    thanks

    • Rishi 4 years ago

      you had to make the pins 3 and 13 integers

      int pirPin = 3;
      int ledPin = 13;

    • talha 1 year ago

      check out the ledpin is written in uppercase or lowercase

  9. Jaytee 7 years ago

    great tut. I want more

  10. Afiq 7 years ago

    Cannot verify this program because Serial.printIn(“sec”); was error. So how?

    • Rishi 4 years ago

      if the led turns on then the PIR sensor senses motion and if it turns off then the PIR sensor doesn’t sense motion

  11. HGYGT 7 years ago

    mine will not program
    it just says it is not allowed here

  12. cha cha 7 years ago

    i need someone that is good at sensors in arduino helping me in my final project
    bonus is offer!

  13. Syamil 6 years ago

    Hi there, I’ve follow your step and use your code. But, the project doesn’t work as well, the PIR Motion Sensor doesn’t effect the LED even I’ve shake my hand to the sensor. Can you help me to solve this problem?

  14. Bhat 6 years ago

    Can any one give code explanation for documentation

  15. Jewin 6 years ago

    How to change the duration of light?

  16. Ashish Sudhir Kakne 6 years ago

    Hello sir, can u please suggest code for Send IR sensor data to live server(database)?

  17. Karthikeyan 6 years ago

    Which language is the code written in?

  18. Gültekin 6 years ago

    Thank you so much dude ı looked to much videos but its didnt work
    But ı watched your video and its worked and you told very simple way

  19. Francis 5 years ago

    Why if i’m going to run this mesge appear “LockLow was not declared in this scope “

  20. Gwyneth 5 years ago

    I am really struggling with my PIR Motion sensor! Using this code and set up my sensor correctly detected the motion of my hand 3 times, but after that, it seems to have stopped and no longer was detecting motion. Thoughts?

  21. Jaap 4 years ago

    Sir i am running into an issue.

    A pir sensor should go on when it detects an heat source.

    The problem is when i throw a large karton box in front of it then it goes off.

    How do i adjust it from motion sensor to Pir function.
    I want it only when a human or a large dog goes off.
    Not when my curtains are moving in the wind.

  22. jubair rafe 6 months ago

    how can i set the time for 5seconds so that the light turns off within 5seconds and wait for the next detection

Leave a reply

Your email address will not be published. Required fields are marked *

*

or

Log in with your credentials

Forgot your details?