赤外線センサーで発信機の赤外線をキャッチし数値データーごとにLEDを点灯
赤外線センサーで発信機の赤外線をキャッチし数値データーごとに3つのLEDを点灯させます。
赤外線リモコン受信モジュールOSRB38C9AA
配線図
OUTPUT GP 14 正面に向かって左側
Gnd アース(GND) 中央
Vcc 電源 3V3(OUT) 正面に向かって右側
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) # 信号を読み取る間隔
実行
自由研究
テンテン
赤外線パルスの値によって複数のLEDを点灯させました。
他の異なる処理(モーターなどを動かす。)もできます。