小ネタ 2004-007

USB温度センサの製作

 USBに接続して気温を測定する温度センサを作った。24時間稼働させているPCの置いてある部屋はやけに暑いのだが、どのくらい暑いのか計ってみたかったからである。




- 材料 -

 下の写真の上から順に、
・USBシリアル変換基板 (StrawberryLinuxというサイトで販売しているキット)
・LED
・抵抗
・ワンチップマイコンPIC12F675 (Microchip製)
・パスコン
・温度センサLM35 (NationalSemiconductor製)
・ユニバーサル基板
・配線用電線少々


今回使ったUSBシリアル変換は、CYGNALという会社のワンチップUSB-UARTブリッジIC「CP2101」(右の写真)を搭載している。



- ハードウェア製作 -

 資料なし。ちゃんと回路図とか残してなかった。しまった。

 マイコンPIC12F675は、8ピンタイプの12C508に似たマイコンであるが、10ビットのADコンバータを内蔵している。
 また、内蔵の発振クロックを持っていて外付け部品を使わずにシリアル通信にも使えるので今回の用途には便利である。
 マイコンへの書き込みは秋月電子のPICライターV4を使った。書き込み時のヒューズ設定に注意が必要。

 StrawberryLinuxのキットは、基板のUSBコネクタ部の下にパターンが通っている部分があり、下手に組み立てると短絡するので注意。金属部分の少ないUSBコネクタを使うか、パターン禁止領域にして設計してくれていればありがたいのだが。
 あと、今では直っているが、キットに付属の説明書のコネクタのピン配置が違っていたりしたので注意が必要だった。


- ソフトウェアの製作 -

 マイコン部分のソフトは、CCS社のCコンパイラの割と新しいバージョンが12F675に対応しているので、それを使った。
 ただ、新しいデバイスに対応したばかりのころはいろいろと不具合が多いので注意が必要だった。リスティング出力ファイルをチェックして、意図した正しいコードが出力されているかチェックすることで対処するしかないだろう。今回は、ADCの設定とかヒューズ設定がうまく動かない部分があった。

 PC側のソフトは、コンソールアプリとしてC言語で記述した。VisualC++6.0を使ったが、BorlandCにも簡単に移植できるだろう。

 ソフトでやっている内容は、マイコンでセンサ出力の電圧をAD変換して、シリアル通信でPCに転送。PCでは、その電圧を温度に直すのと、10回分の測定値の平均計算をしている。

[ ソースリスト一式 ]


- USBシリアル変換器のポート番号の検出方法 -

 USBに接続して、レガシーなシリアルポートの代用するためのICは、CYGNAL以外にも存在する。
 ・FTDI FT8U232
 ・Prolific PL2303 など
 これらは手軽に接続できて、電源の給電もできるので便利であるが、唯一難点をあげるとすればポート番号を確認するのが面倒というのがある。
 こういったデバイスが何番のシリアルポート(COM?:)なのかを自動的に調べるソフトウェアを作ってみた。

 レジストリの HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM を調べると、ポート番号が分かる。
 下記は、レジストリエディタregeditでこのレジストリを表示させたscreenshotである。
 
 問題点は
 ・このレジストリを調べる方法は、Windows2000/WindowsXPでしか使えないという制約があること。
 ・複数の同種デバイスが存在した場合には、検出結果が複数出てしまうこと。

 あと、余談であるが、CYGNAL社の製品は、SiliconLaboratoryという会社に買い取られたようで、現在ではSiliconLaboratory社からの入手になる。レジストリに登録される文字の"cyg_ser0"というのが変更になっているかもしれない。
 CYGNALは他にもC8051超小型マイコンを出していて、国内ではサンヨーが提携して取り扱っていたのだが、上記に伴って取り扱い中止になってしまった。


- 動作確認-

 24時間ほど動作させて、室温を記録してみた。うまく動いているようだ。


室温の記録



(余談)
 1台製作後、親指サイズの基板で2つめを製作した。そっちは本業で作った別のUSBセンサを改造して、センサを温度センサに取り替えただけで、回路とかソフトは今回とまったく一緒である。



(後日加筆)
 「PCのCOMポート番号やポートの情報を調べるためのライブラリ」を作った。(2009-01-25)