先日エアコンのファンを清掃して目の痛みは大分良くなったのだが、まだ痛むことがあるのでフィンも清掃した。が、残念ながら余り効かなかった。どうも、外の臭いが窓の隙間から入って来るようだ。ただ、不思議なのは、目が痛かったり煙い気がする時でも、センサのHCHOなどの数値が上がらないことだ(以前は上がっていたので、この点ではエアコンの清掃が効いたのか)。漏れを確認するために窓の近くで測っているので、漏れていれば上がるはずだが、なぜか上がらない。
もしエアコンが原因とすれば(エアコンが原因の場合もあるが、それだけではない)、同じように動かしても症状が出ない場合があるのが説明できない。
まだ謎はあるようだ。
そういう問題を追っている過程で、以前から不満だったのだが、この部屋のエアコンは温度調整が1℃単位で粗過ぎることだ。例えば、今だと27℃ではちょっと寒いが、28℃では暑過ぎる。0.5℃単位で設定できるといいが、できない。もちろん、そういう時はリモコンで温度を変えればいいが、余りにも頻繁で面倒だ。
書いたあとで思い付いたが、もしかして、汎用のリモコンで0.5℃単位で指定できるものならできる? んなこたぁない?? (7/13 13:36)
そこで、外部から、例えば0.5℃単位で自動調整できるような仕組みを作りたくなって、2つの方法を考えた。
- エアコンのセンサを加熱・冷却する機器を追加して、ちょっと暑い時は、例えば0.5℃分加熱し、ちょっと寒い時は同じく0.5℃分冷やす。
- ペルチェ素子を使えば加熱・冷却は可能だが、「室温から0.5℃上下させる」という制御はかなり難しそうだ。また、電気を食いそうだ。
- PCなどで常時室温を測定し、設定温度(自分の希望温度, 任意の細かさ)からずれたら、リモコンの設定温度を1℃上下させて、細かく温度を調整する。
- PCに繋がる温度センサ、リモコン送信機などを揃える必要があるが、それらは意外に高い。
- 市販の装置もあるが、高いし自分好みの制御ができるか不明。
1は以前にも考えたことがある方式だが、いろいろ検討して、2のリモコン方式が良さそうだと思った。が、必要なものを揃えるにも、ちゃんとLinuxから使えるものは少なく、安くない。そこで、なるべくタダ(手持ちの物)で実現できないかと考えた。今回は、その案を考えて少し試した結果を示す。
大きく分けると、PCに繋がる温度センサとPCからリモコン送信する機器の2つが必要だ。
まず、温度センサは、最初はPCのマザーボードの温度から推定することを考えた。が、ケースの中にあるせいか、室温への追従性が悪いので却下した。代わり、SSD※をUSB接続して外に置いて、SMARTで温度を取得することを試している。SSDをアクセスしなければ、室温以外での温度変化は余りなさそうだ。
※HDDでも温度は取れるが、熱容量が大きくて遅延が大きそうなので、小さくて軽いSSDにした。最初はPC内部の「本物のSSD」で試したが、ケース外の方が良さそうだったので、使っていないものを外付けにした。
それから、まず最初に、手持ちの普通の温湿度計からデータを取れないか考えたが、やはり無理そうだった。技術的には可能かも知れないが、必要な道具(例: ロジアナ、プロトコル・アナライザ)がない。
ただ、SMARTで取れる温度は1℃単位と粗い。そこで、複数の温度を平均して中間的な値を求めることにした。実際、室温を変えながらSSDの温度を見ていると、中間的な温度と推定される場合には、前後の温度(例: 32℃と33℃)で行き来することが多いので、使えそうな気がした。具体的には、次の式で室温を推定した:
推定の室温 TER= TAD + ⊿
TAD: SSDの平均温度 (℃): 今回は30秒ごとに測定した10回分を平均した。
⊿: SSDと室温との差 (℃): TADと温湿度計での測定値から、カットアンドトライで決めた。
試してみたら、うまく行くこともあるが、室温(温湿度計での温度)との差が大きいこともある。例えば、通常は推定の室温と温湿度計での温度差は0.5℃以下だが、たまに0.75℃などと大きくなる。この原因は、SSDの示す温度が正確でないのか、そもそも1℃単位の温度を使うのが無理があるのか、SSDの温度の取得方法が悪い(例: 取得間隔が長過ぎる)のか、SSDの温度から室温を推定する処理(単に、オフセットを引いてしているだけ)が良くないためか、SSDと温湿度計の反応速度が異なるためのいずれかだと思うが、どれかは分からない。
これを書いた後で値の変化を見ていたら、どうやら、SMARTの温度は早い段階で1℃単位で丸められてしまい、定常状態になったら、上に書いたような、中間値で行き来することはないことが分かった。どうも筋が悪い感じだ。
(これは上の前に書いた) これを書いた後で思い付いたが、温度の変化速度(傾き)を使って推定した方が正確になるかも知れない。これも難しいことはありそうだが。 → これも駄目な気がする。せいぜい、変化した時の傾き(無限大だけど)を何とかするのだろうか。
それぞれの機器(温湿度計、SSD)に不明な誤差があるので、正確な(誤差の既知な)温度計や恒温槽がないと「真の温度」が分からないので、なかなか難しい。まあ、最終的には体感に合えばいいし、温度調整プログラムを「うまく」作ればいいのではあるが・・・
誤差という点では、室温については、「多数決」で真の値が分かりそうな気がする。実は先日温湿度計が壊れた(写真左に写っているものの湿度が低過ぎる)ために一個追加(写真の丸いもの)して(この顛末もあとで書きたい)合計3台あるので、それらから真の室温(に近い値)が分かる。すると、SSDの値はやっぱりおかしい場合があって、がっかりする・・・
まあ、SSDで測って制御してみて、精度が悪くて駄目だったら、USBの温度センサを買ってそれに交換すればいい。自分でプログラムを作るので、そういうのは容易だ。まずはSSDでプロトタイプを作って、自動調整の可能性を試せば、無駄な投資が防げる点で意味はある。
あと、調べると、1-Wireという方式で温度が取得できるセンサが安く(数百円)買えるようなので、それをPCにうまく繋げらればいい(調べたら、シリアルポートに接続する例があった)。
次に、リモコンの送信だが、調べたら、物理的には赤外線LEDだけでできるようで、PCのシリアルポートなど、プログラムからon/offできるポートに繋いで、電圧をon/offして点滅させれば送信できるようだ。ただ、その上に載せる信号の変調が38kHzで、1つの信号(ビットみたいなもの)を約13μsという速さでon/offしなくてはならず、Linuxで制御できるか不安はある。
そして、赤外線LEDをどうするかだが、これはある。手持ちの使っていないリモコンを探したら、パナの照明のものには、なんと、1台に5個(前: 3, 上: 2)も使われているので※、1個くらい外しても気付かれなさそうだw (そもそも使っていない)
※こんなバブリーな設計をしているから、今苦境に陥っているのではないか??
あとは、適当な抵抗を探して、PCのシリアルポートに繋いで、まずは発光させ、次にコードを出してみて、リモコン受信機(今もPCに繋いでSptifyやGMBの制御に使っている)に認識されるか(というか、認識されるようにできるか)を試せばいい。
が、まあ、きっと一筋縄では行かない気はする。これが駄目なら、PCに繋がる学習リモコンを買うしかない。
そもそも、いくら温度(室温)をきっちり合わせても、体感温度が合っていない場合には意味がない・・・
その場合には、「暑い」、「寒い」などというボタンを用意して、うまい具合に少しだけ温度を下げ・上げするように作るのかと思う。昔は「ファジー」のものにあった気がするが、今はAI(機械学習??)になるのか?w
いずれにしても、夏休みの自由研究的でおもしろそうだ。実際には、その前に、鳩よけ(これはほぼ終わって、今は調整・確認中)だの異臭(あとは窓をちゃんと塞ぐ程度?)といった問題を片付ける必要はあるが、まあ、「ちょっと寄り道」とか現実逃避的なw
- 外付けSSDで室温を推定しようとした。
- 複数の測定値から中間的な(1℃未満の分解能の)温度を求めようとした。
- 僕が居ない時でも、定期的に室温も記録できるようにした。
- 臭いセンサの値と室温の測定例
- 5個も赤外線LEDが付いたリモコン・・・
- リモコン内部。上下端(上用)の一個が使えそうだ。
↓
その後、寝ている間に日和ってしまって、温度センサもリモコンもできているものを買ったほうが安定していいかなと思うようになった。そもそもやりたいのはエアコンの調整だし。あの「十万円」は車の税金や鳩よけや異臭事案に随分使った気がするが、残りを当てると考えればいいか。
ただ、欲が出たのは、PCを動かしていなくても調整できるようにしたいということで、それにはスマフォで制御するか、上に書いたようなリモコン制御装置を買うしかない※。さすがに後者は安直過ぎると思うが、ちゃんと動くなら、日和ってしまうかも知れないw
※他に、ラズベリーパイやArduinoみたいな小さいコンピュータで制御する方法がメジャーで、それ用のハードもソフトもいろいろあるだろうが、仕事でもないのに それ用の開発環境を入れたりデバッグなんてする気分になれないので、パスしたい。(今のところはねw)
(7/13 13:19)
↓
更に、やっぱり寝ている間に、いい案が出た。エアコンの温度センサはサーミスターだろうから、それに直列(または並列に)可変抵抗を入れれば、室温を誤魔化せる。サーミスターの特性が正か負か分からないが、仮に温度が上がると抵抗が増えるなら、直列に入れた可変抵抗を増やせば、エアコンは「室温が高くなった」と認識して、冷房なら温度を下げるだろう。温度を上げたい場合も考慮して、あらかじめ可変抵抗を適当な値(エアコンが「数度高い」と認識するような値)に設定し、(エアコンの温度設定はその分低めにしておき、)可変抵抗をそれより減らせば温度を下げられるはずだ。
可変抵抗をどうやって(リモートで)回すかが問題になる。電子ボリュームが良さそうだが、ボリュームの電源を切った時に抵抗値がどうなるか不明だ。0や無限大になるのでは、電源を切ったらいきなりエアコンが強烈になりそうだ。まあ、電子ボリュームなどの電源を常時入れておけばいいだけなのだろうが※。もしかしたら、モーター制御の(機械的な)ボリュームがあるかも知れない(でも、おそらく、抵抗値の制御が困難だろう)。他には、以前あきらめた、温度センサのコネクタを探す必要がある。でないと直列には入れられない。
※ あ! サーミスターに掛かる微弱な電力で電子ボリューム(とりあえず、チップだけでも)が動けば、電源の問題はなさそうだ。が、そうは問屋が卸すか??
それらの点を何とかすれば、これが一番いいように思う。少ない手間と追加で本当に1℃以下の温度制御ができるはずだ。 (7/14 6:28)
↓
ちょっと探したら、持って来いのものがあった。電子ボリュームはオーディオ用でこういう用途には向かない。僕の欲しいものはデジタル・ポテンショメータというようだ。例えば、マキシム DS1809は中に不揮発性メモリが入っていて最後の抵抗値が保存されるので、電源を切っても問題ない。スイッチで上下できるので、面倒な制御用マイコンは要らない。クロックも要らないから、本当にポン付けできそうだ。全く手軽だ。「うむ」か「おう」かw (7/14 7:10)
PS. 「第0歩」はプログラマ的な言い方で、(大嫌いな)政治家的に言ったら「一丁目一番地」? (なんか違うな。「叩き台」? 「国家プロジェクト」?(爆))
naoki: 2020-07-14 15:38
ドクが自動給餌装置を作る時も、こんなふうにやったんじゃないかなあという気持ちで読みました。
だんだんドクみたいになって来ましたねw
れんと: 2020-07-14 17:37
●うれしいです。
確かに最初の案なんて、妙に回りくどいところがドクの作るものに似てるかも(そこがいいんですが)^^