赤外線センサーでリモコンの赤外線をキャッチします

赤外線センサーでリモコンの赤外線をキャッチ

赤外線センサーでリモコンの赤外線をキャッチして数値データーを読み取ります。

赤外線リモコン受信モジュールOSRB38C9AA

配線図

OUTPUT GP 14     正面に向かって左側
Gnd アース(GND)    中央
Vcc 電源 3V3(OUT)  正面に向かって右側

 

MicroPythonプログラム

import machine
import utime
# pico w 本体のLEDを点灯します
led= machine.Pin('LED', machine.Pin.OUT)
led.on()

# 赤外線リモコンモジュールが接続されたGPIOピン
ir_receiver_pin = machine.Pin(14, machine.Pin.IN)
# リモコンの信号が始まるまで待機させる関数
def wait_for_start_bit():
    while ir_receiver_pin.value() == 1:
        pass 
# リモコンの信号が始まるまで待機
# 赤外線を読み取る関数
def read_ir_signal():
    wait_for_start_bit()

    data = []
    for _ in range(4):
        while ir_receiver_pin.value() == 0:
            pass  # ロー部分(パルス)をスキップ

        start_time = utime.ticks_us()
        while ir_receiver_pin.value() == 1:
            pass  # ハイ部分(パルス)をスキップ

        pulse_duration = utime.ticks_diff(utime.ticks_us(), start_time)
# パルスの長さ
        print (pulse_duration)
# 読み取った信号12進数を表示
        data.append(1 if pulse_duration > 1000 else 0)
# 1000マイクロ秒以上なら1、そうでないなら0

    return data
# 読み取った信号を10進数に変換する関数
def decode_ir_data(data):
    decoded_number = 0
    for bit in data:
        decoded_number = (decoded_number << 1) | bit
    return decoded_number

while True:
    
    print('ok')
    ir_data = read_ir_signal()
# 読み取った赤外線信号の値(2進数) 例[1,0,1,0]
    decoded_number = decode_ir_data(ir_data)
# 読み取った信号を10進数に変換 
    print("Received IR Data:", ir_data)
# 読み取った信号12進数を表示
    print("Decoded Number:", decoded_number)
# 読み取った信号10進数を表示
    utime.sleep_ms(1000)
# 信号を読み取る間隔

while ir_receiver_pin.value() == 0:
ir_receiver_pinの値が0(LOW)である間、pass文が実行され、ループが継続します。
ir_receiver_pinの値が0が終わったときにstart_timed時間の計測を開始します。
while ir_receiver_pin.value() == 1:
ir_receiver_pinの値が1(HIGHT)が終わるまで待ちます。utime.ticks_diff(utime.ticks_us(), start_time)
utimeモジュールを使用して、パルスの終わったの時間と start_time の時間の差をマイクロ秒単位で計算します。
ir_data = read_ir_signal()
 読み取った赤外線信号の値(2進数)です。 例[1,0,1,0]
decoded_number = decode_ir_data(ir_data)
読み取った信号を10進数に変換します。

実行

テレビのリモコンでチャンネル「1」を押しました。
1000以上のパルスを1として[1,1,0,1]になりました。

自由研究

テンテン
テンテン

赤外線パルスの値によって異なる処理(複数のLEDを点灯させるなど)をさせることができます。
赤外線LEDから決められた数値を発信できればリモコンになります。

テレビなどのリモコンは、このパルスの状態を読み取ることで動作しています。メーカーなどによって、いくつかの規格があります。