Photo Interrupter

A MicroPython code example running on a Raspberry Pi Pico 2 W microcontroller connected to a photo interrupter module, an RGB LED module and an OLED display module (SSD1306) on a breadboard to increment the count on the display each time the photo interrupter light beam is interrupted
A photo interrupter module sends infrared light beam from an emitter to a receiver (the two black blocks on the module), and detects when this beam is blocked. It is used to detect end-of-travel in 3D printers, CNC machines and robots. It is also used to count the pulses of a slotted disc rotating to calculate motor or wheel speed in robotics and smart cars. In a printer, it detects when a paper is present.
Create a new file in Thonny, with file name photo_interrupter.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
print("\nPhoto Interrupter")
# DESCRIPTION
# A photo interrupter module sends infrared light beam from an emitter to a receiver
# (the two black blocks on the module), and detects when this beam is blocked.
# It is used to detect end-of-travel in 3D printers, CNC machines and robots. It is
# also used to count the pulses of a slotted disc rotating to calculate motor or wheel
# speed in robotics and smart cars. In a printer, it detects when a paper is present.
# CONNECTIONS REQUIRED
# Connect Photo Interrupter (KY-010) module (labeled 'IR Switch')
# Pins: GND => GND, VCC => VCC, S => GP28
from machine import Pin
from oled import OLED
from rgbled import RGBLED
from buzzer import Buzzer
sensor = Pin(28, Pin.IN, Pin.PULL_UP)
oled = OLED(scl_pin=15, sda_pin=14)
buzzer = Buzzer(pwm_pin=16)
rgbled = RGBLED(red_pin=12, green_pin=11, blue_pin=10)
counter = 0
try:
while True:
rgbled.reset()
# loop while nothing detected
while sensor.value() == 0: pass
# sensor value is no longer zero => object detected
counter += 1
oled.print(f"Counter: {counter}")
rgbled.set_color(b=255)
buzzer.play_tone(600)
# loop while object is still present
while sensor.value() == 1: pass
except KeyboardInterrupt:
print("\nInterrupted by user!")
finally:
oled.reset()
rgbled.reset()
buzzer.reset()