- 最終更新日
- 記事公開日
【通過センサ】赤外線LEDとラズPicoで物体の通行を検知する
赤外線LEDを使って、通過センサを作ってみました。
LEDからは、常にダミー信号を送り続けています。
LEDと赤外線受信センサーの間を物体が横切ると、赤外線通信が遮断され、その瞬間を検知する仕組みです。
物体が検知されると、LEDが消灯します。
検知して1秒経つと、またLEDが点灯し、次の検知を開始します。
配線・回路図
使用パーツ
- 5mm赤外線LED(OSI5FU5111C-40)- 秋月電子通商
- 赤外線リモコン受信モジュール(OSRB38C9AA)- 秋月電子通商
- Raspberry Pi Pico
プログラム(MicroPython)
# ハードウェア関連のライブラリを読み込み
from machine import Pin, ADC, PWM
# 時間関連のライブラリを読み込み
import time
# ステータス確認用LED
# ラズパイPico本体に搭載されているLEDを出力ピンに設定
led = Pin(25, Pin.OUT)
# 赤外線受信センサーに接続するピン
# アナログ-デジタル変換を行うピンをADC0(31Pin)に設定
sens = ADC(0)
# 赤外線LEDを接続するピン
# PWM制御を行うピンをGP17(22Pin)に設定
pwm = PWM(Pin(17, Pin.OUT))
# PWM制御の動作周波数(一秒間に繰り返す波の数)を設定
# 値を小さくすると感度が上がる
f = 60000
pwm.freq(f)
# 永久リピート
while True:
# PWM制御にて、赤外線LEDからダミー信号を発信
# PWMのデューティー比(HIGHとLOWの比率)をHIGH:1/3、LOW:2/3に設定
# 16bitの最大値 = FFFF(16進数)= 65535(10進数)
# 65535 * 0.3333 = 21845(10進数)= 5555(16進数)
pwm.duty_u16(0x5555)
# 赤外線LEDからのダミー信号を受信して、AD変換
# read_u16() ・・・アナログ値を読込み[0-65535]の整数を返す関数
# 16bit・2進数の最大値:1111111111111111 ⇒ 10進数の最大値:65535
# 電圧の最大値3.3Vを「65535」に置き換え
adc = sens.read_u16() * (3.3 / 65535)
# 赤外線受信センサーがの値が1.0Vより小さいときに実行
# (赤外線通信を受信している)
if adc > 1.0:
# ステータス確認用LEDを点灯
led.value(1)
# 赤外線受信センサーがの値が1.0Vより大きいときに実行
# (赤外線通信が遮断されている)
else:
# ステータス確認用LEDを消灯
led.value(0)
# 赤外線通信を区切る
pwm.duty_u16(0)
# 次の検知をはじめるまでの待機時間
time.sleep(1)
技術解説
この通過センサは、「赤外線リモコンの送受信」の技術を利用したものです。
メリット
- フォトリフレクタよりも長い距離を検知できる
- CDSのように明るさの影響を受けない(照明や人間の影などで誤検知しない)
デメリット
- 他のセンサーに比べてやや高価
- 消費電力が大きい