【赤外線センサ】Seeeduino xiao RP2040でosrb38c9aa赤外線受信モジュールを使用する

Xiao-ir-top Seeeduino xiao

本記事の内容

Seeeduino xiao RP2040と赤外線LED、osrb38c9aa赤外線受信モジュール(chq1838d)を用いて、MicroPythonで赤外線発信、受信機を作成しました。

後段では両者を組み合わせて、「赤外線感知センサ」の作成方法を紹介しています。

必要なもの

赤外線LEDは秋月の5mm赤外線LED 940nm(OSI5FU5111C-40)を購入しました。順電圧が1.35V(@100mA)なので、今回は33Ω抵抗も用意しています。

配線

一つ目の配線図とは異なりますが、赤外線受信モジュールは以下の写真のものを使用しました。左からOUT、GND、VCCの順になります。

OUTの電圧値はADC変換をして取得する必要があるので、Seeeduino xiaoの26ピンに繋ぎます。そのほか、VCCを3V3、赤外線LEDを適当に繋いで完成です。

赤外線発信(発光)テスト

まずは、赤外線LEDと33Ω抵抗を繋いでテストします。

from machine import Pin, ADC, PWM

# 赤外線LEDを接続するピン
pwm = PWM(Pin(1, Pin.OUT))
f = 38000
pwm.freq(f)

while True:
    # PWMのDuty比をHIGH:1/3、LOW:2/3
    pwm.duty_u16(0x5555)

人間の目では赤外線が見れないので、赤外線LEDが光っているかどうかを確かめるには、スマホなどのカメラを使用して確認する必要があります。(光っていないからと言って、間違ってLEDを捨ててしまわないように、、、)

また、赤外線受信モジュールは自然光のノイズを弾くため、38kHz付近の赤外線パルスしか受信しない仕組みになっています。後続の赤外線感知センサ作成のため、PWM制御で発光させています。

赤外線受信テスト

LEDの配線はいったん外して(私の場合はスイッチを切って)、以下のプログラムコードをSeeeduino xiaoで実行します。

from machine import Pin, ADC, PWM
from ws2812 import WS2812
import utime

power = Pin(11,machine.Pin.OUT)
power.value(1)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
led = WS2812(12,1)

# 赤外線受信センサーに接続するピン
sens = ADC(0)

# 赤外線LEDを接続するピン
pwm = PWM(Pin(1, Pin.OUT))
f = 38000
pwm.freq(f)

while True:
    # PWMのDuty比をHIGH:1/3、LOW:2/3
    pwm.duty_u16(0x5555)
    adc = sens.read_u16() * (3.3 / 65535)
    print(adc)

    # (赤外線感知無し)
    if adc > 1.0:
        led.pixels_fill(GREEN)
        led.pixels_show()
        utime.sleep(0.2)

    # (赤外線感知あり)
    else:
        led.pixels_fill(RED)
        led.pixels_show()
        utime.sleep(0.2)

本赤外線センサは、赤外線を感知するとVCCの出力が下がるため、ADC変換を使用して、VCCの値を毎秒取得するコードとなっています。

赤外線受信モジュールの向きが逆ですが、お気になさらず、、、

テレビなどのリモコンを赤外線センサの前に置いて、ボタンを押すと値が下がって赤色LEDが点灯すれば成功です。(リモコンもパルス照射なので、ボタンを押し続けても取得値が上下することはお忘れなく。)

赤外線感知センサへの仕上げ

赤外線発信、受信機が動作確認できたら、最後に赤外線防犯センサとしての動作確認を行います。

ir-result

本プログラムコードでは、遮断解除直後は赤色LEDが正常に点灯しましたが、すぐに緑色(ADC入力値が1.4ほど)となってしまいました。おそらくDuty比の調整などで改善できると思います。

コメント