haru5yaのアイコン画像
haru5ya 2024年10月14日作成 © MIT
製作品 製作品 閲覧数 86
haru5ya 2024年10月14日作成 © MIT 製作品 製作品 閲覧数 86

紐スイッチで簡単操作!赤外線を使ったLED電灯のオンオフ制御

紐スイッチで簡単操作!赤外線を使ったLED電灯のオンオフ制御

はじめに

リモートワークで自宅作業が増えて、作業部屋での作業が増えたところが発端となっています。

  1. 作業部屋の電気が暗いなあ(蛍光灯の電灯)
  2. そうだ!LEDの電灯にすれば明るくなるだろう!
  3. 明るくなったけど赤外線リモコンが時々居なくなる(掃除しようね。だが断る。)
  4. ええい!紐スイッチ付き赤外線リモコンを作ってやろう(考え方昭和です。)

それでできたのがこれ。
紐スイッチ_横から

これならリモコンを探す心配はないし、暗いところでも少々手を振ればひもに当たってわかりやすい。

それに昭和生まれのおじさんには、ひもで電源のオン、オフに慣れています。

電灯は「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で動く赤外線リモコンのライブラリを発見!

こちらにありました。ありがとうございます。

MicroPythonで赤外線リモコンの簡単制御

これでもうバッチリだと思ったら、このライブラリはビット単位でデータを渡してやらないと送信してくれない。
Arduinoのライブラリなんかでしたら、NEC形式の16進で渡してやると送信してくれるものなんかがあります。

そこで、元の記事を参考にして、赤外線受信回路をブレッドボードで組み立てて、受信ライブラリを使ってリモコンの信号を受信して、ビットデータを取得しました。

この部分はメインではないので、記事としては省いています。

ソフトウェア

プログラムはこれです。あまりPythonは得意でないのでこんなもんで、許してください。
しかし、Pythonで書きますと楽で便利です。

ThonnyでRaspberry Pi picoに書き込んでいます。

  1. プルスイッチのオン、オフを読み込み用にGP3をプルアップで入力モードにします。
  2. 赤外線LEDをオン、オフするためにGP2を出力モードにします。
  3. プルスイッチを引っ張った時にRaspberry Pi picoのLEDを点滅するようしています。(GP25)
  4. 赤外線のデータを定義します。全面点灯(all_list)、常夜灯点灯(small_list)、電源(power_list)
  5. 起動時にRaspberry Pi picoのLEDを点滅して、起動したことを表します。
  6. Loop
    1. プルスイッチを引くごとに全面点灯→常夜灯点灯→電源を赤外線LEDで送信するようにしています。
    2. プルスイッチのチャタリング対応ということで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

最後に

ソフトウェア、ハードウェアによる省電力化をしたかったのですが、これをしだすと切った貼ったで動かなくなりそうなので、次回のお楽しみとさせていただきます。
赤外線をメインにモノづくりをしていますので、また何かありましたらアップさせていただきます。

回路とソースはご自身の責任の元自由に使ってください。あくまで自己責任という事でお願いします。

1
haru5yaのアイコン画像
M5Stack好きです。
  • haru5ya さんが 2024/10/14 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する