PIC12F683(8ピン)を使った4チャンネルデータロガーインターフェイス(A/D変換→RS232C→パソコン)(※休止中です)
●概要
PIC(ワンチップマイコン)のADコンバータを利用してパソコンにアナログ値を取り込めるようにするものです。
パソコンにはRS-232C(シリアル)ポートを通して通信を行います。AD変換は4チャンネル有り、10ビット値をそのまま返します。
温度センサー、気圧センサー、加速度センサーなどを接続することによってパソコンでのデータの収集が可能です。
8ピンのPICとRS232C(MAX232互換)ドライバを使ってとても簡単な構成にしています。
●なぜUSBではなくRS232Cなのか?
最近のPCではRS232Cインターフェイスを持たないものもあり、相当古い規格であることは分かっています。できることならUSB対応型を作りたかったのですが(別に作成済みです)、RS232Cにしたのにはいくつかの理由があります。
RS232Cなら、ドライバソフトも必要ないし、製作記事もたくさん見あたります。
もし、RS232Cポートを持たないPCをご使用の方は、「USB−シリアル変換ケーブル」等をご使用ください(すべての変換ケーブルが使用できるかどうかは分かりません)。
●お送りする部品リスト(※休止中です)
部品名 |
型式等 |
数量 |
PIC |
12F683(ICソケット含む) |
1個 |
IC |
MAX232(または同等品) |
1個 |
温度センサ |
S8100B |
1個 |
D-SUB9ピンコネクタ |
メス |
1個 |
コンデンサ |
100uF程度 |
1個 |
コンデンサ |
0.1uF程度 |
5個 |
抵抗 |
1MΩ |
1個 |
※11月7日出品分からリストを変更しています。
PIC、MAX232を組み合わせてテストした後に出荷致します。
●仕様
・RS-232Cの通信速度は9600bpsです。
・回路をシンプルにするため、クリスタル、セラロックなどは使用せず、PIC内蔵クロックを使用しています。
そのため、使用温度などの条件によっては正常に通信出来なくなる可能性があります。出荷前に室温でテストを行った上出荷いたします。
(比較的精度の低い内蔵クロックでも19200bpsの通信が可能でした。様々な条件でも安定に動作するように、今回はスピードを落とした9600bpsでプログラムします。)
・データサンプリング周期は使用条件に変化するかもしれません。最大で10回/秒程度とお考えください。
・電源をA/Dコンバータのレファレンスとして使っておりますので,安定(温度的にも)した5Vの電源が必要です。
・テスト回路の通り温度センサを取り付けると、温度の簡易測定が可能です。
・チャンネル番号(0〜3)を送信する事によって、そのチャンネルに対応したアナログ値をA/D変換し、0〜1023の範囲のテキストで返答します。
・A/D変換の入力インピーダンスはオペアンプ等を利用し出来るだけ低いものを使用してください。時間応答は犠牲になりますが、1uF程度のコンデンサを使用することで比較的高インピーダンスでも使用可能です。
●温度測定について
・温度の測定範囲はセンサの使用範囲(-40〜+100℃)によります。
・温度計としてどの程度の精度があるかは調べておりません。計測値は参考程度とお考えください。
・必要に応じてプログラムの演算定数を変更してください。
・分解能はおよそ0.6℃です。
・電源電圧が変動すれば正確な温度測定ができません。
●応用例
・温度などの長期計測
・アナログ値の監視
●サンプル通信ソフト(VB6のソースファイル)
下記にテスト用のサンプルプログラムを公開いたします。
あくまで使用例ということでお考えください。
これを参考に、グラフ化・数値監視などの機能を自作してください。
●サンプル通信ソフトその2(EXECL表計算,約89kB)
エクセルのマクロを使った通信ソフトも作製しました。
あくまで使用例ということでお考えください。
エラー処理も不十分です。ご了承ください。
(Windows Me) + (EXCEL2000) で動作確認していますが、その他の環境では使えるかどうか分かりません。
これを参考に、グラフ化・数値監視などの機能を自作してください。
※COMポート番号は1〜9の範囲でお使いください。USB-シリアル変換ケーブルを使用する際はデバイスマネージャーにて設定を行ってください。
●サンプル通信ソフトその3(三四郎表計算(ジャストシステム製),約26kB)
三四郎のマクロを使った通信ソフトも作製しました。
あくまで使用例ということでお考えください。
エラー処理も不十分です。ご了承ください。
(Windows Me) + (三四郎9) で動作確認していますが、その他の環境では使えるかどうか分かりません。
これを参考に、数値監視などの機能を自作してください。
●データロガーソフト
先日お取り引き頂きました方が作成した物を公開してあります。ご厚意をうけてリンクをはらせていただきました。24時間の連続計測ができます。
●データロガーソフト(約350KB)
先日お取り引き頂きました yoshiyabu様が作成した物です。ご厚意で頂いた物です。
以下が紹介文です。
・データロギング:CSVファイル形式で基本的に無限に可能。モニターだけも可能。
・ロギング間隔:1点ずつの入力や多点平均での出力(特にデータの平滑化には有効)
・グラフでリアルタイムにモニター表示(時間軸は任意に設定可能)
・グラフの縦軸表示位置の変更が可能(通常の重ねあわせ表示〜個別表示まで)
・入力信号の変換設定(10bit信号→温度データ)が随時可能
・各チャンネル間の演算可能
・トリガー機能あり(on/offとも)
・1スキャンで終了する機能(オシロスコープ的な使い方)で最速20ms(50Hz)までの収集が可能(ただし1チャンネル入力に限る)
・通信チェック機能あり
デメリット
・PCの能力に依存するため、CPU、メモリ、HDがビジーになるとデータ収集時間がずれる
(収集時間シフト量の表示機能はあり)
作成ベース
Excel2000 on 2000
動作確認
Excel2000, 2003 on Me, 2000, XP
※このソフトに関する質問にはお答えできません。 yoshiyabu様のメールアドレスも併せて公開させて頂く許可を得ておりますので、そちら(yoshiyabu@rio.odn.ne.jp)へお願いいたします。
★仕様変更対応の範囲
・仕様変更はありません
★関連部品の追加お取り引き
ココに一覧表があります。必要な部品がございましたらご連絡ください。

テスト回路

テスト回路の回路図

データ通信ソフト(VB6)の実行画面
この例では、チャンネル0,1はプルダウン(無接続)、チャンネル2はプルアップ(無接続)、チャンネル3に温度sensorを接続しています。

データ通信ソフト(VB6)の作成画面

データ通信ソフトその2(エクセル)の実行画面
●オークション関係トップページへ(他にもいろいろと出品しています)
●PIC関連の出品物の入札を考えている方に(必ずお読み下さい)
下記がソースファイルです。参考程度ということでご理解ください。
Dim Channel As Integer 'チャンネル番号(0〜3)
Private Sub Form_Load()
Channel = 0
MSComm1.CommPort = 1 '使用するcomポート番号(必要に応じて変更してください)
MSComm1.Settings = "9600,n,8,1" '変更しないでください
MSComm1.PortOpen = True 'ポートを使用開始します
MSComm1.InputLen = 0 '変更しないでください
Timer1.Interval = 100 'タイマー間隔として100mSとしています。小さすぎると通信エラーを起こします。
MSComm1.Output = CStr(Channel) '初回のみの処理,PICにデータ要求を行います。
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False 'ポートを閉じて終了します
End Sub
Private Sub Timer1_Timer()
Dim buf As String '受信文字列格納用
buf = MSComm1.Input '文字列を受信します
If Len(buf) = 0 Then '空っぽなら通信失敗
Label3.Caption = "通信に失敗しました"
Else
Label3.Caption = ""
Label1(Channel).Caption = "CH" & Channel & " : " & buf
Channel = Channel + 1
If Channel = 4 Then
Channel = 0
On Error Resume Next 'まれに文字化けを起こす場合が有ります。その時のエラー処理
Label2.Caption = (210 - CInt(buf) * 6 / 10) & " ℃" 'CH3は温度センサー接続のため,温度も表示します。温度センサーの特性によります。定数を変更し校正してください。
End If
End If
MSComm1.Output = CStr(Channel) '次のデータ要求を行います。
End Sub