Posts tagged ‘connect XY-WJ01 to PC’

(溜まったネタを時系列に こだわらず書いている。今回は今までの一連の稿の始まり かつメインとなる話で、このシリーズの最後となる。)

換気扇を間欠運転しているタイマー XY-WJ01にはシリアル(UART)ポートが付いているので、それを使って遠隔制御することができる。システムができた当初は必要ないと思って居たものの、(おもしろそうだから)できるものは試したいし、使っているうちに、例えば「ちょっと(30分くらい)強制的に換気したい」というような場合があり、PCから換気扇をonにできて自動で元に戻れば便利だと思ったので、やりたくなった。

PCとタイマーの繋ぎ方の検討

PCをタイマーのシリアルポートに繋ぐ方法を検討したら、Wi-Fiが良さそうだった。

  • 無線: 線がなくて美しいが、技適の壁のために安価なものは使えない場合がある。
    • Wi-Fi
      • IP通信なので、仕組みとしては ちょっと大掛かりになってしまう。
      • 親機はルーターが使えるので、1台で済む。
    • Bluetooth
      • シリアルポートプロファイルは手軽で良い。
        • こういうのが欲しかった。
      • 2台(1ペア)必要なのが面倒だし、少し高く付く。
        • ただ、最初は片方はスマフォでも良い。
      • 僕には馴染みがない。
    • その他
      • TWILITEシリーズ
        • おもしろいし簡単に使えそうなのだが、独自規格だったり3.3Vだったりして、(僕には)ちょっと面倒・使いにくいのが残念。
          • もしUARTが5V(トレラント)だったら、買ったかも知れない。
        • オリジナル製品のため安くはない(かと言って すごく高い訳でもない)し、開発機器(と言うほど大掛かりではない)が要る場合もある。
          • ここら辺が独自規格・製品の難点だと思う。
        • 2台(1ペア)必要なのが面倒だし、少し高く付く。
  • 有線(UART): 比較的安く、使うのは超簡単だが、コードが部屋を這うのが綺麗でない。
    • タイマーはAC 100Vを扱うので、通信路(タイマー - PC)を絶縁することが必須。

ただ、以前も書いたように、単純にWi-Fi - シリアルができる安い製品(しかも、技適認証済み)は なく、ESP32シリーズを使うのが一番良さそうだった。が、繋いで電源を入れるだけでは駄目で、少なくとも何らかの設定をしなければ使えないのが面倒だし、機能が豊富過ぎて もったいない。

それで、手元にWi-Fi内蔵SDカード PQI Air Card II(以下、Air Card)が眠って居たので使えないか検討したものの、問題・課題が多いので却下した。はずなのだが、前の稿に書いたように ちょっと思い付いて試したら、とんでもなく面倒なことになってしまった。

実は その前に、Air Cardを試すのにも使うのでUSB-シリアルアダプタを買い、タイマーに繋いでコマンドが実行できるようにしていた。

PCとタイマーを繋ぎ、タイマーのコマンドを実行できるようになるまで

まず、PCに適当なシリアルポート(信号レベルはRS232(±12Vなど)でなくUART(0, 5Vなど))がないので、USB-シリアルアダプタ(以下、シリアルアダプタ)を買った。選ぶ時、仮にAir Cardが駄目でもタイマーに直接接続できるように、絶縁型にした。

なぜ絶縁型にしたかというと、仮にタイマーが扱うAC 100Vがシリアルに漏れた場合でもPCを損傷させないためである。絶縁型であれば、仮にAC 100Vがシリアルに漏れてもPCのUSBポートには入らないはずで、タイマーは壊れるものの、PCは安全だ。

シリアルアダプタは、秋月のFT234X+ADuM121N使用絶縁USBシリアル変換モジュールにした。約千円だった。他に必要な部品(3.3V電源レギュレータ(Air Cardの電源にしようと思ったが、結局使わなかった)やXHコネクタなど)も一緒に買った。

届いてから動作確認(Linuxでのデバイスの認識やループバック通信)をしたところ、ちゃんと動いた。

選ぶ時に少し迷ったのだが、アダプタのチップは実績・定評のあるFTDIのもので良かったと思う。当然ながら挿せば動くし、例えば、タイマーへの通信がうまく行かなくて(後述)、転送速度のズレを疑った(実際には問題なかった)時に簡単に微調整(例: ±10%)できたのは良かった。

それからシリアルアダプタをタイマーに接続できるように基板にXHコネクタを付け、タイマーに繋げてコマンドを試したところ、なぜか処理されず、全部"FAIL"になってしまった。

一番まともそうなマニュアル(買った製品には添付されていない)を出しているメーカーらしき会社(そもそもメーカー名が不明なので、単なる商社かも知れない)に問い合わせても、マニュアルの関連箇所のコピーしか来なかった。不良品(ソフトにバグがある)と考えて買った店に問い合わせたが、やっぱりマニュアルのコピー(文章は中国語)を提示するだけで、「物は ちゃんと送った。製品に問題はない」などと無責任極まりない対応だった。更に、製品に問題のない(動作している)証拠を求めたが出して来なかった。

仕方ないので一旦諦めることにして、あとで使う時に壊れにくくなるようにシリアルアダプタをケース(壊れた100円カードリーダーのものを加工した)に収めたり、タイマー基板の入出力の一括接続用のXHコネクタを付けて整理した。

が、その後いろいろ試したら解決できた。: タイマーのコマンドは「一発で」送らなくてはならないのだ。例えば、設定を取得するコマンド"read"をターミナルソフト(例: minicom)で手で"r", "e", "a", "d"と打ち込むのは駄目で、それぞれの文字が"FAIL"になる

一方、プログラム(LinuxのechoコマンドでOK)で一回で"read"と送れば成功する。※ ターミナルソフトでも、(あらかじめクリップボードに入れておいた)"read"をペーストすれば成功する。(: ローカルエコーoffのため、画面には送信文字列(コマンド)が出ていないが、"read", 改行, 改行, 改行, "read"を送っている。)

おそらく、文字の受信間隔が しきい値より長いと、コマンドの区切りとしているのだろう。

※このことに気付いたのは、転送速度が異なるためかと思って微調整の仕方を調べたら、速度設定のあとにechoで文字を送信する例があって、最初なので そのとおりに試したら動いたことだった。本当に速度が違うのかと思って、上下限を調べたら調整なしの速度(9600bps)でも動いて、速度でなく送信方法がポイントだったことが分かった。

ただ、使ってみて分かったが、想像通りクロックが余り正確でないようで、タイマーの継続時間が結構狂う。大体、設定の7%くらい(例: 10分で42秒)短くなる。この調子だと温度でも変わりそうだ。

これはマニュアルに書いてない*ので、「ちょっと普通に」試したら全部"FAIL"になってしまう。※

*もしかして、元々の中国語版のマニュアル(あるのか不明)を読めば、文章の本来の意味から分かるのかも知れないが、全くの無理筋だ。あるいは、(PS1に書いたことに関連するが、)発注元の仕様書には書いてあって そう実装したけど、(テキトーな誰かが作った)マニュアルには書かれなかったのかも知れない。

※メーカーらしき会社の掲示板に、別の製品だが、同じ問題で困った人が居た。それに対しても通り一遍の回答で、「一回で送る」という情報はなかった。だから、その会社も単に売っているだけなのかも知れない。なお、呆れたのか諦めたのか、質問者からの返信はなかった。

Linux(bash)でタイマー XY-WJ01にreadコマンド(設定の取得)を送り、応答を受信する例を以下に示す。

timer_tty="/dev/ttyUSB0"
stty -F $timer_tty 9600 pass8 -cstopb -echo
my_tty=`tty`
tmo_s=1

timer_cmd="read"
bash -c "echo -n $timer_cmd; read -t $tmo_s res; echo \$res > $my_tty" < $timer_tty > $timer_tty

→ 結果: P6,OP:0.0.1.0,CL:0.0.3.5,LP:----

※他のコマンド(例: "P7"(モード7に変更))を実行したい場合は、変数timer_cmdに設定すれば良い。また、タイマーが接続されていない時や電源offの時に待ち続けないようにするため、readにタイムアウト(変数tmo_s, 1秒)を指定している。

(4/4 14:02) sttyに指定する通信設定を修正した。*: 一番重要なのは -echo で、これでエコーバックを停めないと、タイマーから送信された文字列がタイマーに送り返されて、エラーになったり設定が変わってしまうことがある。: 後述の、off時間が0("CL:0000")になってしまう現象の原因は これでないかと推測している。

*実際には他にも指定しているが、上記のものだけで充分である。

また、bashで実行するコマンドのリダイレクトも修正した。: 当初は検索して見つかった例のまま、意味を良く考えずに使っていたが、stderr(fd= 2)をstdout(fd= 1)にリダイレクトすると、Linux側のコマンドのエラーがタイマーに送られてしまうので良くない。

上の例は長くて分かりにくいかも知れないが、肝は一番最後の行のechoとreadだけで、やっていることは以下である。

stty -F /dev/ttyUSB0 9600 pass8 -cstopb -echo
echo -n "read" > /dev/ttyUSB0
read -t 1 res < /dev/ttyUSB0
echo $res

細かいことを書くと、こちらの場合は、(可能性は低いものの、)echoでタイマーにコマンドを送ってからreadを実行するまでに来た応答を取得できない。

そして、細くて長い(15m)電話線(モジュラーコード)※を買い、(長さが確定していないので、)モジュラージャックを切らずに接続するためのアダプタを作り、PCから洗面所まで「仮敷設」し、(コマンドは上のように手で打つものの、)PCからタイマーを制御できるようになっている。

※シリアルアダプタの端子数は4個(電源, 送信, 受信, GND)で、丁度電話用のモジュラーコードの芯数に合うのと細いコードが手頃な値段で売っているので、そうした。なお、15mは基本的にはシリアル通信には長いが、転送速度が9600bpsと遅いので問題ないと考えた。

タイマーの遠隔制御の機能と実装

タイマーの遠隔制御の使い方(ユースケース)を検討し、以下のような機能を実現しようと考え、概ね実装した。

なお、下の指定時間on/offしている間にPCが再起動したりスリープした場合にタイマーの状態が元に戻らない(例: onまたはoffになったまま)のは良くないので、そうならないような方式を考えた。

そのため、「連続on」や「連続off」の機能は作らない。連続on/offしたい場合は、例えば「24時間」のように充分長い時間を指定するようにする。

実際、無限にon/offしたいことは ないし、仮にそうするなら、手で換気扇のスイッチをonにしたり、タイマーの電源を切れば良い。

  • (一時的に、)指定時間(T1)onする。
    • タイマーのモードがP6(on, offの繰り返し)の場合、設定(同じ設定でも可)を書き込むとonになるので、現在の設定をそのまま書き込むことで、設定のon時間(Tonとする)のonにする。
      • XY-LJ02と違い、XY-WJ01には即座にon/offするコマンドがないので、このようにする。
    • 以下の処理でT1のonを行う。
      1. モードがP6でない場合、P6にする。 → 最大Tonのonになる。
      2. 設定の書き込み。 → 最大Tonのonになる。
      3. T1の端数(T1 mod Ton)と繰り返し中の短縮分(例: 20秒x繰り返し回数)のsleepをする。
      4. T1/Ton > 1の場合、以下をT1/Ton-1回繰り返す。
        1. Tonよりわずかに(例: 20秒)短いsleepをする。※
        2. 設定の書き込み。 → Tonのon
    • 仮に上の処理中にPCが再起動したりスリープした場合、最後のonのあとは通常のタイマー動作(on, off)に戻る。
  • (一時的に、)指定時間(T2)offする。
    • タイマーのモードがP6の場合、P7(off, onの繰り返し)に変更するとoffになるので、そうすることで設定のoff時間(Toffとする)のoffにする。
    • 以下の処理でT2のoffを行う。
      1. モードがP7でない場合、P7にする。 → 最大Toffのoffになる。
      2. 設定の書き込み。 → 最大Toffのoffになる。
      3. T2の端数(T2 mod Toff)と繰り返し中の短縮分(例: 20秒x繰り返し回数)のsleepをする。
      4. T2/Toff > 1の場合、以下をT2/Toff-1回繰り返す。
        1. Toffよりわずかに短いsleepをする。※
        2. 設定の書き込み。 → Toffのoff
    • 仮に上の処理中にPCが再起動したりスリープした場合、最後のoffのあとはP7のタイマー動作(off, on)になる。
      • これはP6と位相が異なるだけで、on/offの周期・比率は同じである。
    • 終了後にモードをP6に戻すのが望ましいが、そのままでも次回の制御時にモードを取得して適宜対応すれば良い。
  • 動作パターン(設定)を変更する。
    • 単純に、新しい設定をタイマーに書き込めば良い。
    • 設定のプリセット的なもの(例: 強, 中, 弱)を作り、それをタイマーに設定するようにすれば操作が楽になる。

※タイマーが設定でon/offするより前に それらを継続することで、換気扇のon/off動作を途切れさせないためにそうしたが、実際に使ってみると、多少途切れても実害はなく、そこまで厳密にする必要はないことが分かったので、今は、処理を簡単にするため、スリープ時間はタイマーのon/off時間(TonまたはToff)にしている。

同様に、タイマーのon/off時間の整数倍でない時間で換気扇をon/offする必要性も薄い気がしたので、今は、指定されたon/off時間(T1またはT2)をタイマーのon/off時間(TonまたはToff)の整数倍に丸めている。 (4/16 7:29)

これから(= 気が向いたら)プログラムを作るところだが、大方出来た つもりになってしまって作るのが面倒なので、こうしてブログを書いたりしているw

(3/22 16:43) その後、なぜか やる気が出たので、上の指定時間on/offするプログラムを作った。また、YAD(Yet Another Dialog)というプログラムで とっても簡単なGUIを作った。既に いくつか不満はあるが、使いながら改良して行きたい。

UXWingVentilation Fan Blower iconを使用した。

(3/23 9:30) 更に、Xfceのパネル(Windowsのタスクバーに相当)に入れて※手軽に かつダイアログの場所を取らずに使えるようにした。この部分をクリックすると、上の設定ダイアログが出て、タイマーの設定周期とは関係なく、指定した時間だけ換気扇をon/offすることができる。

※Generic monitorというウィジェットを使った。なお、パネルの空き(場所)が少ないため、CPU温度のウィジェットは止めた。タイマー(パネルの"Timer"のウィジェットのこと。制御対象のタイマーではない)が無駄に場所を食っているのだが、直せないので仕方ない。

 

(3/26 20:57) 換気扇の動作パターンも設定できるようにした。とりあえず、on/off時間を3種類(H= 強, M= 中(標準), L= 弱)から選べるようにした。On時間の割合は、H: 約40%, M: 約22%, L: 約13%としてみた。

 

それから、当初は接続を無線(Wi-Fi)にしようと思って居たが、電話線は充分細くて目立たないし、タイマーのコマンドの機能は少なく※苦労して無線にするほどのものではないので(ただ、GPIO付きのWi-Fi基板なら、タイマーの状態が取れそうだ)、上述の遠隔制御機能ができたら電話線を正式(綺麗)に敷設して、終わりにしようと思っている。

※以下のような惜しいことがある。

  • コマンドで設定の取得や変更はできるが、状態(例: 現在onなのかoffなのか)を取得できない。
    • 例えば通信を絶縁I2C(あるいは、上述のようにWi-Fi)にし、その先にシリアル通信とGPIOの可能な基板を付ければできる気はしているが、そこまでする必要性はないし、やってもon/off程度しか分からない。単なる興味だw
  • 同じシリーズのXY-LJ02(基板のみの製品)のように、即座にon/offするコマンドがあると便利だ。
    • だから、WJ01のstart/stopコマンドはLJ02でon/offになったのかも知れない。

 

タイマーのUARTコマンド・動作で分かったこと (3/26 12:34追記)

  • 現在と異なるモードを設定すると、(当然ながらそのモードになるが、)その時のリレーのon/offは そのモードの最初の状態になる(例: P6ならonになる)。また、時間のカウントはリセットされる。
  • 現在と同じモードを再設定した場合、(パラメタを再設定した場合の動作とは異なり)リレーのon/offは そのモードの最初の状態になる。
    • 時間のカウントの詳細は未確認だが、以下のような感じである。
      • On/offの状態が現在と変わる場合は時間のカウントがリセットされる? (リセットされないこともある?)
      • On/offが変わらない場合はカウントがリセットされない?
  • 上の2つにより、XY-LJ02のように、即座にリレーをon/offすることもできる(ただし、on/offされている時間は設定による)。
    • 例: P6にすればonになり、P7にすればoffになる。
  • 複数のコマンドを , で区切って一括して送れる(要するにreadコマンドの出力と同じ形式)。
    • 任意の順序・数(もちろん上限はある)のコマンドが送れる。
    • ただし、モード(Px)を指定した場合にはLP以外は無効になる。
  • UARTコマンドを実行すると、たまにタイマーの設定が壊れることがある。
    • Off時間が0("CL:0000")になってしまう。
      • この場合、タイマーが停まる。
    • 壊れる契機は不明。
      • コマンド実行後の待ち時間が短いため?
    • そのため、コマンド実行後に設定を取得し、いずれかのパラメタが"0000"になった場合は壊れたと判断して元の設定を再設定するようにした。
    • (4/4 14:20) 上に追記したように、この問題の原因はタイマーコマンドの送受信の仕方の問題だと推測している。
      • 以下に、推測した問題発生の流れを示す。
        1. [コマンド実行プログラム] 起動する。 (起動時にタイマーのttyがopenされる)
        2. [コマンド実行プログラム] コマンドをタイマーのttyに書き込む。
        3. [Linux] コマンドをタイマーに送信する。
        4. [タイマー] 結果をLinuxに送信する。
        5. [Linux] 受信した結果をタイマーにエコーバックする。 (sttyに-echoを指定していない場合)
        6. [コマンド実行プログラム] タイマーのttyから結果を取得する。
        7. [コマンド実行プログラム] 終了する。 (→ タイマーのttyがcloseされる)
        8. [タイマー] エコーバックされた文字列をコマンドとして解釈して、結果をLinuxに送信する。 (→ コマンド実行プログラムが起動していないため、破棄される。)
      • 上の5と6,7の順序が問題で、5の前に7まで実行されれば問題ないが、そうでない場合には、コマンド実行プログラムが終了するまで、受信した結果のエコーバックが行われる。→ 受信した結果の一部がタイマーに送信される。
        • readコマンドを実行する場合、結果は"P6,OP:0.0.1.0,CL:0.0.3.5,LP:----"のような文字列であるが、仮に"CL:0"までしか送信されなかったとしたら、タイマーはCLを0に設定し、問題の現象が起こるのではないか。
        • モードやパラメタの設定コマンド(例: P7)の場合、結果は"DOWN"(成功)か"FAIL"(失敗)で、どちらにしても失敗して"FAIL"が送られて来るだけなので、大きな問題はない。
          • ただ、コマンド実行プログラムが終了するまで この繰り返しが終わらないので、好ましくない。

 

PS1. タイマーの謎と危うさ

以前使ったセンサ基板(YL-40)同様、物自体は ちゃんとしているのに、メーカー名を記載せず ちゃんとしたマニュアルなしで売るのは怪し過ぎるしアンバランスだ。売る店が何も分かっていないのもおかしい。

あくまでも想像だが、ちゃんとした会社の製造発注先が横流ししているのではないか。

流通は置いておくとしても、メーカー名もマニュアルもないものを ちゃんとしたシステムに使うのはリスクが高い。使う側が自分で検証・担保するスタンス(= 「何が起こっても知らないよ」)なのだろう。

だから、僕がAC 100Vをこのタイマーに直接入れず、外部のリレーで制御するようにしたのは正解だった。いくら基板をチェックしたって、本当に安全な作りかは分からないからだ。そんなものを信用するくらいなら、自分で回路や基板を作ったほうが ずっと安心できる。

以前調べたら、このタイマーを車(後付けで、エンジン起動後に何かのボタンを押したかのようにしているようだ)や医療機器(プロト?)に使っている例があったが、結構怖い。そこまで信用していいのかと思う。(だからC国では車両火災などが良く起こる??)

(3/23 14:26) 書いてから気付いたが、このタイマーのon/off時間設定の単位は0.01秒から1分が可能だが、on/offをリレーで制御するのに0.01秒(10ms)って果たして「あり」なのか、大いに疑問だ。そんなに短い間隔で使ったら、あっという間にリレーが壊れるだろう。リレーで音楽でも演奏するつもり??w 代わりに時間の単位を付ければ良かったのに。こういう基本的なところが杜撰なようだ。

PS2. AliExpress(以下Ali)の本体も店も最低、クソ以下なので、もう絶対に使いたくない。Aliのシステムは おかしいところが多いし(例: 設定しても通知メールが来ないことが多いし、来ても英語と日本語で内容が正反対だったりする)、店は無責任極まりない(C国人の悪いイメージどおり、自分に非がないことを証拠もなしに叫ぶだけだ)。レビューの点数が いい店を選んで上のありさまだったので、全く信用できない。

僕の中での店(特に電子部品・モジュール)の信頼性の順位は以下である。

秋月, ヨドバシ >> Amazon > Amazon(マーケットプレイス), 楽天 >>>>>>>>>> Ali

もしヨドバシにあれば一番楽で安そうだし、秋月にあれば(送料は少し高いものの)、店も物も信頼できるから良い。Aliを使うくらいなら、多少高くてもAmazon(マーケットプレイス)から買うほうが、(問題があった場合の)ストレスは1/100、時間は1/10だ。

もう少ししたら、Aliのアカウントを削除するつもりだ。最初から今ひとつ信用できなかったので、クレジットカードの情報を登録しなかったのは、正解だ。

  •  1
  •  0
Keys: , , , , ,

換気扇を自動的に間欠運転することで、部屋を常時適切に換気する話。

事前検討・試行の結論により、先月の中旬に間欠運転を実現するためのタイマー(XY-WJ01)を注文した。中国からなので届くまでに約2週間掛かり、届いてから5日くらい掛かって どうにか完成した。例によって苦労して疲れたものの、思って居たとおりに動き、いい感じに換気できているようなので満足している。

以下、注文してから出来上がるまでのことを列挙する。

タイマーが届くまで

  • 途中で(店が渡した運送業者から中国郵便に引き渡されてから)追跡番号が変わったため、AliExpress(以下、Ali)の追跡に出なくなってしまった。
    • しばらく進展がなくて、「どうしたのか?」と思って検索したら そういう情報が見つかり、別のサイトで追跡して番号が変わったのを知った。
      • サイトによっては全く出ないことがあるので いろいろ試すのが良さそうだが、17Trackが一番ちゃんと追跡できた。
    • ただ、なぜか(当然?)、こっちが受け取ったことはAliに伝わったようで、翌日に「受け取り確認しろ」というメールが来た。自サイトでは追跡できなかったくせに、そういうのが やけに早いのはちょっと気に入らない。
      • 「確認」するとお金が店に渡るので、急いで動作チェックした。
  • 結局、商品自体は安いけど送料は それほど安くないし、受け取るまでに時間が掛かる(届かないこともあるだろう)し、届いた商品が壊れているとか偽物の可能性もあるので、気長に何度でも待てる場合以外は(多少高くても)国内から発送する業者のほうがいいと思った。
    • その点では、Amazonマーケットプレイスで国内発送でない業者だったら、Aliのほうがマシだ。
      • Aliは客が「確認」しなければ お金が行かないから、業者もAmazonより真剣になるのではないか?
  • 意外にも、「タイマーのチップ」(時計みたいに「付ければ終わり」的なもの)を使っている訳ではなく、マイコン(ソフト)で制御していた。
    • 届くまで暇だったので、どういう回路か検索したら、回路図は出て来なかったもののCPUなどの写真が出て来て、写っていた番号で調べたらNuvotonの8051ベースのワンチップコントローラ(N76E003)だったのだが、実際に届いたものにはARMが使われて居た(後述)。
      • 「動けばいい」じゃなくて、意外に すごい更新をしているようなので感心した。
        • チップがディスコンになったので(実際は不明)、仕方なくそうしたのかも。
    • 依然としてメーカーが不明だが、誰がソフトを書いているのだろう?

タイマーが届いて

  • 基板を眺めて
    • 今回は使わないが、トリガ入力のコネクタ(写真: 基板上辺左寄りの白い長方形)がXHコネクタ(3ピン)で、偶然 今回使うために買ったものに一致していて、(買ったものは2組セットだったので)使った残りをトリガにも使えると喜んだ。
      • 僕の勘が冴えてるのか、XHが偉大なのか。
      • ただ、実際には2組使うことになったので、トリガには使えなくなった。それでも、アンプで余ったXHのジャック(金具)が残って居るので、それをトリガに使うことはできる。
    • 同様に、今回は使わないが、リレー(SONGLE SRA-05VDC-CL, 写真: 右端下部の黒い大きな長方形)にはNC(normally closed)接点があり、タイマーのターミナルには出ていないが、未使用のリレーの端子(写真: 中央辺り、基板左辺中央付近の大き目の銀色の丸)に線を繋げば使そうだ(未確認)。
    • 謎の未使用端子J1 (写真: 中央右寄りの縦に並んだ5つの点)
      • 何か繋げられる感じで興味はあるが、ソフトで制御しているため ただ繋ぐだけでは使えなさそうなので、特に調べることはせずに謎のままにした。
    • 謎のCPU!
      • 型番の文字が小さくて(写真: 中央の大きい長方形(LCDコントローラ)の右の小さい正方形)読みにくく なかなか検索できなかったが、CHIPSEAという会社のCS32L010F8U6らしいことが分かった。
      • コアはARM Cortex-M0だが、データシートが手に入らないので詳細は不明だ。
        • が、STMicroのSTM32L010F4(検索を繰り返すうちに引っ掛かった)に型番が酷似しているので、そのパチもの互換品なのではないかと想像している。
          • CHIPSEAのは5Vが可能なので、僕らには使いやすそうだ。あと、STMicroのに比べてSRAMの量が2倍になっている。
    • 事前に調べていたのと部品の形状、部品配置が微妙に異なる。
      • CPU同様、ちょこちょこ更新しているようだ。あるいは、CPUを変更したために基板も変わったのか。
  • 明る過ぎる液晶
    • 僕はそこら辺にこだわるほうなので(後述の電源ランプを参照)、暗くしたくて調べたら、LCDコントローラHoltek HT1621のVDDとVLCEDに繋がった抵抗(R6, 20kΩ)を大きくすれば できそうなことが分かった。
      • 問題の抵抗R6(チップ抵抗, 写真: 中央の大きな長方形(LCDコントローラ)の下の、白い枠に囲まれた小さい黒)には"30C"と書いてあり、目が悪くて読み間違えたのかと思ったが、検索したら チップ抵抗は小さくて多くの文字が書けないため、そういうクソな分かりにくい表記("EIA-96 code"とか「E-96 数列 2 桁化対応記号」というらしい)にしていることが分かった。
    • ただ、設定し終わったら液晶は見ないし、時間が経てば自動的に消えるので、そのままにした。
    • 最初は「いかにも(略)らしい」と思ったが、まあ、屋外など いろいろな環境で使うことを考えれば、明るくしたほうが正しいのだろう。
      • ボリュームで変更できればベストだが、上記のように常に見るものでないから そこまでする必要はない。逆に、壊れやすくなるから良くない。
        • これは本心で、「可動部品は壊れやすいから避けたい」と思っている。が、そんなことを言ったら、電解コンデンサなんて ものすごく頻繁に動いているから寿命が短い気がする(実際そうだろう)が、そこら辺は 分からないw

動作確認: OK

  • 半田付けやPC側にコネクタの必要なUART(シリアル通信)以外の ほとんど すべての機能をチェックし、正常に動作することを確認した。
    • 意外に(というと悪いが、)ちゃんと作られていて感心した。
    • この点でも、これは小さい会社がテキトーに作っているとは思えず、やっぱり、誰が作っているのか興味がある。
      • 前の稿でも書いたが、このタイマーは他にも いろいろ似たような機能・仕様の姉妹品があるので、元は一つなのだろうと思う。その「元」を作っているのは どこなのだろうか?
      • そして、なぜ、メーカー名を全く表示しないのだろうか?
    • タイマーには低・高レベルの2種類のトリガ入力があるが、それぞれ独立しているので、両方同時に(片方ずつ入力するという意味)使える。
      • また、片方をonにしたまま もう片方をonにしたらトリガが掛かった。
      • それから、「低レベル」とは負論理の意味だった。Lにするとトリガが掛かる。
  • 更に、実際のシステムの回路を仮に配線して試したらちゃんと動いた
    • それにしても、上の写真の光景は我ながらひどい。雑然とし過ぎている。良くマトモに動いたものだ・・・ 「ハードはソフトとは違うんだぞ!」って言われそうだ。

いくつかの事前検討・試行

  • リレーの耐久性の事前検討
    • このシステムは連続してリレーをon/offして換気扇の回転(電源)を制御するので、データシートでリレーの耐久性を調べた。
    • すると、意外に、機械的寿命より電気的寿命のほうが短いことが分かった。
      • 何度もon/offすると、メカ(支点やバネ)よりも先に接点(の表面)が駄目になって接触不良になるのだろう。
        • 僕としては、これも機械的寿命のように感じるが、どちらかと言えば電気なのだろう。
    • → 動作設定(特に間欠動作の周期)を決める際に、可能な範囲でon/offの回数を少なくすることにした。
  • 防音についての試行
    • 上記のように延々とリレーをon/offするので、作動音(「カチッ」という音)がうるさい可能性があって、気になって居た。
    • 動かしてみると、音量は大きくないものの小さくもないので、少し防音をしてみた。
    • → 音を小さくできそうなことが分かったので、実際のケースや設置場所で気になったら対処することにした。
  • PCからの遠隔操作についての事前検討・試行
    • 今回は遠隔操作はしないが、興味があったので、手元に余っている古いWi-Fiルーターでタイマーを制御できないか(途中まで)試してみた。
      • ルーターのLEDのon/off(の電圧)がタイマーのトリガとして使えそうなことが分かったが、LEDをon/offするにはルーターを再起動させるくらいしか手がない。
        • なお、デバッグモードのあるルーター(WHR-G301N)だと、コマンドでLEDをon/offできる(中でLinuxが動いている)ことが分かったが、既知の脆弱性があって使うべきでないから止めた。
          • その脆弱性を塞ぐファームウェアにすると、デバッグモードは なくなってしまうような気がする(デバッグモード自体が脆弱性と言われているのかも知れない)。
      • デバッグモードのないルーター(WSR-300HP)の再起動でLEDをon/offするにしても、LEDは点滅するのでタイマーのトリガにするには適切でなさそうなので、諦めた。
      • また、仮にそれで制御するにしても、PCから制御結果が分からないのは良くない。
    • → 結局、PCからタイマーを制御するには、Wi-Fi-シリアルアダプタをタイマーのUART端子に繋ぐのが一番良さそうだという結論になった。

システムの構築(接続・配線)

  • 届いた翌日、(確か上述の動作確認のあと)疲れているから翌日に延期しようと思って居たが、午後になって急に やる気が出たので配線に取り掛かってしまった(「止めときゃ良かった」w)。
  • 疲れていたので いろいろ失敗したが、何とかできた
    • 接続間違いを何度もした。
      • 回路図(注: 左は清書したもの。実際に使ったものは手描き)を確認せず、うろ覚えや思い込みで繋いで失敗した。
    • 気付いたら左手の指が少し切れて居た。ラジオペンチで?
  • ケースは、仮に段ボールの小さい箱にした。
  • ちゃんと動いたものの、さすがに疲れ果てた。

動作設定(間欠動作の周期, on/off比)の決定

  • 実際のシステムで換気扇を間欠動作させる設定を、いろいろな要素(下記)を考慮して決めた。: on: 10分, off: 35分の45分周期にした。
    • 換気能力(速度・量) → on/off比
      • 最低限実現しようとする換気能力とした厚労省の基準(30m3/h・人)と、使う(制御する)換気扇の仕様(換気能力)より、on/offが約1/5.4 (1:4.4)以上なら良さそうだった。
        • これは、事前検討・試行で勘で仮に決めていたon:off= 15分:60分に近い。
        • ただ、換気扇は居間から離れているので、もう少しonの割合を長くして換気能力(速度・量)を増やそうと考え、on:off= 1:3.5とし、周期を30分としてon/off= 6.7分/23.3分を仮の設定とした。
    • 追従速度 → 周期
      • 周期が長いと、室内のCO2の増加への対応が遅れるため、短時間的にCO2濃度が高くなって好ましくない。
      • 良く言われるように、長くても1時間くらいが適切だろうと考えた。
    • リレーの寿命 → 周期
      • 周期が短いと頻繁にリレーが動くため、寿命が短くなる。
      • 仕様から計算したところ、電気的寿命を10万回とした場合、周期が30分の場合、約5.7年、1時間の場合、約11年となった。
      • 実際には5年以上も使わない・持たない気がするので、周期は30分以上なら良さそうだと考えた。
    • 窓に張っている異臭侵入防止シートの寿命(劣化) → 周期
      • 換気扇が回ると室内外の気圧のバランスが変わるため、窓のシートに力が加わって動く(膨らむ・しぼむ)。
      • 頻繁だとシートが劣化する可能性があるので、周期は長いほうが良い。
      • ただ、実際には外の風の影響で細かく動いているはずだし、それ以前に、気温の変化や紫外線の影響のほうが大きそうなので、余り気にしないことにした。
    • 騒音 → 周期
      • 頻繁にリレーが動くと作動音が うるさく感じるかも知れないので、周期は長いほうが良い。
      • → 実際の設置位置で動かしてみて調整することにした。
        • → リレーの作動音は全然気にならず、実際に設定した周期(45分: 後述)で問題はなかった。
          • 作動音は音量が小さい上に、気温・室温変化などで生じる建物または建材の(ラップ音みたいな)音や冷蔵庫のコンプレッサーが起動する音に似ているので、聞こえても気にならない。
      • 他に、換気扇の運転音(低音)は聞こえるので、周期は長いほうが良いと思いそうだが、周期が長いと1回の運転音も長くなるから そうでもなさそうだ。
    • 外部の臭いの影響 → on/off比, 周期
      • 外が臭く(例: 煙草臭)、建物に風が吹き付けている場合、室内にその臭いが入って来ることがある。
      • その時に換気扇を回すと臭いを排除できることが多いが、逆効果のこともある。
      • どうすればいいか分からないし、そういう場合は少ないので、これは考慮しないことにした。
  • 仮の設定では周期= 30分、on/off= 6.7分/23.3分としたが、周期は30分と1時間のどちらかが良いか決められなかったので、「間を取って」45分(10/35分)とした。
    • ここで間を取るのは いかにもテキトー・玉虫色的だが、何がいいか分からないかったので仕方ない。
      • 「駄目なら変えれば良い」の精神である^^
  • 上のような さまざまな要因や紆余曲折を見ると、on/off比や周期を自由に設定して試せる点で、(最初のアイデアのアナログ回路でなく、)デジタルのタイマーにして良かったと つくづく思った。
    • アナログ回路でない、「普通のタイマー」にしたとしたら、周期動作でないタイマー(例: 毎日A時からB時までon)だったら、設定変更のたびに数多くの設定を変える羽目になって、とても実用にならなかっただろう。

※こういう処理(設定)を突き詰めるとPWMになり、換気能力を決める時にon/off時間や周期を考えなくても良くなり、on/offの時間比(デューティ比)だけの設定になる(そのうえリレーも要らないので、寿命も騒音も気にすることなく自由に設定できる)のだが、普通の換気扇(モーター)をPWMで動かしても大丈夫か分からないし、僕が買えるような安価な(海外製の)PWMコントローラでAC100Vを制御する勇気(蛮勇)は ないので、まあ、現状の処理が最適だろう。

だけど、低電力の直流(交流でも可)だったら そういうコントローラが使えるので、その時には是非試したい。(が、そういう機会ってあるのか?w)

仕上げ、追加作業

  • システムの基本部分は出来たが、使い勝手や安全性や耐久性や見栄えの向上のために以下の作業をした。
    • 正式なケースへの組み込み
      • 紙の箱は湿気に弱くて危険なので、別件でたまたま見付けた、車の非常用(実際は荷室内のザックの中に放置されて居た)の救急箱(の箱、プラ)を使った。
        • 救急箱の中身は、絆創膏やライターや胃薬と全く貧弱だし、車内に置いたままでは劣化して無意味・危険なので、いずれ ちゃんとしたいと思う(が、どうすればいいか見当が付かない)。
        • ちなみに、この救急箱は、大昔にUSに遊びに行った時に野山を歩くから要りそうだと思って現地で買ったものである。中身は とうの昔になくなっており、外側と説明書だけが残っている。
          • もう30年前後経っているのに随分綺麗だし、まだ強度が充分ありそうで破損もしていないのに感心する。
      • 加工の量が少ないのとプラ(PS)が柔らかかったので、僕としては結構綺麗に出来た
      • なお、リレーの動作音は気にならないので、ケースの防音・遮音処理は不要だった。
        • 正式な設置場所に置いた場合、夜など静かな時でも聞こえることは ほとんどなく、寝ていて それで目が覚めるということもない。
        • ただ、換気扇の起動・停止に伴って、窓に張ったシートが動く(膨らむ・しぼむ)音が聞こえることが多いし、換気扇の運転音(低音)は聞こえる(それらはリレーの問題でないので、仕方ない)。
    • 作動中ランプを追加
      • 換気扇が動いているのが分かったほうがいいので、リレーがonになったら点灯するように、LED(青)を付けた
        • ケースの下半分が青いので青にしたが、目立たず良かった。
      • これで完成と思ったのだが、以下のように追加の作業が多かった。
    • 電源ランプを追加するため、2色LEDに交換
      • 動かしてみると、電源は入っているけど換気扇は動いていない状態も知りたくなったので、付けたばかりの青LEDを2色LEDに交換し、電源onを緑換気扇作動中をオレンジにした。
      • 色、特に明るさ(暗さ)に こだわった(タイマーのように明る過ぎるのは嫌だった)。
        • 少し調整したら、緑が深い色で(発光体でなく)絵のような感じになって、期待以上に良くなった。
    • 配線の改良
      • タイマーの端子にコードを繋ぐ際の接続誤りを防ぐため、ラベルを付けた
      • また、端子に より線を1本ずつでなく、それらを まとめたものを繋いだピンを挿すようにして、折れによる断線や抜けを防ぐようにした。
      • 最初はケースの前面近くからコードを引き出していたが、邪魔なので、後ろのほうから出すようにした
    • 電源・作動中ランプの取り付け方の改良
      • 2色LEDは角型で取り付けが難しく、仮にブルタックで付けたのだが、配線を改良する時に外れてしまったので、カセットガスのキャップと紙でホルダーを作って付けた
      • そうしたら、なぜか電源ランプ(緑)が暗目になってしまったので、更に改良して何とかなった
        • ランプホルダーの穴を広げ、ケースの光を通す穴も少し広げ、ホルダーをケースに貼る両面テープが光の邪魔にならないようにした。
        • また、散光キャップが奥に凹んでいたかも知れなかったので、両面テープでホルダーに付けた。
        • → 緑も明るくなった(写真では同じように見えるが、実際に見ると明るい(感じがする))。
    • 設置場所決め
      • 風呂の換気扇を制御するので洗面所に設置する都合上、濡れた手などで間違って触ったり水滴を掛けて感電したり壊さないようにするため、本体を洗面台の上に置くことにした。
    • 本体から出ているコードを、壁などにちゃんと取り付けた。
      • 「ちゃんと」とは言っても跡が残る方法は取れないため、ハリ玉やブルタックを使ったので今ひとつ弱い。
    • PCファンを撤去した。
      • 今まで常時換気に使っていたPCファンは弱くて効果が少ない(そのために このシステムを作ろうとした)ので、撤去した。

気になったけど見送ったこと

  • 外部リレーの接点にサージキラー(例: バリスタ)を入れること。
    • 入れると接点の寿命が延びるそうだが、手持ちには ないので見送った。ただ、今は2回路のうち1回路だけ使っているので、駄目になったらもう片方を使えば良さそうだ。
      • 駄目になるのが早かったら、サージキラーを入れたい。
    • なお、タイマー内蔵リレーの接点については、繋がっている外部リレーのコイルにダイオードを入れたので大丈夫そうだ。
  • (書いたあとで思い付いた) タイマーの端子への接続間違いを防ぎ、接続を より安定にするため、XHコネクタ(4ピン※)で(車のハーネスのように)一括接続すると良さそう。作業性も向上する。 (3/4 7:58)
    • ※独立なのは3ピンなので3ピンでも可。将来、リレーのNC接点を使うなら、5(または4)ピンが良い。
    • ただ、今は手元にXHコネクタがないので できない。

動作チェック、効果の確認

  • 設定したon/off時間どおりに換気扇が動くことを確認した。
  • また、以前買った臭いセンサを使ってCO2濃度を測定し、効果を調べた。
    • このセンサは余り信頼性がないが、他に手段がないので使った。温度が一定なら それなりの(CO2濃度に比例してそうな)値が出るようだ。
    • 測定の結果、本システム(動作設定: on: 10分, off: 35分)稼働中のCO2の増加速度は-22.0(ppm/h, 例)となり、1人分のCO2は除去(換気)でき、更に0.8人分程度の余裕がありそうなことが分かった。
      • 換気扇を動かさない状態(人が1人居る)のCO2の増加速度を調べたところ26.0(ppm/h)だったので、システムとしては-22-26= -48(ppm/h)となり、1人分の1.85倍の換気能力があると考えられるので、上の表現とした。
  • ※実際には、この作業は上の設置場所決めの辺りで実施した。

昨日、ここまでの作業が ようやく終わって、一段落である。いつものことだが、いろいろ ちゃんとしたかったので、始める前に思って居たより ずっと手間が掛かった。

 

使ってみた感想

便利! 今までは、(当然ながら)換気しようと思ってスイッチを入れないと換気できず、入れてから ある程度時間が経ったら(15分を目安にしていた)忘れずに止めないと、寒くなったり湿度が下がったり外から異臭(主に農薬臭: 原因不明)が入って来たりしていた。逆に、換気を忘れると(当然ながら)室内の空気が悪くなった。そういう手間・神経を遣う必要がないのは、すごく ありがたい。

 

夢は広がる? (あとで やりたくなるかも知れない(けど、必要か不明だし面倒なw)こと)

PCからの遠隔(無線)制御: 少しの間、通常の設定より多く(または少なく)換気したい場合などに、PCから設定を変更できると便利。

  • 以前書いたWi-Fi-リレーモジュールのシリーズでWi-Fi-シリアルモジュールがあるので、それが使えそう。ただ、プログラムを書き込んだりする必要がありそう(必要の有無は製品ごとに違うらしい)なのが面倒。
    • 少し高い(2千円くらい)が、できているものを買うほうがいいかも。
      • ↑ 調べたら(Elfin EW10A)、技適を通っていないから駄目だ。知らん顔して使う人も居そうだが、(いい歳なので)なるべくズルを したくないから止めておく。すると、手頃な価格で楽に使えるものが皆無になってしまう・・・ (3/4 18:55)

 

PS. AC100Vを扱うのは危険なので、この稿では 姑息にも その辺りを ぼかしている。だから、初心者が見てそのまま作れて動くなんてことはない。※ 一方、エキスパートには分かり切ったこと(やればできる)なので、読む必要がないかも知れない。

※一般論として、個人的には、見て打ち込んで・配線してそのまま動く 昔のパソコンとかキット的なものの記事、あるいは、指示のとおりに鍵盤を押せば演奏(らしきことが)できる 初心者向けキーボードなどは果たしておもしろいのか大いに疑問だが、自分の経験としては、そういうのがイントロとか切っ掛けとして役立ったことも多いので、それはそれで あってもいいのだろうとは思う。

逆に、僕が大嫌いなのは、回路の仕様(例: 抵抗やコンデンサの値とかトランジスタの型番)を決めてしまって、それ以外は「知らない」・「分からない」(「動かない」というスタンスすら取る)という奴だ。そんなことはないのに、いろいろな可能性を摘んで居る。

そう言えば、逆に、キットの電源電圧の想定範囲すら書いてないアフォも居たな。そういうのもクソだと思う。

「手元に その部品がないけど、何とかならないか」と思った人に「できない」と言って、考えるのを止めさせてしまうのは良くない。例え結局できなくても、考えて試すことに意味はあると思う。

が、AC100Vは充分な覚悟を持って扱うものだから こうした。

そうすると、この稿の存在意義が不明になりそうだが、こういう使い方(アプリケーション、実例)があるという紹介とか、何かのアイデアを誘発するかも知れない価値は あると思う。

まあ、筆者としては、自分のための整理した記録として書いているので、他の方に何の価値がなくても、「一定の」※意味はあるw。

※あくまでも慣用句。その、一定たる量が どのくらいなのかは知らないw

  •  0
  •  0
Keys: , , , , , , , , ,