画像をクリックすると拡大表示されます。
拡大画像からはブラウザの「←戻る」ボタンで戻ってください。
私は趣味で蘭の栽培をしているので、栽培場所の温度を記録したくて、温度記録計を何台か製作しました。
これは、そのうちの1台で、パソコンからコントロールし、単独では使用できません。
結果はエクセルのワークシートに記録されます。
写真は装置の外観とパソコンのサンプル画面です。
![]() |
![]() |
---|---|
装置外観 | サンプル画面 |
CPUはPIC16F873を使用しました。
電源はRS232Cポートより供給します。
家にあるノートパソコン、デスクトップパソコン、USBシリアル変換器の3台で動作を確認しました。
その結果、ノートパソコンはRS232Cポートの供給能力が弱く、VCC=5Vが保てませんでした。(4.5V)
その場合でも、PICは4MHzのXTモード、ADの基準電圧は2.5Vに安定化されているので支障はありません。
ただし、4V以下になるとRS232CのHレベルの関係で通信不良を起こします。
回路図のR1の100Ωは、もう少し小さな値にするか、または省いてしまった方が電源電圧に関しては有利になります。
いずれにせよ、上記の3機種に関しては、回路図のままで問題なく動作します。
センサーには精密級のサーミスタを使用し、10KΩの抵抗で直線近似します。
1%誤差の金属皮膜抵抗を購入すると、大体0.3%位の誤差に収まっています。
PICのADはリーク電流が500nAあるという事で、バッファアンプを入れました。
NJM2119はバイポーラのOPアンプですが、入力バイアス電流は標準で18nA、最大で50nAです。
ただし、バッファアンプを使用しなくても問題無いかもしれません。(比較実験はしていません。)
サーミスタは電圧を印加すると自己発熱します。
何度、上昇するかは計算式が用意されています。
今回の回路では、自己発熱は0.2℃以下です。
自己発熱を下げるには、基準電圧を下げれば良く、電圧が1/2になれば、発熱は1/4になります。
ただし、信号のレベルも下がるので、別の問題が発生します。
回路図はここをクリック
ファームウエアの作成にはCCSCコンパイラを使用しました。
計測のタイミングはパソコン側で作成しています。
パソコンからの計測要求により、温度値を返送します。
温度値を求めるには、サーミスタのデータ(5℃単位の抵抗値)を使用しています。
AD値は10KΩの抵抗とサーミスタで分圧された電圧となりますので、温度と電圧の関係から検量線を求めておきます。
サーミスタは、一般的に、温度範囲が50℃以内であれば、1本の抵抗で、誤差±0.6℃程度で直線近似出来ます。
したがって、気温であれば−5℃〜+45℃とか、−10℃〜40℃の計測範囲にすれば良い訳です。
今回は試しに、何回かに分けて折れ線近似し、計測範囲を−40℃〜90℃としています。
ただし、分圧抵抗の値は10KΩ固定であるので、特性は若干、悪くなっているかもしれません。
また、折れ線部分では誤差が大きくなりがちです。
PICの内蔵EEPROMにはCH毎の補正係数が書き込める様にしてあります。
この値はパソコンから読み書き出来ます。
回路やリファレンス電圧のバラつきに効果があります。
パソコン側のソフトはエクセル2000のVBAを使用しています。
エクセル2000とエクセルXPでは動作を確認していますが、それ以降のエクセルでの動作を確認していません。
モードレスフォームを使用しているので、エクセル97以前のバージョンでは動作しません。
通信にはMSCOMMのような追加OCXを使用せず、API関数を使用しています。
したがって、標準のエクセルだけで動作するはずです。
インターバルタイマーもAPI関数を使用しているので、時間は正確です。
ただし、パソコンのカレンダータイマーと完全に同期している訳ではないので、時々、時間データが不連続になります。
(インターバルタイマーのタイミングでカレンダータイマーを読み出している。)
私は、VBAを使うのは、今回が初めてであるので、使い方に何か間違いがあるかもしれません。
![]() |
![]() |
![]() |
![]() |
---|---|---|---|
メニューフォーム | ポート設定フォーム | 温度補正フォーム | 計測フォーム |
メニューフォームは常に表示されるモードレスフォームです。
最初、メニュー項目をエクセルのツールバーに登録したのですが、この時シートの置かれているパスが記憶される様です。
したがって、ワークシートを別のフォルダに移動すると動作しませんでした。
この件に関しては、私の経験が浅いための問題で、何か良い方法があるのかもしれません。
仕方が無いので、メニュー項目を貼り付けたモードレスフォームを作成しました。
ツールバーと書かれたボタンがありますが、これはエクセル本来のツールバーを表示/非表示するものです。
API関数を使って×ボタンを消しているところに注目してください。
ポート設定フォームは通信ポートを選択します。
通信条件は設定の必要がありません。
温度補正フォームはCH毎に温度値の微調整が出来ます。
設定した補正係数はハードウエア側のEEPROMに書き込まれます。
計測フォームは計測条件を設定し、サンプリングをスタートさせます。
白色のエディットボックスは直接、文字の書き込みが可能です。
黄色のエディットボックスは表示専用かボタンで設定値を選択します。
このフォームも×ボタンを消去しています。
ワークシートは使用者が改変すると、その後の計測に不都合を生じます。
したがって、毎回、見えない「定型フォーム」から「入力フォーム」がコピーされます。
前回の入力シートが残っている場合、計測開始時に確認の上、上書きされます。
入力データを残したい場合はシート名の「入力」を適当なシート名にリネームしておいてください。
作成されたシートは全て削除しても構いません。
ただし、エクセルの仕様で、最低限1枚の表示シートが残っていなければなりません。
リネームされたシートを残し、「入力」シートを削除しても構いません。
![]() |
![]() |
---|---|
範囲選択フォーム | 切り張りフォーム |
範囲選択フォームはデータの項目や範囲を選択します。
これはエクセルが本来、持っている機能ですので、このフォームを使わなくても手動で選択出来ます。
しかし、データ数が多くなると範囲選択の為にシートをスクロールするのが大変になってきます。
従って、画面を動かさなくても数値の指定で範囲を選択出来るようにしました。
切り張りフォームは元データの一部分を切り取って新たなシートを作成するためのものです。
やはり、データ数が多くなると切り張りが大変になるので作成しました。
結果に対しての責任は負いません。
メンテナンスやアフターフォローは行いません。
私の使っているCCSCはバージョンが古いので、その後、関数等の仕様が変更になっている可能性があります。
修正するかコンパイル済みのHEXファイルを使用してください。
ソフトウエアのダウンロード
ファームウエアのソース、実行モジュール(HEX)、エクセルのワークシート(VBAマクロ組み込み)
上記、3点がZIP圧縮されています。