Introduction: PIR Motion Sensor Tutorial

Picture of PIR Motion Sensor Tutorial

Pyroelectric ("Passive") InfraRed sensors:

'''What is a PIR sensor?'''

PIR sensors allow you to sense motion, almost always used to detect whether a human has moved in or out of the sensors range. They are small, inexpensive, low-power, easy to use and don't wear out. For that reason they are commonly found in appliances and gadgets used in homes or businesses. They are often referred to as PIR, "Passive Infrared", "Pyroelectric", or "IR motion" sensors.

PIRs are basically made of a pyroelectric sensor (which you can see above as the round metal can with a rectangular crystal in the center), which can detect levels of infrared radiation. Everything emits some low level radiation, and the hotter something is, the more radiation is emitted. The sensor in a motion detector is actually split in two halves. The reason for that is that we are looking to detect motion (change) not average IR levels. The two halves are wired up so that they cancel each other out. If one half sees more or less IR radiation than the other, the output will swing high or low.

Along with the pyroelectic sensor is a bunch of supporting circuitry, resistors and capacitors. It seems that most small hobbyist sensors use the BISS0001 ("Micro Power PIR Motion Detector IC"), undoubtedly a very inexpensive chip. This chip takes the output of the sensor and does some minor processing on it to emit a digital output pulse from the analog sensor.

For many basic projects or products that need to detect when a person has left or entered the area, or has approached, PIR sensors are great. They are low power and low cost, pretty rugged, have a wide lens range, and are easy to interface with. Note that PIRs won't tell you how many people are around or how close they are to the sensor, the lens is often fixed to a certain sweep and distance (although it can be hacked somewhere) and they are also sometimes set off by house pets. Experimentation is key!

Some basic stats

These stats are for the PIR sensor in the Adafruit shop which is very much like the Parallax one. Nearly all PIRs will have slightly different specifications, although they all pretty much work the same. If there's a datasheet, you'll want to refer to it

More links!

Step 1: How Does It Work?

Picture of How Does It Work?

PIR sensors are more complicated than many of the other sensors explained in these tutorials (like photocells,FSRs and tilt switches) because there are multiple variables that affect the sensors input and output. To begin explaining how a basic sensor works, we'll use the rather nice diagram below (if anyone knows where it originates plz let me know).

The PIR sensor itself has two slots in it, each slot is made of a special material that is sensitive to IR. The lens used here is not really doing much and so we see that the two slots can 'see' out past some distance (basically the sensitivity of the sensor). When the sensor is idle, both slots detect the same amount of IR, the ambient amount radiated from the room or walls or outdoors. When a warm body like a human or animal passes by, it first intercepts one half of the PIR sensor, which causes a positive differential change between the two halves. When the warm body leaves the sensing area, the reverse happens, whereby the sensor generates a negative differential change. These change pulses are what is detected.

The PIR sensor itself

The IR sensor itself is housed in a hermetically sealed metal can to improve noise/temperature/humidity immunity. There is a window made of IR-transmissive material (typically coated silicon since that is very easy to come by) that protects the sensing element. Behind the window are the two balanced sensors.

Check out the images for more details:

Step 2: Lenses

Picture of Lenses

PIR sensors are rather generic and for the most part vary only in price and sensitivity. Most of the real magic happens with the optics. This is a pretty good idea for manufacturing: the PIR sensor and circuitry is fixed and costs a few dollars. The lens costs only a few cents and can change the breadth, range, sensing pattern, very easily.

In the diagram above, the lens is just a piece of plastic, but that means that the detection area is just two rectangles. Usually we'd like to have a detection area that is much larger. To do that, we use a simple lens such as those found in a camera: they condenses a large area (such as a landscape) into a small one (on film or a CCD sensor). For reasons that will be apparent soon, we would like to make the PIR lenses small and thin and moldable from cheap plastic, even though it may add distortion. For this reason the sensors are actually Fresnel lenses (see image below).

OK, so now we have a much larger range. However, remember that we actually have two sensors, and more importantly we dont want two really big sensing-area rectangles, but rather a scattering of multiple small areas. So what we do is split up the lens into multiple section, each section of which is a fresnel lens.

The different faceting and sub-lenses create a range of detection areas, interleaved with each other. That's why the lens centers in the facets above are 'inconsistent' - every other one points to a different half of the PIR sensing element

Step 3: Connecting to Your PIR

Picture of Connecting to Your PIR

Most PIR modules have a 3-pin connection at the side or bottom. The pinout may vary between modules so triple-check the pinout! It's often silkscreened on right next to the connection. One pin will be ground, another will be signal and the final one will be power. Power is usually 3-5VDC input but may be as high as 12V. Sometimes larger modules don't have direct output and instead just operate a relay in which case there is ground, power and the two switch connections.

The output of some relays may be 'open collector' - that means it requires a pullup resistor. If you're not getting a variable output be sure to try attaching a 10K pullup between the signal and power pins.

An easy way of prototyping with PIR sensors is to connect it to a breadboard since the connection port is 0.1" spacing. Some PIRs come with header on them already, the ones from Adafruit don't as usually the header is useless to plug into a breadboard.

By soldering in 0.1" right angle header, a PIR is easily installed into a breadboard!

Step 4: Testing Your PIR

Picture of Testing Your PIR

Once you have your PIR wired up its a good idea to do a simple test to verify that it works the way you expect. This test is also good for range testing. Simply connect 3-4 alkaline batteries (make sure you have more than 3.5VDC out but less than 6V by checking with your multimeter!) and connect ground to the - pin on your PIR. Power goes to the + pin. Then connect a basic red LED (red LEDs have lower forward voltages than green or blue so they work better with only the 3.3v output) and a 220 ohm resistor (any value from 100 ohm to 1.0K ohm will do fine) to the out pin as shown. Of course, the LED and resistor can swap locations as long as the LED is oriented connection and connects between out and ground

Now when the PIR detects motion, the output pin will go "high" to 3.3V and light up the LED!

Once you have the breadboard wired up, insert batteries and wait 30-60 seconds for the PIR to 'stabilize'. During that time the LED may blink a little. Wait until the LED is off and then move around in front of it, waving a hand, etc, to see the LED light up!

Step 5: Retriggering

Picture of Retriggering

Once you have the LED blinking, look on the back of the PIR sensor and make sure that the jumper is placed in the L position as shown below.

Now set up the testing board again. You may notice that when connecting up the PIR sensor as above, the LED does not stay on when moving in front of it but actually turns on and off every second or so. That is called "non-retriggering".

Now change the jumper so that it is in the H position. If you set up the test, you will notice that now the LED does stay on the entire time that something is moving. That is called "retriggering"

For most applications, "retriggering" (jumper in H position) mode is a little nicer. If you need to connect the sensor to something edge-triggered, you'll want to set it to "non-retriggering" (jumper in L position).

Step 6: Changing Pulse Time and Timeout Length

Picture of Changing Pulse Time and Timeout Length

There are two 'timeouts' associated with the PIR sensor. One is the "Tx" timeout: how long the LED is lit after it detects movement. The second is the "Ti" timeout which is how long the LED is guaranteed to be off when there is no movement. These are not easily changed but if you're handy with a soldering iton it is within reason.

First, lets take a look at the BISS datasheet again (see image below)

Determining R10 and R9 isnt too tough. Unfortunately this PIR sensor below is mislabeled (it looks like they swapped R9 R17). You can trace the pins by looking at the BISS001 datasheet and figuring out what pins they are - R10 connects to pin 3 and R9 connects to pin 7. the capacitors are a little tougher to determine, but you can 'reverse engineer' them from timing the sensor and solving!

For the sensor in the Adafruit shop:

Tx is = 24576 * R10 * C6 = ~1.2 seconds
R10 = 4.7K and C6 = 10nF


Ti = 24 * R9 * C7 = ~1.2 seconds
R9 = 470K and C7 = 0.1uF

You can change the timing by swapping different resistors or capacitors. For a nice tutorial on this, see Keith's PIR hacking page

Step 7: Project Examples

Picture of Project Examples

A USB-powered singing and blinking Mario mushroom (there's a video on the site!)

Rain Umbrellas

Testing a PIR sensor for interfacing to Max/MSP for an interactive garden

A home-made security system using PIR sensors (which is built into a Start Trek panel!)

PIR sensor + Arduino + Servo = automatic cat door!

A PIR-based remote camera trigger (also by Lucky Larry!)

Step 8: Reading PIR Sensors

Picture of Reading PIR Sensors

Connecting PIR sensors to a microcontroller is really simple. The PIR acts as a digital output so all you need to do is listen for the pin to flip high (detected) or low (not detected).

Its likely that you'll want reriggering, so be sure to put the jumper in the H position!

Power the PIR with 5V and connect ground to ground. Then connect the output to a digital pin. In this example we'll use pin 2.

The code is very simple, and is basically just keeps track of whether the input to pin 2 is high or low. It also tracks the state of the pin, so that it prints out a message when motion has started and stopped:

/* PIR sensor tester*/

int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status

void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input


void loop(){
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
pirState = HIGH;
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH){
// we have just turned of
Serial.println("Motion ended!");
// We only want to print on the output change, not state
pirState = LOW;

Don't forget that there are some times when you don't need a microcontroller. A PIR sensor can be connected to a relay (perhaps with a transistor buffer) without a micro!


Sayed sajeed (author)2017-06-20

Would u like to send me the complete instruction of your project my email address is

irfanbsse2060 (author)2017-04-29

i am not using led for output . so how i can use pir sensor and display its output in serial of arduino IDE thanks

Kepp27 made it! (author)2016-02-11

I used the PIR sensor to light on led lights at night if I need to go to my kitchen for some water or the toilet without switching on the normal lights. I connected the PIR sensor to an arduino mini (5v) with a light sensor and 2 leds. The light sensor stops the leds being turned on in daylight. I powered it all with an old nokia mobile charger. Really usefull project.

Kepp27 (author)Kepp272017-04-28

This is the instructable:

NoumanR1 (author)Kepp272016-04-17

would u like to send me the complete instruction of your project my email address is

Kepp27 (author)NoumanR12017-04-28

Sorry for the late reaction. I created an instructable instead:

CanhT2 (author)Kepp272016-09-03

would u like to send me the complete instruction of your project my email address is

Kepp27 (author)CanhT22017-04-28

Sorry for the late reaction. I created an instructable instead:

KirbyM11 (author)Kepp272016-09-12

would u like to send me the complete instruction of your project my email address is

Kepp27 (author)KirbyM112017-04-28

Sorry for the late reaction. I created an instructable instead:

crazytimmy (author)Kepp272016-02-22

Hey Keep27,

I want to do something similar with two PIR sensors and a daylight sensor. My project will be modifying a 12v camper porch light with this idea. I will be using a 12v LED bulb in place of the incandescent. Do you have any links you could share with me so I can learn how to do this? My concern is the 12v supply and these sensors are saying 5v. So I need a regulator to step this down I suspect. I continue my search for a good source for a diagram on how a circuit like this could be wired up, any help is appreciated.

crazytimmy (author)crazytimmy2016-02-22

Ah looks like my best bet is to use a transistor to switch the 12v on and off to the light. Next thing I need to figure out is how to add a light sensor in the mix.

Kepp27 (author)crazytimmy2016-02-24

Hi crazytimmy. Normally you would use some sort of voltage regulator as I understand it. I salvaged an LM 1117adj from an old router in a different project which I'm also going to connect to a 12V lamp output. Normally people suggest using the LM7805 like in this link: but if you are going to use an arduino mini pro or the equivalent to control the PIR sensors and lightsensor, you can just connect the 12v to raw on the arduino (12V is the max.), gnd to gnd and it will supply an 5v output (unless you have the 3.3 version). As long as you don't exceed the max current of the arduino I don't think you will have a problem.

SonalC4 (author)2017-01-19

my pir sensor is giving so random output. E.g. i have connected one LED with load of 220ohms and it is giving me output so anonymous like LED glows for some time then after shuts off and again after some times it glows with out any motion in front of the PIR sensor. I dont understand what ids the problem? can you help.

VenkateshK23 (author)SonalC42017-03-18

try to read about repeatable and non repeateable modes of the PIR sensors and the delays. you may find your answer. goodluck

758860 (author)2017-02-24

I need help on a project, I'm trying to make a soccer ball that lights up whenever you kick it can you help by any chance?

SonalC4 (author)2017-01-19

it is HC sR-501

FerriW (author)2016-11-12

how to combination 4 pir sensor sir? please help

gunnerjax (author)2016-09-30

Would a PIR sensor still work if it was attached to a moving object?

AashishR1 (author)2015-10-12

Hey! can the PIR sensor also detect a bird?

RajeewaW (author)AashishR12016-09-24


3roBVP0s50C4TxeT (author)2016-09-21

Not sure it originated here but take a look at this URL:

MadhawaM1 (author)2016-09-02

can I use a 9V battery instead of 5V for PIR?

Nguyên AnhN (author)2016-07-25

you bought this for 10$ at the Adafruit shop i bought it for about 1.5$ in my country

nmcnaughton (author)2015-05-09

its not working for me. when i plug everything in and upload the sketch the led comes on and stays on. in the serial monitor it says motion detected. my pir does not have a jumper on the back but it does have three pads. there is 2 pots on it and i tried adjusting them but it didnt seem to help. i got the pir on ebay ( if any one can help that would be great

ShashiK3 (author)nmcnaughton2015-08-02

Somewhat similar problem - My sensor detects even there is NO movement. So I changed the pots so that it lowers sensitivity. no help.

At0micCyb0rg (author)ShashiK32016-05-24

Hey, did you find a solution? I have the exact same problem. No matter what tutorial I follow, it always ends up staying at GPIO = HIGH. As in, it is always detecting movement, even though nothing is moving near it.

MichaelM217 (author)At0micCyb0rg2016-06-19

what worked for me is to make sure my ground was also connected to the arduino. the arduino and pir have to have a common ground.

ShashiK3 (author)At0micCyb0rg2016-05-24

I have a small trick - If I wave the tip of the screwdriver in between the potentiometers slightly -then I see some motion detected activity. That's not acceptable -but it works for my demo purposes.

Snick543 (author)nmcnaughton2015-09-02

In the data sheet the pins you have marked are used to set the trigger in either single or repeat modes. I tried using the system in single trigger mode by soldering the 1st and 2nd pins but it seemed to heat up the system. I then soldered the 2nd and 3rd pins(Circled in Red) and it worked all right.

nmcnaughton (author)Snick5432015-09-03

ok i may try soldering them together and see what happens. :)

TrentonN1 (author)nmcnaughton2015-07-29

Same problem and sensor can only get it to turn off after a minute under a box.

SushmithaJ (author)2016-06-06

how can i detect the written text or data using motion sensor? Or is there any sensor to serve the purpose of recording the text written

TonyColeby (author)SushmithaJ2016-06-11

The 'resolution' of the sensor/ lens combo here is WAY too low for what you need. It's pyroelectric so detects thermal energy NOT. Your needs won't be served by a simple electronics project, you'll need a good lens, a great sensor, loads of light and a processor to handle all the data and recognise text. A modern smartphone can do it in real time and even translate it to another language but that costs a lot more than a £1 PIR sensor, an LED and a few wires :)

TonyColeby (author)TonyColeby2016-06-11

Sorry *NOT light* that should read.

TonyColeby (author)SushmithaJ2016-06-11

The 'resolution' of the sensor/ lens combo here is WAY too low for what you need. It's pyroelectric so detects thermal energy NOT. Your needs won't be served by a simple electronics project, you'll need a good lens, a great sensor, loads of light and a processor to handle all the data and recognise text. A modern smartphone can do it in real time and even translate it to another language but that costs a lot more than a £1 PIR sensor, an LED and a few wires :)

NiazM2 (author)2016-05-18

would u like to send me the complete instruction of your project my email

MikeD190 (author)2016-04-20

Can PIR sensors make the distinction between sizes of objects? Ie Could it tell if it was water or a solid going past it. Thanks.

DiyWaterDog (author)2016-04-04

Do you have an instructable of how to drive a 3v relay module with a PIR with no controller? I have tried but it appears the PIR does not supply enough voltage.

kavish laxkar (author)2015-10-06

hi i am using PIR for last 2 months..Now i measured the output voltage and found it is 3.1 volt. (u said its 3.3v) Is my PIR is dead...or is working fine.? plz help

Its fine. May be it is due to movement sense it may very

yash thaker (author)2016-02-18

MY PIR sensor is being detecting continuously even with movement. What to do?

SentryGunner (author)2016-01-01

Hello, can anybody please help me with this? I was wondering if there was some sort of filter that I could place in front of the pir module, that would filter out any low temperature objects and only allow high temperatures to trigger the sensor (body heat). I plan to mount the sensor on a rotating turret, and when it spins I don't want the sensors to be triggered by the moving background (walls, bookshelves, etc.) thanks.

sanjaygupta007 (author)2015-08-16

sanjaygupta007 (author)2015-08-16

Sasando_Rote (author)2014-11-22

how to if i want used 3 PIR for the sensor?

wymand (author)Sasando_Rote2015-05-22

I have python code that monitors multiple sensors on my page.

tonizey (author)2015-01-21

please how can i connect it to a loud alarm and an halogen bulb?

mohamed.h.madyan (author)2014-11-30

Can i adjust the range to be 0.5 feet not 20 ? or it's fixed .

fadecomic (author)2014-10-29

What does it mean if the LED is flashing at a very regular interval? Almost like it's on a timer? It's not random.

About This Instructable




Bio: All-original DIY electronics kits - Adafruit Industries is a New York City based company that sells kits and parts for original, open source hardware electronics projects ... More »
More by adafruit:Adaruit Resistor HelperAdafruit Photo TutorialLogger Shield: Datalogging for Arduino
Add instructable to: