楽器などを保管するときに湿度というのはとても厄介である。高すぎてもダメで低すぎてもダメ。
ギターの場合は湿度を50%程度に保たなければならない。そのため我が家はSwitchBotのスマートスイッチとスマートプラグを使った除湿機の自動制御を行っていた。
だがスマートスイッチの難点は両面テープを使った貼り付け方法だ。つい最近、スイッチ部にちょうど膝が当たり、スイッチを吹き飛ばしてしまった。
いつか取れると思っていたけど自分で蹴飛ばしてしまうとは…
今回はRaspberryPi Picoを使い、赤外線リモコンから除湿機を制御できるようにDIYしてみた。
これが実現すれば、SwitchBotやNatureRemoなどのスマートリモコンから除湿機が制御できるようになる。
除湿機をどのように制御するか
私が10年以上愛用している除湿機はコロナのCD-P6311という形式だ。これは当然廃盤になっていて、最新のものだと下のリンクのような形式になるだろう。
今回紹介する方法は申し訳ないが、古い形式の除湿機改造となってしまう。最新版もおそらく同じ方法で改造可能だと思うが確証は特にないので、臨機応変に対応できそうな方だけ真似してほしい。
除湿機のスイッチ部には小型スイッチが内蔵していて、ここのスイッチを遠隔でショートするのが今回の目的である。
遠隔でショートする方法は色々あるが今回は、RaspberryPi Picoに赤外線センサーを接続し、赤外線リモコンをトリガーにし、RaspberryPi Picoの出力からリレーを動作させ、リレー接点で端子をショートさせる、という方法を選んだ。
必要なモノ
私が使用した材料はこちら。
RaspberryPi Picoとリレーはamazonで購入できる。
リモコンはダイソーに売っているリモコン付きLEDライトのリモコンを流用した。このリモコンはネット上で解析され尽くしているから電子工作にピッタリだ。
ケーブルは脱着コネクターがあると便利。
赤外線センサーは単品で買えるなら単品で買おう。ダイソーLEDライトを分解して赤外線ユニットを取り出すという手もありかも。
除湿機の分解手順
10年以上使っている除湿機はかなり汚かった。
掃除しながら分解しているが、取りきれていない汚れもあるから写真は閲覧注意でお願いしたい。
そして分解する前は必ずコンセント抜いて作業すること!
全面パネルを外す
タンクを外しパネル下部に指を突っ込めば、爪2箇所に触れられる。この爪を外せば全面パネル外れる。
外装を外す
左側の外装はネジ8本で固定されている。プラスドライバーでネジを外していこう。
次は右側外装を外す。こちらはネジが4本で固定されている。
電子回路を取り出す
上面パネルは正面右側にネジ1本で固定されている。これを緩めたあと、上面パネルとスイッチ回路を固定しているネジ2本を取り外すと上面パネルは外れる。
最後に電子回路を取り外す。回路は3本のネジと各コネクタがつながっているので慎重に抜いていく。
電子回路とスイッチ回路を繋ぐコードは外し方がわからず取り外しできなかった。コードを引きちぎらないように注意してもらいたい。
回路を組む
除湿機の電子回路にジャンパー線を取り付け
回路を動かすためのDC5Vは、除湿機の電子回路にジャンパー線を取り付けて確保する。
次にトリガーとなるジャンパー線をスイッチ回路の裏面に取り付けする。
ジャンパー線を取り付けた様子がこちら。
RaspberryPi Picoの回路作成
RaspberryPi Picoの回路はこんな感じになった。
除湿機の電子回路からきたジャンパー線のDC5V+はRaspberryPi Picoの39ピン(VSYS)とリレーの電源+、DC5V-は38ピン(GND)とリレー電源-に接続する。
RaspberryPi Picoの5ピン(GP3)を信号トリガーと設定し、5ピンとリレーの信号トリガーを接続する。
赤外線ユニットの入力はRaspberryPi Picoの4ピン(GP2)に接続し、電源はRaspberryPi Picoの36ピン(3.3Vout)と3ピン(GND)に接続する。
リレーのNOとCOMはスイッチ回路のジャンパー線と接続する。
RaspberryPi Picoの設定
ダイソーリモコンの電源ボタンを押している間だけトリガーがONとなるプログラムを作成していく。
https://github.com/peterhinch/micropython_ir
こちらのサイトからCode → Download ZIPと進み、ZIPファイルをダウンロードする。
RaspberryPi Pico内に「lib」という名称のフォルダを作成し、さきほどダウンロードしたZIPファイルの中の「ir_rx」というフォルダを「lib」フォルダ内にアップロードする。
RaspberryPi Pico内に下記のコードを記載した「main.py」を保存する。
「main.py」のコード
import time,machine,utime
from machine import Pin
from ir_rx.nec import NEC_8
# オプトサプライ赤外線リモコンのデータと対応するボタンのメッセージ
keydata = {
0x12:"Power button",
}
last_code=0xFF
last_ticks = time.ticks_ms()
# 赤外線の信号を受信時に呼び出されるコールバック関数
def callback(data, addr, ctrl):
global last_code
global last_ticks
last_ticks = time.ticks_ms() # callback関数が呼ばれた最後の時間を保存
if data < 0: # repeat code -> 同じキーが繰り返しが押されたときの処理
print(keydata[last_code])
else:
last_code = data
#print(keydata[data]) # キーデータに対応する文字列を表示します
led = machine.Pin(3, machine.Pin.OUT)
# 2番ピンを使用するようにして、NEC 8bitクラスを初期化。上記のcallback関数を登録します。
ir = NEC_8(Pin(2, Pin.IN), callback)
# 無限ループ、信号を受信するとcallback関数が呼ばれます。
state = False
state_cnt = 0
threshold = 400 # コールバック関数が最後に呼ばれて400ms経つと消灯処理を行います
while True:
time.sleep_ms(100)
# 電源ボタン
if last_code == 0x12 and time.ticks_ms() - last_ticks < threshold:
led.value(1)
# 一定時間たったら消灯処理
if time.ticks_ms() - last_ticks >= threshold:
led.value(0)
カスタマイズあれこれ
スイッチ回路にジャンパー線を追加しリレーを増やせば、タイマーや運転切替もリモコンから操作することが可能となる。
リモコンのボタンを新たに割り当てたいときは、下記の表を参考にし、コードを書き換えよう。
コードの解析はこちらのサイトを引用させて頂いた。
0x12 | 0x1A | 0x1E |
0x01 | 0x02 | 0x03 |
0x04 | 0x05 | 0x06 |
0x07 | 0x08 | 0x09 |
0x0A | 0x0B | 0x0F |
0x0C | 0x0D | 0x0E |
参考にさせて頂いたサイトはこちら
コードの書き方や手順などは下記サイトを参考にさせて頂いた。
ここの手順はかなり端折っているから、手順が分からなければ下記サイトを参考にしてもらいたい。
https://zenn.dev/ythk/articles/ythk-raspico-pins
https://serverarekore.blogspot.com/2021/04/rsapberry-pi-picoosrb38c9aa.html
除湿機に回路を組み込む
回路の組み込みが一番難しかった。最終的にraspberryPi Picoは両面テープを使い本体に固定し、リレー回路と赤外線センサーはとくに固定せずに組み立てた。
赤外線センサーはLED表示用の窓から赤外線を受信できるような位置に置けば、外装を加工することなく赤外線を受信できる。
回路が取り付けできれば、あとは分解と逆の手順で組み立てればOK。
リモコンで除湿機を操作できるようになると
こんな改造しなくてもSwitchBotのスマートスイッチで問題はなかったが、一度スイッチが外れると再度取り付けるには両面テープの貼り直しが必要だし、なんかあまり信用できないでいた。
晴れて赤外線リモコンで除湿機が操作できるようになれば、除湿機のIOT化は完全体になったと言るだろう。
我が家では、湿度60%超えたらスマートプラグで除湿機の電源を入れ、その5秒後に赤外線リモコンの制御がいくように設定した。除湿機稼働後は2時間でスマートプラグの電源が消えるように設定。
これで湿度60%超えたら除湿機を2時間稼働させる、というオートメーションが完成だ。
除湿機は電源スイッチのオンオフが押すたびに切り替わるから、一度電源を切って再度通電させてからリモコン制御するように設定している。こうすることで確実に除湿機が電源オンとなる。
後は自動排水ができれば完璧なんだけど、これはまた後日かな。