Motion Activated Servo





Introduction: Motion Activated Servo

This is a basic motion activated servo that can be used in a wide variety of projects, and it is very simple and easy to make. If you use it creatively, you can do a lot of things with it. For example, I used mine to create a motion activated nerf gun.

Step 1: Materials

In order to make this, you will need:

An Arduino.
A PIR motion sensor.
A servo.

Step 2: Wiring

The wiring in this Instructable is very simple. The ground pin (GND) on the PIR sensor should be plugged into the Arduino's ground pin, the 5 volt pin (VCC) should be plugged into the Arduino's digital pin 13, and the data pin (OUT) should be plugged into the Arduino's digital pin 12.

The servo's red wire should be plugged into the Arduino's 5 volt pin, the black wire should be plugged into the Arduino's Ground pin, and the signal wire (it was white on my servo) should be plugged into the Arduino's digital pin 4.

The wiring is complete! If you are confused, look at the pictures or ask in the comments.

Step 3: Code

This code should be uploaded to your Arduino. If you wish, you can open the Serial Moniter in the Arduino IDE in order to view what the Arduino is doing.

To write this code, I basically combined code I found for a PIR sensor ( and code for a servo  (, and then made changes wherever I thought it would improve the code.


/* This code sweeps a servo from 0 degrees to 180 when the PIR sensor detects motion.
   Special thanks goes to the author of the PIR sensor code, whose code helped tremendously
   in the making of this code and Instructable.
   author of PIR sensor code: Kristian Gohlke / krigoo (_) gmail (_) com /

#include <Servo.h>

Servo myservo;  //creates a servo object
                         //a maximum of eight servo objects can be created

int pos = 0;        //variable to store servo position


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; 


void setup(){
  myservo.attach(4);    //attaches servo to pin 4
  Serial.begin(9600);    //begins serial communication
  pinMode(pirPin, INPUT);
  pinMode(pirPos, OUTPUT);
  digitalWrite(pirPos, HIGH);

  //give the sensor time to calibrate
  Serial.println("calibrating sensor ");
    Serial.print(calibrationTime - i);
  //going HIGH immediately after calibrating
  while (digitalRead(pirPin) == HIGH) {
  Serial.print("SENSOR ACTIVE");

void loop(){


    /*turns servo from 0 to 180 degrees and back
    it then does it in reverse to have it go back
    to learn more about this, google "for loops"
    {                                                 //in steps of one degree
      lockLow = false;           
      Serial.print("motion detected at ");
      Serial.println(" sec");
    takeLowTime = true;

  if(digitalRead(pirPin) == LOW){      

    //we can assume the motion has stopped
      //a new motion sequence has been detected
      lockLow = true;                       
      Serial.print("motion ended at "); //output
      Serial.println(" sec");

Step 4: Use It.

Once your motion activated servo is completed, you can use it to make a lot of different projects. Be creative here! There's a lot of things you can do with it. I used mine to create a motion activated nerf gun. Here's a couple videos of the motion activated nerf gun.

2 People Made This Project!


  • Epilog Challenge 9

    Epilog Challenge 9
  • Paper Contest 2018

    Paper Contest 2018
  • Science of Cooking

    Science of Cooking

We have a be nice policy.
Please be positive and constructive.




I want to use this servo for continuous rotation when motion is detected for 20 seconds. Do I need to make any change in the hardware or with the software. Please help where to make a change. I am a newcomer in this field. Please reply.........

I have had good luck with this setup using the HC-SR501 but found the HC-SR505 (the mini version) unreliable, either overactive or not working at all. I have tried multiple units and have not tried to modify the code/wiring. Someone PLEASE help me to use the mini!

Just play around with the sensitivity and test the module to see if it is faulty. Also make sure you connect left to GND middle to OUT and right to VCC (look up a data sheet)
All the best,
Jacks How2s ( not author of this project!)

thank you so much, u rock

i need help to code 4 servo motor sweep motion activated by PIR. The 1st motor will sweep and return to its original position when PIR detects motion followed by 2nd motor (sweep motion) , 3rd (sweep motion) and the 4th (sweep motion).

how to add LED and BUZZER. And what is the code and schematic diagram?


I would like to make a motion activated cat feeder...could this be used for this? We're my cat can paw at an area near feeder and 3-4 pixies of food drop out...

Hi nice project..

Actually i have made similar project like this, but i used 2 PIR sensor. PIR1 i put at 0 degree and PIR2 put at 180 degree. so when movement detected, servo will move to source movement then SIM900A make call. i have done for it all and success for calling, but the problem is why my servo is vibrate and move by itself? if without SIM900A, servo and pir working normally. is it anything wrong? i used 9600 bps..

Nice one,

You could use this free tool for quickly generate schematics and code snippets: