2012年11月24日

外出先で自宅エアコン電源制御(その3)

 今回はUSB-マルチI/Oの話をしようと思います。

 パソコンから外付け回路を制御するに当たり、I/Fを何にするかは悩むところです。一昔前であればパラレルポート(プリンタポート)を使うのがリーズナブルで定番でした。プリンタがUSB接続やネットワーク接続が当たり前になった頃は空き端子になり、ちょっとした回路をつなぐにはちょうどいい端子でした。しかし、空き端子になるということは需要が無いということで、最近のパソコンにはパラレルポートが付いてません。

 今は、USB-マルチI/Oチップを使うのが常識になっていると思われます。

 しかし、今回はあえてUSB-シリアル(RS-232C)変換チップを使います。理由は、ドライバ導入で苦労しなさそうという点です。最近のOSであれば、LinuxでもFreeBSDでもとりあえず挿せば動くだろいうということです。

 今回買ってきたのは、秋月電子の K-01977 です。これを使用した場合、信号のタイミングはRS-232Cですが、信号レベルはCMOSレベルのままです。今回の用途では、レベル変換されると余計面倒になるのでこのキットが最適です。USB接続モノでは最安なんじゃないかと思います。

 単純なパルス出力をしたいので、コレのRTSかDTRを出力に使います。という予定でした。しかし失敗です。

 何が失敗かというと、変換チップのリセット時に出力が不定となるからです。つまり、勝手にエアコンの電源がON/OFFされてしまう恐れがあるということです。変換チップのリセットをしなければよいのですが、パソコン再起動時にももちろんリセットされてしまいます。これを避けるのが運用の条件とするのはちょっと厳しいです。

 そこで、TxDを出力に使うことにしました。TxDはリセット時もHレベルのままです。

 TxDはご存じのとおり、シリアル信号出力です。それをパルス出力に使えるのか?

 大丈夫です。TxDはデータが無いときが1で、データはデータ通り0か1が送られます。ということは、0x00(つまり、8bitオール0)を送ると、長めのパルスになります。通信速度を遅くすれば、さらに長くなります。

 そこで、300bpsに設定して0x00を送ってみました。が、結果はエアコンが反応したりしなかったりです。

 ここで、300bpsで0x00を送った時のパルス幅を考えてみましょう。

 RS-232Cの通信では、スタートビットとストップビットが付きます。スタートビットが0でストップビットが1です。ストップビットはパルス幅が1ビット分、1.5ビット分、2ビット分とか選べるのですが、普通は1ビットと設定します。まあ、なんにせよ、スタートビットの1ビットとデータ部の8ビットが送られることになり、9ビット幅のパルスが出ることになります。9ビットが300bpsで送られます。ということは、1/300*9=0.03秒がパルス幅になります。

 これで、不安定だったので、3倍にしてみました。0x00を3回連続で送ってみます。すると、確実にエアコンのON/OFFが可能になりました。

 ストップビットの分の逆パルスが2回出ちゃうことになります。図にすると以下のようになります。

airconcon_timing.png

 逆パルスがあるものの、とりあえず動いているので問題なしということにしておきます。

 入力について書き忘れましたが、こちらは単純に DSR を使います。

 次回はCGIの話を書こうと思います。

posted by tech4u at 23:26| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。