【Seeeduino xiao】赤外線受信モジュールでリモコンの信号解析装置を作製

ir-receiver-top Seeeduino xiao

本記事の内容

前回は赤外線受信モジュールのテストを兼ねて、簡単な赤外線発信、受信機を作ってみました。

全てのパーツが正常に動作することも確認できたので、次はSeeeduino xiao RP2040とosrb38c9aa赤外線受信モジュール(chq1838d)を用いて、MicroPythonでリモコンの信号解析装置を作製してみました。

必要なもの

配線

下記の通り、前回の記事と同様の配線で問題ありません。赤外線LEDは使用しませんが、今後の機能拡張を見据えて、今回は残しておいています。

Xiao-ir
Xiao-ir2

プログラムコード

赤外線受信モジュールに接続するピンは、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に代えてみるかもしれません。

コメント