Motion Sensor

Motion Sensor

A MicroPython code example running on a Raspberry Pi Pico 2 W microcontroller connected to a PIR motion sensor module, an RGB LED module and an OLED display module (SSD1306) on a breadboard to change the LED color and show the status on the display when motion is detected

A PIR motion sensor detects movement by measuring changes in infrared (heat) radiation emitted by surrounding objects. When a warm body (like a human or animal) moves across the field, it intercepts one half of the sensor first and then the other, creating a differential voltage pulse that signals motion. It is used in security alarms and smart home automation.

When running this script in a classroom, cover the sensor completely with a book or folded sheets of paper, then wait for sensor to reset and display “No motion”. Then remove the book and wait for the sensor to detect motion.

Create a new file in Thonny, with file name motion_sensor.py. Copy and paste the code below into the file you created.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
print("\nMotion Sensor")

# DESCRIPTION

# A PIR motion sensor detects movement by measuring changes in 
# infrared (heat) radiation emitted by surrounding objects. 
# When a warm body (like a human or animal) moves across the field, 
# it intercepts one half of the sensor first and then the other, 
# creating a differential voltage pulse that signals motion. 
# It is used in security alarms and smart home automation.

# When running this script in a classroom, cover the sensor completely with
# a book or folded sheets of paper, then wait for sensor to reset and display
# "No motion". Then remove the book and wait for the sensor to detect motion.

# CONNECTIONS REQUIRED

# Connect PIR Motion Sensor (HC-SR501) module 
#   Pins: GND => GND, VCC => VCC, S => GP28

from time import sleep
from machine import Pin
from oled import OLED
from rgbled import RGBLED

motion_sensor = Pin(28, Pin.IN)
oled = OLED(scl_pin=15, sda_pin=14)
rgbled = RGBLED(red_pin=12, green_pin=11, blue_pin=10)

try:
    while True:

        # When motion_sensor value is 1, motion is detected.
        # It resets to 0 after some time if no motion is detected.
        # Wait until value has settled and does not change for one 
        # full second, to reduce sensor noise.
        if motion_sensor.value() == 1:
            oled.print("Motion detected")
            rgbled.set_color(r=255)
        else:
            oled.print("No motion")
            rgbled.set_color(g=255)
        
        sleep(0.1)

except KeyboardInterrupt:
    print("\nInterrupted by user!")

finally:
    oled.reset()
    rgbled.reset()