raspberry pi zero 2Wを入手したので備忘録として下記ます。
前回はLircで赤外線リモコンを作成しようとしましたが、動作しなかったので今夏は、pythonのプログラムを作成してみました。
回路構成は前回と同様です。
★受信はできたが、送信は信号の幅のばらつきが大きく断念。
別途pico等のOSを実装していないマイコンで試そうと思います。
pythonプログラム
赤外線を受信したら、同じ信号を10秒後に送信するようにしました。
import pigpio
import time
# 赤外線送信ピンのGPIO番号
IR_GPIO_TX_PIN = 18
# 赤外線受信ピンのGPIO番号
IR_GPIO_RX_PIN = 17 # GPIO17に変更
# Raspberry PiのGPIOに接続
pi = pigpio.pi()
def capture_ir_signal():
if not pi.connected:
print("pigpioデーモンに接続できません")
return []
# GPIO17をプルアップ設定
pi.set_pull_up_down(IR_GPIO_RX_PIN, pigpio.PUD_UP)
# キャプチャするパルスを保存するリスト
pulses = []
# コールバック関数を定義して、受信したパルスをリストに追加
def cbf(gpio, level, tick):
if pulses:
pulses[-1][1] = pigpio.tickDiff(pulses[-1][1], tick) # 前のエントリの持続時間を計算して更新
pulses.append([level, tick]) # 新しいエントリを追加
cb = pi.callback(IR_GPIO_RX_PIN, pigpio.EITHER_EDGE, cbf)
# キャプチャを開始
print("赤外線信号を受信中... 持続時間: 5秒")
time.sleep(5)
# キャプチャを終了し、コールバックを解除
cb.cancel()
# 最初のエントリ(持続時間が設定されていない)を削除
if pulses and pulses[0][1] == pulses[-1][1]:
pulses.pop(0)
return pulses
def send_ir_signal(pulses):
if not pi.connected:
print("pigpioデーモンに接続できません")
return
# パルス列からカスタム波形を作成
for pulse in pulses:
level = pulse[0]
duration = pulse[1]
if level == 0:
pi.hardware_PWM(IR_GPIO_TX_PIN, 38000, 500000)
time.sleep(duration/1000000)
else:
pi.hardware_PWM(IR_GPIO_TX_PIN, 0, 0)
time.sleep(duration/1000000)
pi.hardware_PWM(IR_GPIO_TX_PIN, 0, 0) #stop
pi.stop()
if __name__ == "__main__":
print("赤外線信号をキャプチャします...")
captured_pulses = capture_ir_signal()
print(f"キャプチャしたパルス: {captured_pulses}")
time.sleep(10)
if captured_pulses:
print("赤外線信号を再送信します...")
send_ir_signal(captured_pulses)
赤外線リモコンの受信確認
LED照明のリモコン信号を受信してみました。
受信した信号はL:3370us,H:1070us,L:425us,H:1315us,L:425us,H:425us…でした。
波形で確認します。拡大してH/Lの幅を確認したところほぼあっていました。
赤外線リモコンの送信確認
赤外線リモコンは、先ほど受信したLの期間、38khzで変調した信号を送信します。
トランジスタのベース側の信号(GPIO17)を見てみます。
下記のような波形を出力しています。

それらしい波形を出力しています。
それぞれの信号の長さを確認してみます。


リーダの先頭部分(受信時は約3.4ms)は、4.2msでした。約1ms長いですね。
次のHだった部分(受信時:約1ms)は、2.4ms
次のLだった部分(受信時:425us)は、758us
次のHだった部分(受信時:1.3ms)は、1.8ms
次のLだった部分(受信時:425us)は、708us
次のHだった部分(受信時:425us)は、769us
全体的に長めでばらつきが大きいようです。
38kHzの変調信号は、ハードウェアPWMで出力しているので、ばらつきなく きれいに出ているようですが、各信号の幅は正しく出力できていませんでした。
実際に赤外線LEDで出力してみましたが、照明を制御することはできませんでした。
結論
まだ赤外線リモコンは動きそうにありません。
いったん中断します。

