Arduino で簡易オシロスコープを作ってみました。簡単に作れるので、ぜひ作ってみてください。 このページの内容を基にした記事がマイコンと電子工作4 特集「LilyPad & Arduinoを使ったテクノ・クラフト」に掲載されています(記事予告)ので、こちらもどうぞ。
入力チャンネル数 | 2 |
入力電圧範囲 | 0 to 5[V] |
入力インピーダンス | 10kΩ?, AVRの仕様通り |
電圧レンジ(VOLTS/DIV) | 1[V], 0.5[V], 0.2[V], 0.1[V], 50[mV] |
時間レンジ(TIME/DIV) | 10[s], 5[s], 2[s], 1[s], 0.5[s], 0.2[s], 0.1[s], 50[ms], 20[ms], 10[ms], 5[ms], 2.3[ms] (4.3ksps), and 1.2[ms] (8.6ksps, samples only 1 channel) |
トリガモード | Auto, normal, scan, and one shot |
11個のスイッチに以下の機能を割り当てています。1枚目の写真のスイッチの並びと表の中での位置が対応しています。2から5段目は、2個のスイッチのうち左側が、一般的なオシロのつまみの左回し、右側が右回しに対応するようにしています。
メニュー 1 | メニュー 2 | メニュー 3 | |||
Menu | Start/Hold | Menu | Start/Hold | Menu | Start/Hold |
VOLTS/DIV (ch 1) | offset level (ch 1) | NORM/INV/OFF (ch 1) | |||
VOLTS/DIV (ch 2) | offset level (ch 2) | NORM/INV/OFF (ch 2) | |||
TIME/DIV | Trigger level | Trigger inputs (ch 1 or ch 2) | |||
Trigger mode | Trigger edge | ||||
Send | Send | Send |
簡易オシロスコープのスケッチは、Arduino: Playgroundで紹介されているKS0108 Graphics Library を少し変えたものが必要です. また、抵抗値のばらつきのため、スイッチの判定閾値の調整が必要です。コメントアウトしている、シリアルポートで出力する部分を有効にして、調整してください。また Arduino の 5V 電源に参照電圧が依存しているため、電圧に合わせて内部の計算を変えるとよいでしょう。
このオシロのスケッチをaitendoで買った1680円液晶(2.6インチ液晶 for Arduino UNO[UNO026LCD7781TP], 液晶コントローラは ST7781)で動くようにしてみました。液晶にピンをとられてしまっているので、1チャンネル入力(A5)のみ、設定変更用のスイッチはなく、スケッチを書き換える必要があります。もう一つマイコンを使ってタッチパネルで操作ができといいなとは思っています。
次のファイルを使ってください:
// Declare variables and set defaults here // Note: only ch1 is available with Aitendo's parallel 320x240 TFT LCD byte range0 = RANGE_MIN, ch0_mode = MODE_OFF; // CH0 short ch0_off = 204; byte range1 = RANGE_MIN, ch1_mode = MODE_ON; // CH1 short ch1_off = 204; byte rate = 3; // sampling rate byte trig_mode = TRIG_AUTO, trig_lv = 30, trig_edge = TRIG_E_UP, trig_ch = 1; // trigger settingsの部分を変えます。range1変数で電圧レンジを決めます。0,1,2,3,4で、それぞれ1[V/div], 0.5[V/div], 0.1[V/div], 50[mV/div]になります。rate変数で時間軸のレンジを決めます。0が最高速度, 1が2番目、2が3番目の速度です。3から13で、5[ms/div], 10[ms/div], 50[ms/div], 0.1[s/div], 0.2[s/div], 0.5[s/div], 1[s/div], 2[s/div], 5[s/div], 10[s/div]になります(時間軸のレンジにはバグが残っているかも)。 ch1_off変数で電圧軸のオフセットを、trig_mode変数でトリガモード(TRIG_AUTO, TRIG_NORM, TRIG_SCAN)を決めます。trig_lv変数はトリガレベルの設定です。trig_edgeはアップ(TRIG_E_UP)とダウン(TRIG_E_DN)を決めます。