Bird
Raised Fist0
Arduinoprogramming~10 mins

PIR motion sensor in Arduino - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - PIR motion sensor
Start
↓
Initialize PIR sensor pin
↓
Read PIR sensor value
↓
Is motion detected?
No→Wait and read again
Yes↓
Turn ON LED or output
↓
Wait some time
↓
Turn OFF LED or output
↓
Loop back to read sensor
The program initializes the PIR sensor pin, reads its value repeatedly, and if motion is detected, it turns on an LED for a short time before turning it off and continuing to check.
Execution Sample
Arduino
int pirPin = 2;
int ledPin = 13;

void setup() {
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int val = digitalRead(pirPin);
  if (val == HIGH) {
    digitalWrite(ledPin, HIGH);
    delay(1000);
    digitalWrite(ledPin, LOW);
  }
}
This code reads the PIR sensor on pin 2 and turns on the LED on pin 13 for 1 second when motion is detected.
Execution Table
StepActionpirPin ValueCondition (val == HIGH)LED StateDelay
1Read PIR sensorLOWFalseOFF0
2Check conditionLOWFalseOFF0
3No motion detected, loop againLOWFalseOFF0
4Read PIR sensorHIGHTrueOFF0
5Turn LED ONHIGHTrueON0
6Wait 1000 msHIGHTrueON1000
7Turn LED OFFHIGHTrueOFF0
8Loop back to read sensorUNKNOWNUnknownOFF0
💡 The loop runs forever, reading sensor and turning LED on/off when motion is detected.
Variable Tracker
VariableStartAfter Step 1After Step 4After Step 5After Step 7Final
valundefinedLOWHIGHHIGHHIGHundefined
LED StateOFFOFFOFFONOFFOFF
Key Moments - 3 Insights
Why does the LED turn on only when val == HIGH?
Because the PIR sensor outputs HIGH when motion is detected, as shown in execution_table rows 4 and 5 where val is HIGH and LED turns ON.
What happens if the PIR sensor reads LOW?
The condition val == HIGH is false (rows 1-3), so the LED stays OFF and the program loops to read the sensor again.
Why is there a delay after turning the LED ON?
The delay keeps the LED ON for 1 second so the motion detection is visible, as shown in step 6 before turning LED OFF in step 7.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the LED state at step 5?
ABlinking
BOFF
CON
DUndefined
💡 Hint
Check the LED State column at step 5 in the execution_table.
At which step does the PIR sensor detect motion (val == HIGH)?
AStep 4
BStep 7
CStep 1
DStep 3
💡 Hint
Look at the pirPin Value and Condition columns in the execution_table.
If the delay(1000) is removed, what changes in the execution_table?
ALED stays ON indefinitely
BLED turns ON and OFF immediately without visible delay
CPIR sensor stops detecting motion
DNo change at all
💡 Hint
Consider the Delay column and how it affects LED State timing.
Concept Snapshot
PIR motion sensor code:
- Initialize sensor pin as INPUT
- Read sensor value in loop
- If value is HIGH (motion detected), turn LED ON
- Wait some time (delay)
- Turn LED OFF
- Repeat forever
Full Transcript
This program uses a PIR motion sensor connected to pin 2 and an LED on pin 13. It reads the sensor value repeatedly. When the sensor detects motion, it outputs HIGH. The program checks if the sensor value is HIGH. If yes, it turns the LED ON, waits 1 second, then turns the LED OFF. If no motion is detected (sensor LOW), the LED stays OFF. This loop runs forever, continuously checking for motion and lighting the LED when motion is detected.

Practice

(1/5)
1. What does a PIR motion sensor detect in an Arduino project?
easy
A. Light intensity changes
B. Sound levels in the environment
C. Movement by sensing infrared changes
D. Temperature variations

Solution

  1. Step 1: Understand PIR sensor function

    A PIR sensor detects motion by sensing changes in infrared radiation emitted by objects.
  2. Step 2: Compare with other options

    Sound, temperature, and light sensors detect different things, not motion via infrared.
  3. Final Answer:

    Movement by sensing infrared changes -> Option C
  4. Quick Check:

    PIR sensor = Motion detection [OK]
Hint: PIR sensors detect heat movement, not sound or light [OK]
Common Mistakes:
  • Confusing PIR with sound or light sensors
  • Thinking PIR detects temperature directly
2. Which Arduino code line correctly reads the PIR sensor connected to digital pin 7?
easy
A. int motion = digitalWrite(7);
B. int motion = digitalRead(7);
C. int motion = analogRead(7);
D. int motion = pinMode(7, INPUT);

Solution

  1. Step 1: Identify correct function to read digital input

    digitalRead(pin) reads the digital value from a pin, suitable for PIR sensor output.
  2. Step 2: Eliminate incorrect functions

    analogRead reads analog pins, digitalWrite sets output, pinMode sets pin mode but does not read value.
  3. Final Answer:

    int motion = digitalRead(7); -> Option B
  4. Quick Check:

    Use digitalRead for digital sensor input [OK]
Hint: Use digitalRead to get sensor state from digital pins [OK]
Common Mistakes:
  • Using analogRead on digital pin
  • Using digitalWrite instead of digitalRead
  • Confusing pinMode with reading value
3. What will be the output on the Serial Monitor when the following Arduino code runs and the PIR sensor detects motion?
const int pirPin = 8;
void setup() {
  pinMode(pirPin, INPUT);
  Serial.begin(9600);
}
void loop() {
  int motion = digitalRead(pirPin);
  if (motion == HIGH) {
    Serial.println("Motion detected!");
  } else {
    Serial.println("No motion.");
  }
  delay(1000);
}
medium
A. Motion detected! printed every second when motion is present
B. No output because Serial.begin is missing
C. Motion detected! printed once and then stops
D. Syntax error due to missing semicolon

Solution

  1. Step 1: Analyze the loop behavior

    The loop reads the PIR sensor pin every second and prints "Motion detected!" if motion is HIGH, else "No motion.".
  2. Step 2: Check Serial setup and output

    Serial.begin(9600) is correctly called in setup, so output will appear on Serial Monitor continuously.
  3. Final Answer:

    Motion detected! printed every second when motion is present -> Option A
  4. Quick Check:

    Serial prints motion status each second [OK]
Hint: Loop prints sensor state every second with delay(1000) [OK]
Common Mistakes:
  • Thinking Serial.begin is missing
  • Assuming output prints only once
  • Confusing syntax errors
4. Identify the error in this Arduino code snippet using a PIR sensor on pin 9:
void setup() {
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  int motion = digitalRead(9);
  if (motion == HIGH) {
    Serial.println("Motion detected");
  }
  delay(500);
}
medium
A. Pin 9 should be set as INPUT, not OUTPUT
B. Serial.begin should be in loop()
C. digitalRead cannot be used on pin 9
D. Missing semicolon after Serial.println

Solution

  1. Step 1: Check pinMode for sensor input

    PIR sensor output is digital input, so pin 9 must be set as INPUT, not OUTPUT.
  2. Step 2: Verify other code parts

    Serial.begin is correctly in setup, digitalRead works on pin 9, and semicolon is present.
  3. Final Answer:

    Pin 9 should be set as INPUT, not OUTPUT -> Option A
  4. Quick Check:

    Input pins must use pinMode(INPUT) [OK]
Hint: Set sensor pins as INPUT, not OUTPUT [OK]
Common Mistakes:
  • Setting sensor pin as OUTPUT
  • Moving Serial.begin to loop
  • Ignoring pinMode settings
5. You want to turn on an LED connected to pin 13 only when the PIR sensor on pin 2 detects motion. Which Arduino code snippet correctly implements this behavior?
hard
A. pinMode(2, INPUT); pinMode(13, OUTPUT); if (digitalRead(2) == LOW) { digitalWrite(13, HIGH); }
B. pinMode(2, OUTPUT); pinMode(13, INPUT); if (digitalRead(13) == HIGH) { digitalWrite(2, HIGH); }
C. pinMode(2, INPUT); pinMode(13, OUTPUT); if (digitalRead(2) == HIGH) { digitalWrite(13, HIGH); }
D. pinMode(2, INPUT); pinMode(13, OUTPUT); digitalWrite(13, digitalRead(2));

Solution

  1. Step 1: Set correct pin modes

    Pin 2 is sensor input, so INPUT; pin 13 is LED output, so OUTPUT.
  2. Step 2: Use digitalRead to control LED

    digitalWrite(13, digitalRead(2)) sets LED HIGH when sensor reads HIGH, LOW otherwise.
  3. Step 3: Eliminate other options

    pinMode(2, OUTPUT); pinMode(13, INPUT); if (digitalRead(13) == HIGH) { digitalWrite(2, HIGH); } has wrong pin modes and logic. pinMode(2, INPUT); pinMode(13, OUTPUT); if (digitalRead(2) == HIGH) { digitalWrite(13, HIGH); } turns LED on for motion but lacks else clause to turn off when no motion. pinMode(2, INPUT); pinMode(13, OUTPUT); if (digitalRead(2) == LOW) { digitalWrite(13, HIGH); } reverses logic.
  4. Final Answer:

    pinMode(2, INPUT); pinMode(13, OUTPUT); digitalWrite(13, digitalRead(2)); -> Option D
  5. Quick Check:

    LED state = PIR sensor state [OK]
Hint: Write LED pin to sensor pin state directly for simplicity [OK]
Common Mistakes:
  • Setting sensor pin as OUTPUT
  • Reversing HIGH/LOW logic
  • Confusing input/output pin modes
  • Omitting else clause to turn off LED
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard