本記事の内容
前回は赤外線受信モジュールのテストを兼ねて、簡単な赤外線発信、受信機を作ってみました。
全てのパーツが正常に動作することも確認できたので、次はSeeeduino xiao RP2040とosrb38c9aa赤外線受信モジュール(chq1838d)を用いて、MicroPythonでリモコンの信号解析装置を作製してみました。
必要なもの
配線
下記の通り、前回の記事と同様の配線で問題ありません。赤外線LEDは使用しませんが、今後の機能拡張を見据えて、今回は残しておいています。


プログラムコード
赤外線受信モジュールに接続するピンは、ADC0~2のいずれかを適当に充ててください。
from machine import Pin, ADC
import time
# 赤外線受信モジュールに接続するピン
sens = ADC(0)
while True:
start = time.ticks_us() # マイクロ秒カウンター値を取得
while True:
adc = sens.read_u16() * (3.3 / 65535)
if adc < 1.0:
delta_on = time.ticks_diff(time.ticks_us(), start) # 時差を計算
start = time.ticks_us() # マイクロ秒カウンター値を取得
while True:
adc = sens.read_u16() * (3.3 / 65535)
if adc >= 1.0:
delta_off = time.ticks_diff(time.ticks_us(), start) # 時差を計算
break
if(delta_on < 9999):
print("on/off ={: 5}/{: 5} us".format(delta_on,delta_off))
break
実行していることはシンプルで、
start = time.ticks_us() # マイクロ秒カウンター値を取得
delta_ = time.ticks_diff(time.ticks_us(), start) # 時差をマイクロ秒単位で計算
という計測を、adc<1(赤外線受信あり)と、adc>=1(赤外線受信無し)が切り替わるたびに計測しています。

初回の計測までの待機時間を除くため、10ミリ秒以上のdelta_onは表示から除外させています。
まとめに代えて(実行結果)

タイマーの取得誤差はありますが、取得した信号におおよその周期性が見られました。
次回はこちらの取得結果を応用して、リモコンの中継装置を作製してみたいと思います。Seeeduino xiaoよりもRaspberry Pi Picoの方が人気なので、次はPicoに代えてみるかもしれません。
コメント