最終更新日
記事公開日

【通過センサ】赤外線LEDとラズPicoで物体の通行を検知する

赤外線LEDを使って、通過センサを作ってみました。

LEDからは、常にダミー信号を送り続けています。

LEDと赤外線受信センサーの間を物体が横切ると、赤外線通信が遮断され、その瞬間を検知する仕組みです。

物体が検知されると、LEDが消灯します。

検知して1秒経つと、またLEDが点灯し、次の検知を開始します。

配線・回路図

通過センサの配線・回路図
赤外線LEDと赤外線受信センサを使った通過センサ

使用パーツ

プログラム(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のように明るさの影響を受けない(照明や人間の影などで誤検知しない)

デメリット

  • 他のセンサーに比べてやや高価
  • 消費電力が大きい

使用例

この記事のURLをコピー

メールアドレスは公開されませんのでご安心ください。また、* が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

関連情報