赤外線センサーで発信機の赤外線をキャッチし数値データーごとにLEDを点灯させます。

赤外線センサーで発信機の赤外線をキャッチし数値データーごとにLEDを点灯

赤外線センサーで発信機の赤外線をキャッチし数値データーごとに3つのLEDを点灯させます。

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

配線図

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

 

 

MicroPythonプログラム

import machine
import utime

led1_pin = machine.Pin(20, machine.Pin.OUT)
led2_pin = machine.Pin(19, machine.Pin.OUT)
led3_pin = machine.Pin(18, machine.Pin.OUT)
led1_pin.on()
led2_pin.on()
led3_pin.on()
# 一定時間待機
utime.sleep(2)

# LED1を消灯させる
led1_pin.off()
led2_pin.off()
led3_pin.off()

#control_value = 2

def led_on(control_value):
# control_value数値によって異なる動作を行う
    if control_value == 12:
        led1_pin.on()
        utime.sleep(1)
        led1_pin.off()
    elif control_value == 10:
        led2_pin.on()
        utime.sleep(1)
        led2_pin.off()
    elif control_value == 8:
        led3_pin.on()
        utime.sleep(1)
        led3_pin.off()

# 赤外線リモコンモジュールが接続された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)
        data.append(1 if pulse_duration > 1000 else 0)  # 1000マイクロ秒以上なら1、そうでないなら0

    return data

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()
    decoded_number = decode_ir_data(ir_data)
    led_on (decoded_number)
    print("Received IR Data:", ir_data)
    print("Decoded Number:", decoded_number)
    utime.sleep_ms(1000)  # 信号を読み取る間隔

 

ir_data = read_ir_signal()
 読み取った赤外線信号の値(2進数)です。 例[1,0,1,0]
decoded_number = decode_ir_data(ir_data)
読み取った信号を10進数に変換します。

実行

 

発信機のリモコンで「10」スイッチを押しました。
10のLEDが点灯しました。

自由研究

テンテン
テンテン

赤外線パルスの値によって複数のLEDを点灯させました。
他の異なる処理(モーターなどを動かす。)もできます。