Arduino講座 1000円で作れる簡易USBオシロスコープ

九州工業大学 情報工学部のホームページにて、Arduinoを簡易USBオシロスコープにするためのソフトウェア『Kyutech Arduino Scope』が公開されています。
すこし触ってみたところ電子工作の初心者がArduinoやオシロスコープの使いかたを学ぶのにちょうどいいなと思い、Kyutech Arduino Scopeを使ってみようという電子工作の勉強会を企画しました。このページでは、その勉強会ための資料をまとめています。

Kyutech Arduino Scopeの画面


電圧を図ることが出来る代表的なツール
電子工作をやっていると、動くはずの回路が動かなかったり誤動作することがよくあります。そのようなときに、問題点を明確にし解決するのにテスター、オシロスコープ、ロジックアナライザーが役に立ちます。
どれも似たようなツールですが、それぞれ得意なことがことなりますので、ぜひ使いかたを覚えましょう。

テスター
電圧・電流・周波数・Duty比・抵抗などを測定できます。オシロスコープの様に電圧の横軸時間のグラフで見ることはできません。
500~10000円くらいで購入できます。

オシロスコープ
電圧の時間変化を見ることができます。業務用だと数万~百万円、趣味で使えるような組み立てキットは約3000円で購入できます。
今回はArduinoの使いかたも理解できるので九州工業大学さんのKyutech Arduino Scope』を勉強会の題材に選びました。

ロジックアナライザー
デジタル信号を横軸時間、縦軸 HighまたはLowの信号を確認することができます。UART・I2C・SPIなどの通信の信号の場合High or Lowだけでなく、文字列としても表示可能です。
最近は750円のUSBロジックアナライザーもあり、こちらに使いかたを記述しましたので興味があるかたは試してください。

必要な物(ハード)
Arduino または Arduino互換機
私は以下の2つの中国製Arduino互換機で動作することを確認しました。
ブレッドボード
私は安く購入したいので、以下のような物を使用しています。
ジャンパーワイヤー
ブレッドボードで配線を行うときに使います。以下のような安いジャンパーワイヤーで十分です。

抵抗(1kΩ、100kΩ):
Kyutech Arduino Scope』のホームページにおいて、Arduino簡易オシロの電圧測定およびトリガ入力チャンネル(A1,A2,A3)の保護用に1kΩ、トリガー電圧を作るのRC回路のために100kΩを使用しています。使用しなくてもある程度動かすことはできますが、電子工作初心者の方は抵抗の使いかたを学んでおいた方がよいと思いますので入手しておきましょう。
私は以下の物を購入しましたが、テスターで測定してみたところ、誤差が1%以内に収まっていないので、秋月電子等でちゃんとしたものを買った方がよいかもしれません。
セラミックコンデンサ(1uF):
トリガー電圧を作るの回路やパルス信号をなますためにのRC回路として1uFのセラミックコンデンサを使用しています。私は月電子の以下のコンデンサを購入しました。高いものではないので、電子工作をする始める方は、0.1uFや1uFのセラミックコンデンサをいくつか購入しておいた方がよいと思います。
必要な物(ソフトウェア)
Arduino IDE
Arduino プログラムの開発環境で、簡易オシロスコープのArduinoプログラムをArduinoにフラッシュするのに必要なので、こちらから各OSに対応した物をダウンロードしてインストールしてください。2017/9/07現在、ARDUINO 1.8.4が最新となっています。

Processing
Processing(プロセシング)はMITメディアラボで開発さられていた電子アートとビジュアルデザインのためのオープンソースのプログラミング言語および統合開発環境です。簡易オシロスコープのPC側のプログラムを実行するのに必要なので、こちらから各自のOSに対応した物をダウンロードしてインストールしてください。

Kyutech Arduino Scope
今回使用するArduino簡易オシロスコープのArduinoおよびPC上で実行するプログラムになります。こちらからダウンロードしてください。

USBシリアル変換チップのドライバー
PCとArduinoがシリアル通信を行うためには、Arduinoに搭載されているUSBシリアル変換チップのドライバーをPCへインストールする必要があります。スイッチサイエンス等で購入したArduinoの場合、ドライバーインストールが簡単なようですが、安いArduino互換機を購入した場合、ドライバーインストールに苦労します。様々なOSおよびUSBシリアル変換チップがありますので、ここではドライバーをインストールするのに必要な情報を探す方法を記載しておきます。
  1. 購入したArduinoに搭載されているUSBシリアル変換チップ名を調べる。Amazon等で購入した場合、レビューを見ていくとUSBシリアル変換チップ名を記載されている方やインストールする方法が記載されていることがあります。 こちらを見ると純正品はAteml ATmega16U2、安い互換機はCH340Gが使用されているようです。
  2. Googleで『OS名 チップ名 ドライバ』で検索をかける
参考リンク 
CH340GドライバをWindows7( Windows10も同じ)へインストールする方法はこちらで解説されています
Mac OSにCH340Gドライバを入れてみた


ArduinoでHello World & 動作確認
  • Arduino IDEを起動し、プログラムを記入するエディタ部分に以下のHello Worldプログラムを記載する(コピペ可)。
プログラムを記載するエディタ部分

記載するHello Worldプログラム
/*setupは起動後ときに最小に呼び出される関数でここで様々な初期化の処理を行います*/
void setup() {
   //シリアル通信の初期化しシリアルモニタへ文字列を出力できるようにする 9600はボーレート(通信速度)
   Serial.begin(9600);
}

/*setupの後、終了するまで繰り返し呼び出される関数です*/
void loop() {
  Serial.println("Hello, World");                    //シリアルポートに"Hello, Worldと出力する。
  delay(1000);                                      //1000m秒=1秒間スリープする
}
  • ファイル⇒名前を付けて保存を押し、Hello_Worldという名前で保存する
  • 左上の検証ボタンを押す。エラーが出る場合はプログラムに誤りがありますので、上記のプログラムと見比べて間違って部分を探して修正してください。
  • ArduinoとPCをUSBケーブルで接続する
  • ツール⇒ボードを押し、使用しているボードを選択する
(例)Arduino UnoやUno互換機の場合 ⇒ Arduino/Genuino Unoを選択する
   Arduino NanoやNano互換機の場合 ⇒ Arduino Nanoを選択する
(※)Arduino Nano互換機の中には Arduino/Genuino Unoを選択する必要がある物もあるようです。
  • 左上のマイコンボードに書き込むボタン及び右上のシリアルモニタボタンをおすとシリアルモニタウィンドウが開きHello Worldが表示されます



Kyutech Arduino Scope』のArduino用プログラムをArduinoに書き込む
  • ダウンロードしたZIPファイルを解凍して出来た、Arduino\kit_scopeの中のkit_scope.inoをArduino IDEで開く
  • 左上の検証ボタンを押す
以下のようなメッセージが出ますが問題なく動作するようです。
最大30720バイトのフラッシュメモリのうち、スケッチが5362バイト(17%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が1691バイト(82%)を使っていて、ローカル変数で357バイト使うことができます。
スケッチが使用できるメモリが少なくなっています。動作が不安定になる可能性があります。

  • 左上のボードへ書き込むボタンを押す
検証ボタンを押したとき同様以下のようなメッセージが出ますが問題なく動作します。
最大30720バイトのフラッシュメモリのうち、スケッチが5362バイト(17%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が1691バイト(82%)を使っていて、ローカル変数で357バイト使うことができます。
スケッチが使用できるメモリが少なくなっています。動作が不安定になる可能性があります。


Kyutech Arduino Scope』のPC側のプログラムを起動する
  • ダウンロードしたZIPファイルを解凍して出来た、Processing\kit_scopeの中のkit_scope.pdeをProcessingで開く
  • 左上にある再生マークを押す

  • 以下のようなオシロスコープの画面が開いた場合問題なく動作しています
※以下のようなタイトル画面で止まってしまう場合Arduino側プログラムとうまく通信出来ていません。
Arduino IDEがArduinoのシリアルポートを使用しているとKit_Scopeが通信できませんのでArduino IDEを閉じてください。

Kyutech Arduino Scope』の操作方法

※クリックして青色で表示される項目はマウスのホイールで値を上下させるが出来ます。
※クリックして緑色で表示される項目はマウスのホイールで値を上下、Shift+マウスのホイールで値を大きく上下させることができます。
※スペースボタンで測定開始と測定停止を行うことができます。

⓪波形表示部での操作
・カーソルの位置の電圧読み取り
・左ドラッグで矩形を描画し、電圧や時間に関する情報を表示

①チャンネル選択に関する操作
Signal : 計測チャンネル変更(CH1,CH2,DUAL) : キーボードの左右 or 左ボタンクリック or ローラーで操作

②CH1の設定、③CH2の設定
Volts/div : 電圧軸のスケール設定
position :  0Vの位置を変更(縦の移動)
variable :  縦軸の縮小
invert : 上下反転

④時間軸の設定
time/div : 時間軸のスケール設定
psition : 時間軸のオフセット(左右の移動)
mag : 時間軸の拡大縮小
scan : 低速時の描画方法(詳細不明)

⑤トリガー設定
source : トリガー信号に用いるチャンネル(CH1 = A1, CH2 = A2, CH3 = A3)
mode :  single (トリガーが左端に来たら停止)、 normal (連続計測)、 Auto (連続計測?, normalと何が違うか不明)
level : トリガー電圧を設定する
slope : rising または falling
delay : トリガーからdelay時間後の波形が画面に表示される(信号の立ち上がり部分が見れないが通常のオシロと逆じゃない?)

⑥計測関連の設定
equiv : 等価サンプリングのOn, Off (参考)等価サンプリングとは
dots :  実際の計測点をドットで表示するかどうか
vref calib : 基準電圧値 (参考)A/Dコンバータ
inc unit : 不明

⑦パルス出力
freq : パルスの周波数
duty : duty比

⑧FFTの設定
vertical : 縦軸( off:表示なし,  dBV(rms) = 実行値のデシベル表示, dBV(0-p) = ピークのデシベル表示, v(rms) 実行値の電圧表示, v(0-p) = ピークの電圧表示)  (参考)デシベル
signal : CH1 または CH2
vertical/div : 縦軸のスケール
position : 0点の位置
variable : 縮小
window : FFTのウィンドウ選択(rectangular, hanning, hamming, blackman, flat-top) (参考)FFTと時間窓(ウィンドウ)



Kyutech Arduino Scope』で信号を見てみよう
※今回は測定する電圧が5V以下であることが分かっているのでKyutech Arduino Scope』のページで推奨されている1kΩの保護用の抵抗を省略しています。
※PCや電子部品を壊さないため、以下のような回路にならないよう確認しながら作業を行いましょう。
過電流が流れる回路
電源(5V, 3.3V)とGNDをショートさせる(特にスイッチを使うときは注意)
GPIOで出力High設定にしている端子とGNDをショートさせる
GPIOで出力Low設定にしている端子とGNDをショートさせる
GPIOで出力Low設定にしている端子と基準電圧をつなぐ

逆電圧がかかる回路
異なる電源を並列につなぐ(特にUSBケーブル接続時は注意)
GPIOで出力High設定にしている端子と基準電圧をつなぐ
モーターを手で回す




①簡易オシロになにも接続しないときの電圧を見てみよう
Kyutech Arduino Scopeの基本回路(何も接続しない回路)は下図のようになります。

私のPCでは下図のように50Hzのノイズが載っています。ノイズが出ている方はちょうどよいのでノイズの波形を見てみたり、FFTをかけて周波数を確認してみましょう。
(端子電圧測定時はノイズはなくなります。またプルダウンするとパルス電圧測定時に測定電圧がずれてしまいました。)




②5VをCH1(=A1端子)へ入力してみましょう
下図のように5VをCH1へ直結して、vref calib(基準電圧)に5Vと入力しましょう。
尚、実際の電圧を知りたい場合は、キャリブレーション(テスター等でArduinoのGNDと5V端子の間の電圧を測定しvref calibに入力)する必要があります。
また別の方法として、ArduinoのanalogReferenceコマンド基準電圧ICを使えばより正確な電圧が測定できると思いますが試していません。






③パルス出力の電圧を確認する
以下のようにパルス出力端子(D3)とCH1(A1端子)を直結して、出力されているパルスを確認してみましょう。
うまく表示されない場合は、オシロスコープのCH1の設定や時間軸の設定を変えて波形を表示しましょう。



波形がうまく表示できたら、以下のように1kΩの抵抗と1uFのコンデンサでRC回路を作成し、時定数(5×0.63 = 3.15Vに達する時間)を確認してみましょう。
④トリガー回路はどうなっているの?
Kyutech Arduino Scope』のページにも詳しい解説はありませんが、トリガー用回路の動作について理解したい方は、A1(CH1)をD5やA0に接続しどのような信号になっているか見てみてみましょう。

まとめ
以上で勉強会の内容は終了ですが、少しでもオシロスコープやArduinoを使った電子工作がどういうものかイメージしていただければ幸いです。またこのような簡単に使えるオシロスコープは、電気回路の動作を理解するのに役に立つと思いますので、興味がある方はいろいろな電子回路を作って電圧の挙動を確認してみましょう。

最後になりましたが、このような素晴らしいツールを無償で公開されている九州工業大学さんに、この場を借りて感謝したいと思います。



 



Comments