本記事の内容
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が点灯すれば成功です。(リモコンもパルス照射なので、ボタンを押し続けても取得値が上下することはお忘れなく。)
赤外線感知センサへの仕上げ
赤外線発信、受信機が動作確認できたら、最後に赤外線防犯センサとしての動作確認を行います。

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