ADCの値をオシロの様に波形表示させたい

〔マイコンのトップに戻る〕


マイコンの実験を行っているとぉ、如何しても信号の流れや動きを見てみたくなりますよね。
でぇ、オシロスコープやロジックアナライザーが欲しくなるのですがぁ....
値段が高い、貧乏人の私としては手が出せないですねぇ。

LCDオシロスコープキット

LCDオシロスコープキット1  ここの実験でたまに登場する秋月電子の「オシロ
 スコープキット
」です。(写真は秋月さんのを拝借)

 1チャンネルで1MHz程までしか測定出来ないのですが、
 ちょっと見るには重宝します。
 繰り返し発生する様な波形を見るには良いのですが、
 ON/OFFの信号を見るにはちょっと難しいのですよね。

後ぉ、たまに2〜4チャンネルぐらい一緒に見たいと思う時が有るのですよねぇ。
特にON/OFFのロジック信号を見る時はですね。

PICKit2 ロジックアナライザー

PICに書き込む為のツールでPICKit2が有りますが、これを利用する事により3チャンネルの
最大500KHz周波数位までのON/OFFのロジック信号を見る事が出来る様になります。
詳しくは、こちらの「エレキジャックさん」を参考にして下さい。

ハンディ・オシロスコープ

パソコンのマイク端子に信号を入力して波形をパソコンに表示するフリーのソフトです。
マイク端子なのでLとRが有り2チャンネル分表示可能です。
また、マイク端子なので音声信号入力の20KHz程位しか測定出来ませんし、マイク端子は
インピーダンスが低く、高電圧を掛けられないので間にバッファ回路を作ってやらないとダメです。
こちらの「なんでも独り言」さんや こちらの「kkyの電子工作」さんのHP辺りを参考にして下さい。
Vectorのハンディ・オシロスコープ ダウンロードサイトはこちらです。

こちらの神奈川県立総合教育センターのソフトもマイク端子を利用する様ですね、
上のバッファ回路を作り入力すれば同じ様に表示するのではないでしょうか?。
ソフトの外観がオシロスコープの機器みたいで、実に良い仕事してますねぇ〜。

サイトは閉鎖された様です。 *1)

(私はまだこのソフト達を使用した事がないのです、悪しからずですぅ)

DataDisplay

このソフトはシリアル通信を通じてデータを送ればグラフを描きます。
なので、マイコンのADCでデータを読んでシリアルで送れば波形を表示出来ると言う物で、3チャンネルまで対応しています。 ここの記事はこれを使った内容です。
こちらのVecterからダウンロードして下さい、インストールは不要です、解凍したら"DataDisplay.exe"を
実行するだけです。
尚、動作OSにWindows 7がないのですが私のWindows 7 Proでは動作しています。

《Arduinoで加速度センサー値を見てみる》

配線図 こちらの加速度センサーの値を表示させて見たい
と思います。

加速度センサーはアナログ出力なのでそのまま
Arduinoのアナログに繋ぎます。
3軸加速度センサなので、X軸を3番ピンに接続、
Y軸を4番ピンに接続、Z軸を5番ピンに接続です。

電源は5V入力なので0.5V-4.5V程出力されます。

加速度センサーについての詳しい話は別記事で
書きたいと思っています。

@まずは、左の様に配線しましょう。

AarduinoボードをUSBケーブルで接続して、
 arduino IDEを起動させます。

BIDEに下記のスケッチプログラムを
 コピーペーストして貼り付けて下さい。

CIDEツールバーの「Upload」ボタンをクリックしてコンパイルと
 arduinoボードに書き込みを行います。

DDataDisplay.exeを起動させましょう。
---------------------------------------------------------------------
void setup()
{
     // シリアルモニターの初期化をする
     Serial.begin(9600) ;
}
void loop()
{
     int i ;
     long x , y , z ;

     // 各データを100回読込んで平均化する
     x = y = z = 0 ;
     for (i=0 ; i < 100 ; i++) {
          x = x + analogRead(3) ;  // X軸を読込む
          y = y + analogRead(4) ;  // Y軸を読込む
          z = z + analogRead(5) ;  // Z軸を読込む
     }
     x = x / 100 ;
     y = y / 100 ;
     z = z / 100 ;
     // 各軸をシリアル通信で送る
     Serial.print(ADCdisplay(3,x,y,z)) ;

     delay(100) ;   // 100msで繰り返す
}
// ADCから読込んだデータを"DataDisplay"用のデータに変換する
char * ADCdisplay(int kosu, int d1, int d2, int d3)
{
     int i , j , x , p , d[3] ;
     static char buf[18] ;

     p = 0 ;
     d[0] = d1 ;
     d[1] = d2 ;
     d[2] = d3 ;
     // 3チャンネル分繰り返す
     for (j=0 ; j < kosu ; j++) {
          buf[p] = 'X' + j ;  // チャンネル(X/Y/Z)を指定
          p++ ;
          // データをHEX文字に変換する
          for (i=15 ; i > 0 ; i=i-4) {
               x =  (unsigned int)(d[j] << (15-i)) >> 12 ;
               if (x < 0xa) buf[p] = x + 0x30 ;
               else         buf[p] = x + 0x37 ;
               p++ ;
          }
     }
     // 最後にCR・LFを追加する
     buf[p] = 0x0d ;
     p++ ;
     buf[p] = 0x0a ;
     // 変換したデータの格納先アドレスを返す
     return buf ;
}
---------------------------------------------------------------------

DataDisplay.exeの操作

DataDisplay操作1 @DataDisplay.exeを起動すると左図が表示されます。
 Arduino IDEの[ツール]→[シリアルポート]をクリックしチェックの
 付いているコムポート番号を左の「COMポート」に設定します。
 スケッチに Serial.begin(9600) ; が記述されているので、
 このボーレートを左の「ビット/秒(B)」に設定します。
 残りの項目は左の様にセットします。

A以上設定を行ったら[OK]ボタンをクリックします。
 下記画面が表示されます。
 赤い線がX軸 青い線がY軸 黒い線がZ軸

それぞれの方向に上下左右動かしてみた画面です、Z軸(上下方向)は既に1Gの加速度が掛かっていますね。

DataDisplay操作2

画面の右上に「データビット長:」と有りますね、これを"10Bit"に設定します。
これはArduinoのアナログ変換ADCは、電源(Reference)が5Vなので0V〜5Vを0〜1023の
10ビットで変換するので"10Bit"に設定です。

DataDisplay.exeの有るフォルダーに"DATALOG"フォルダーが有ります、これは表示したデータを
自動的に保存しています、なのですがこれを削除する機能がないので不要なら定期的に手動で削除
しないとファイルは溜まるだけですので注意が必要です。

殆どデータを表示するだけな機能ですので、使い勝手等に若干不満も有りますがぁ、
まあ、良いんではないでしょうか?、チョット見いには。
ちなみにぃ、ロジアナの様な事が出来るかなっと思いやって見たのですがぁ、
ちょっとぉ無理っぽいですね。
行うなら、マイコンのメモリにデータを記憶させ、その後その内容を表示させる様な仕掛けが必要っぽいですね。

関数の使い方を説明します。
この関数自体はPIC等の他のマイコンでも利用出来ると思いますのでコピペして使って下さい。

 ans = ADCdisplay(kosu, d1, d2, d3)
  ADCから読込んだデータを"DataDisplay"用のデータに変換する処理
  変換データのフォーマットは、ダウンロードし解凍した"DataDisplayの使用法.pdf"を見て下さい。
   kosu :3チャンネルの内で、何チャンネル分のデータを送るか設定(1-3)します
   d1  :1チャンネル用のデータを指定します
   d2  :2チャンネル用のデータを指定します
   d3  :3チャンネル用のデータを指定します
   ans  :変換したデータの格納先アドレスを返します
  例)1チャンネル分のデータを送る場合

     int x ;

     x = analogRead(3) ;
     Serial.print(ADCdisplay(1,x,0,0)) ; // X Ch:REDでグラフ表示される

《圧電振動ジャイロモジュール》

こんどは2軸圧電振動ジャイロセンサーの値を表示させて見ました。
モジュールはこちらの物で左右方向に回転させて表示させて見ました。

DataDisplay操作3

静止時の出力電圧が、1.35Vなのでまぁ大体その辺りのオフセット値ですね。
下図は、モジュールを台の上に置いた時と手に持った場合の値です、
手に持った場合は微妙に揺れていますねぇアル中の私としては意外とぉ優秀じゃぁねぇ?。

DataDisplay操作4


LCDオシロスコープキット2
 左はジャイロセンサー値の出力を
 LCDオシロスコープキットで表示させて見ました。

 なので、左はセンサーの生の出力で
 上はADCの値と言う事ですね。

《その他》

加速度センサーを買ったのですがぁ、如何しようかなぁ、歩数計(万歩計)を作って見ようかなぁ?
傾きの計測でも行って見るかなぁ?。
"3軸加速度センサで傾斜角度を測定してみます"(Arduino編)(PIC編)のページを追記しました。

このジャイロモジュールは振動を検出するには簡単に行えますが、角度を検出しようとするとセンサの
出力段にハイパスフィルター回路が有るので正確な角速度が得られないらしいです、
その場合の方法がこちらのHPに書いて有ります、参考にして下さい。

"加速度センサーとジャイロセンサーでカルマンフィルターの実験"はこちらです。 *1)



リンク切れ見直し(*1) 2017/01/10


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2017 Shigehiro Kimura All Rights Reserved.