はじめに
リモートワークで自宅作業が増えて、作業部屋での作業が増えたところが発端となっています。
- 作業部屋の電気が暗いなあ(蛍光灯の電灯)
- そうだ!LEDの電灯にすれば明るくなるだろう!
- 明るくなったけど赤外線リモコンが時々居なくなる(掃除しようね。だが断る。)
- ええい!紐スイッチ付き赤外線リモコンを作ってやろう(考え方昭和です。)
これならリモコンを探す心配はないし、暗いところでも少々手を振ればひもに当たってわかりやすい。
それに昭和生まれのおじさんには、ひもで電源のオン、オフに慣れています。
電灯は「YAMADA電気 YLLS06L」です。
仕様
プルスイッチを引っ張るごとに順番に全面点灯→常夜灯点灯→電源(消灯)を繰り返すでOKとしました。
部品
部品名 | 個数 |
---|---|
Raspberry Pi pico | 1 |
トランジスタ S8050 | 1 |
赤外線LED(LD271) | 1 |
抵抗 20 | 1 |
抵抗 1K | 1 |
小型キャノピスイッチ(panasonic WS52011)※ | 1 |
※商品によって名称が異なりますが、ここではプルスイッチと呼びます。
回路図
すごくシンプル。
取り敢えず、ブレッドボードで組んでみて赤外線LEDをオン、オフをしてみたら動いていることを確認しました。
普通のLチカだったら光って見えるけど赤外線は見えないので、動いているのかどうかを確認するのが大変です。
赤外線をブザー音に変換するキットが売っていたので、これで確認しました。キットの赤外線センサーに向けて赤外線を点灯するとキットのブザー音がします。とりあえず赤外線LEDが点灯していることはわかります。
だけどこのキットどこで買ったんでしょうか。忘れてしまいました。
赤外線送信ライブラリ
MicroPythonで書けばちょちょいのちょいだと思っていたら、赤外線送信のライブラリがありませんでした。
よく考えれば、赤外線の信号をPythonで作成するのは難しいですね。
ググってみたらRaspberry Pi picoで動く赤外線リモコンのライブラリを発見!
こちらにありました。ありがとうございます。
これでもうバッチリだと思ったら、このライブラリはビット単位でデータを渡してやらないと送信してくれない。
Arduinoのライブラリなんかでしたら、NEC形式の16進で渡してやると送信してくれるものなんかがあります。
そこで、元の記事を参考にして、赤外線受信回路をブレッドボードで組み立てて、受信ライブラリを使ってリモコンの信号を受信して、ビットデータを取得しました。
この部分はメインではないので、記事としては省いています。
ソフトウェア
プログラムはこれです。あまりPythonは得意でないのでこんなもんで、許してください。
しかし、Pythonで書きますと楽で便利です。
ThonnyでRaspberry Pi picoに書き込んでいます。
- プルスイッチのオン、オフを読み込み用にGP3をプルアップで入力モードにします。
- 赤外線LEDをオン、オフするためにGP2を出力モードにします。
- プルスイッチを引っ張った時にRaspberry Pi picoのLEDを点滅するようしています。(GP25)
- 赤外線のデータを定義します。全面点灯(all_list)、常夜灯点灯(small_list)、電源(power_list)
- 起動時にRaspberry Pi picoのLEDを点滅して、起動したことを表します。
- Loop
- プルスイッチを引くごとに全面点灯→常夜灯点灯→電源を赤外線LEDで送信するようにしています。
- プルスイッチのチャタリング対応ということで100mSecのsleepを入れています。
from machine import Pin,PWM
import time
from UpyIrTx import UpyIrTx
print("start python")
pull_sw = Pin(3, machine.Pin.IN, machine.Pin.PULL_UP)
tx_pin = Pin(2, Pin.OUT)
tx = UpyIrTx(0, tx_pin)
led_pin = Pin(25, Pin.OUT)
power_list = [9120, 4560, 570, 570, 570, 1710, 570, 570, 570, 1710, 570, 1710, 570, 570, 570, 570, 570, 1710, 570, 1710, 570, 570, 570, 1710, 570, 570, 570, 570, 570, 570, 570, 1710, 570, 570, 570, 570, 570, 570, 570, 1710, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 1710, 570, 1710, 570, 570, 570, 1710, 570, 1710, 570, 1710, 570, 1710, 570, 1710, 570, 41040, 9120, 4560, 570, 570, 570, 1710, 570, 570, 570, 1710, 570, 1710, 570, 570, 570, 570, 570, 1710, 570, 1710, 570, 570, 570, 1710, 570, 570, 570, 570, 570, 570, 570, 1710, 570, 570, 570, 570, 570, 570, 570, 1710, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 1710, 570, 1710, 570, 570, 570, 1710, 570, 1710, 570, 1710, 570, 1710, 570, 1710, 570]
small_list = [9152, 4576, 572, 572, 572, 1716, 572, 572, 572, 1716, 572, 1716, 572, 572, 572, 572, 572, 1716, 572, 1716, 572, 572, 572, 1716, 572, 572, 572, 572, 572, 572, 572, 1716, 572, 572, 572, 572, 572, 572, 572, 572, 572, 1716, 572, 572, 572, 572, 572, 572, 572, 1716, 572, 1716, 572, 1716, 572, 1716, 572, 572, 572, 1716, 572, 1716, 572, 1716, 572, 572, 572, 41184, 9152, 4576, 572, 572, 572, 1716, 572, 572, 572, 1716, 572, 1716, 572, 572, 572, 572, 572, 1716, 572, 1716, 572, 572, 572, 1716, 572, 572, 572, 572, 572, 572, 572, 1716, 572, 572, 572, 572, 572, 572, 572, 572, 572, 1716, 572, 572, 572, 572, 572, 572, 572, 1716, 572, 1716, 572, 1716, 572, 1716, 572, 572, 572, 1716, 572, 1716, 572, 1716, 572, 572, 572]
all_list = [9136, 4568, 571, 571, 571, 1713, 571, 571, 571, 1713, 571, 1713, 571, 571, 571, 571, 571, 1713, 571, 1713, 571, 571, 571, 1713, 571, 571, 571, 571, 571, 571, 571, 1713, 571, 571, 571, 571, 571, 571, 571, 571, 571, 1713, 571, 571, 571, 571, 571, 1713, 571, 571, 571, 1713, 571, 1713, 571, 1713, 571, 571, 571, 1713, 571, 1713, 571, 571, 571, 1713, 571, 41112, 9136, 4568, 571, 571, 571, 1713, 571, 571, 571, 1713, 571, 1713, 571, 571, 571, 571, 571, 1713, 571, 1713, 571, 571, 571, 1713, 571, 571, 571, 571, 571, 571, 571, 1713, 571, 571, 571, 571, 571, 571, 571, 571, 571, 1713, 571, 571, 571, 571, 571, 1713, 571, 571, 571, 1713, 571, 1713, 571, 1713, 571, 571, 571, 1713, 571, 1713, 571, 571, 571, 1713, 571]
for i in range(3):
led_pin.on()
time.sleep(0.5)
led_pin.off()
time.sleep(0.5)
prev_sw_value = pull_sw.value()
sw_index = 0
led_blink = 0
while True:
if prev_sw_value != pull_sw.value():
led_pin.on() # LEDをONにする
led_blink = 5
if sw_index == 0:
tx.send(all_list)
sw_index += 1
elif sw_index == 1:
tx.send(small_list)
sw_index += 1
elif sw_index == 2:
tx.send(power_list)
sw_index = 0
prev_sw_value = pull_sw.value()
time.sleep(0.1) # 0.1秒待つ
if led_blink == 0:
led_pin.off() # LEDをOFFにする
led_blink -= 1
最後に
ソフトウェア、ハードウェアによる省電力化をしたかったのですが、これをしだすと切った貼ったで動かなくなりそうなので、次回のお楽しみとさせていただきます。
赤外線をメインにモノづくりをしていますので、また何かありましたらアップさせていただきます。
回路とソースはご自身の責任の元自由に使ってください。あくまで自己責任という事でお願いします。
-
haru5ya
さんが
2024/10/14
に
編集
をしました。
(メッセージ: 初版)
ログインしてコメントを投稿する