電子工作用に任意の接点出力をグラフ化したいと思い、データロガーを工夫してみました。頻繁に使う事はないと思うので、使うときにやり方を思い出すための備忘録にします。
データ取得用ADコンバータ
使ったのは、Aliexpressに売っている下記のADコンバーター(以下、ADC10)で、データ取得にSTM32 ( STM32F103C8T6 ) マイクロコントローラとCH340 USB-to-serial アダプタを使っているそうです。値段は600円ちょっとですが、送料が高いので1k円を超えます。

\628 23%OFF 通信adcモジュールstm32f103c8t6,USBインターフェース,10チャンネル,12ビット,adサンプリングデータ,データ取得,stm32 f103c8t6| | - AliExpress
Smarter Shopping, Better Living! Aliexpress.com

データロガーを自作!温度や電圧をUSBから簡単に測定してみた
データロガーを簡単に自作出来ました。値段も1000円程度で格安です。 USB経由でデータを取得でき、簡単に表・グラフ化まで対応可能です。 部品の購入方法からデータの取得方法まで手順を一から紹介します。
ADC10導入
引用の記事どおりにすれば、Tera Term にログを取り込むところまで問題なくできました。3.3V未満の測定データをADC10のそれぞれのチャンネルに繋ぎ、USBポートに刺してTera Termでデータを読み込むだけです。この手軽さがこのADコンバータを使ったデータロギングの売りだと思います。
試しに、3Vの電源電圧を分圧して0~3Vまでボリュームで変更できるようにして、これらの電圧をデータとしてTera Termに取り込んでみます。
要注意なのは測定データが3.3V未満であることは絶対です。何の保護回路もなく入力からSTM32にダイレクトに入っています。私は不注意で2個ダメにしました。1個体目は誤って12Vを入れてしまい、スイッチONと同時にADC10が煙を吐いて焼損しました。同時にPCが落ちました。幸いPCは大丈夫でしたが、ADC10は発熱体になってしまいました。
2個体目は過電圧を入れた覚えはないのですが、データを吐き出さなくなりました。PCに繋いだまま信号線の抜き差しをしたので、サージが入ったのかもしれません。原因が不明なので、これから使用するあたって不安が拭えません。本当に取り扱いには細心の注意が必要です。CH信号に電圧が出ている状態での結線はNGだと思います。
それぞれの電圧をADC10のCH0~CH2に振り分けTera Termで取り込んでみました。テスターに表示している電圧は下図のCH1のものです。ほぼ一致していました。取り込み間隔は0.5secごとなので、静的変化をとらえることに向いています。
リアルタイムにデーター可視化
CPLT
参考にした記事では、Tera TermでCSVのログファイルを保存しExcelでグラフにしています。しかしながら、データはリアルタイムに見たいと思ってしまいます。ネットを探すとCPLT というフリーソフトを見つけました。
”COMポートから受信したCSVデータをファイルに保存しつつ、リアルタイムにグラフに表示します。RS-232C出力のあるマイコンや測定器のデータをモニターするのに便利です。” と紹介してあり、ほぼ望み通りです。
ダウンロードした一連のファイルに詳しいマニアルも用意されており、そのとおりにやればインストールとCOMポートやデータチャンネルの設定ができます。
準備万端でデータ表示をさせます。でも、下図のようになり望むべき肝心のデータ表示ができません。原因はCSVデータの書式でした。
このソフトでは、
というような1行横並び書式で各チャンネルの値を読み込みます。一方、このADC10のデータの吐き出し方は、Tera Term事例で示したようにCH0~CH9を束にしての縦並びの出力書式です。データ書式の変換は手が出ないので、CPLTはあきらめるしかありません。
ArduinoなどでAnalog readしたデータをSerialに書き出す使い方なら、このソフトは有効に使えそうです。でもArduinoは10bitなので役不足な気もします。ESP32は12bitだけどADCの範囲の両端で特性がサチュレートするのが問題です。ADC10のAD変換の実力は後で測定してみます。
SeriPlot
The SeriPlot project is a Windows application that can display ADC voltages in real time.
さらに注意書きがあります。このADコンバータ専用のようです。
使い方は、COMポートの番号を設定をするだけで、他のオプションは一切ありません。"Connect"ボタンを押すとチェックしたチャンネルが時系列で表示されました。
このソフトの表示は独特です。横軸は時間軸ですが、スクロールするのではなく左端の時間は描画開始のタイミングで固定のようです。時間の経過とともに横軸が圧縮されて表示されます。計測時間内のデータ変化を一望できるので、慣れればわりと使いやすいかもしれません。
残念なのは、このソフトはビューワーソフトでCSVデータをファイルに保存する機能はありません。本来の目的であるロガーにするためには、CSVデータをファイルに保存するためにTera Termを使わねばなりません。(GitHubの引用記事にはRealTermというソフトが紹介されていました。)
COMポートを共有するには
残念ながら、COMポートは2つのソフトで同時に使うことができません。SeriPlotでデータをモニタしながら、Tera Termでそのデータのログを取ることができないのです。解決策はソフト的に仮想COMポートを作ることらしく、アマチュア無線の分野ではこの手法がよく利用されているようですので、調べて適用してみます。
VSPE
このソフトは32bit版は無料ですが、64bit版は有料です。でも、windows 10でも32bit版が使えるとの情報がありましたので、試しに使ってみることにしました。インストールと設定は下記の記事が参考になりました。VSPEの「Splitter」の機能が目的の機能でした。
設定後、SeriPlotとTera TermでSplitterに割り振った同じ番号の仮想COMポートを指定して接続します。こうやっても、VSPEの「Splitter」の機能のため競合が起こりません。
これでうまくいくはずと期待したのですが、今度は別の問題が発生しました。Tera Termの方はデータがリアルタイムに更新されるのですが、SeriPlotの更新間隔がなぜか30秒くらいになってしまいました。下に示すSeriPlotの横軸は1min/divです。この程度の時間間隔でしたデータを拾えません。仮想COMポートから吐き出されるデータとSeriPlotのデータの取り込みが同期していないような感じです。ゆっくりとした動きならば良いのでしょうが、少し早いとデータ飛びが起こります。これでは使えません。
結局やれることは
- リアルタイムのデータ確認をSeriPlotで行い、測定されるデータに問題ないことを確認した後、
- Tera TermにCOMポートを繋いで、もう一度同じ測定を行いログを取ります。
そして、取ったログをExcelのフィルター機能で各チャンネルごとに抽出してグラフ化します。
データログのグラフ化
3Vの電源電圧を分圧して0~3Vまでボリュームで変更できるようにして、これらの電圧をデータとしてTera Termに取り込みました。そのログをWPS Officeで加工したグラフを載せます。CH0とCH1はボリューム可変でCH2は一定の電源電圧です。
横軸は時間軸で、CH0とCH1は0~3Vを変化しています。CH2は3V固定です。
測定精度
5 1/2桁のDMM(Advantest R6552)を基準(正確な値)としたときのADC10の測定値は下図になります。2つのチャンネルで測定してみましたが、両チャンネルとも同じ特性だと言えます。0~3.3Vの範囲で良好なリニアリティです。ゲインは 0.9845と1.55%マイナスしています。
まとめ
- USBポートにつなぎ、Tera Termのポート設定をするだけで測定電圧をロギングできます。
- 測定精度はー1.5%程度で趣味で使うには申し分ないです。
- 価格は送料込みで1000円ちょっと/1個です。
- 測定間隔が0.5secなので、早い動きは無理です。
- 測定データが3.3V未満であることは絶対です。サージの入力にも要注意です。
- データのモニタとログは同時にはできません。