Arduinoでオシロスコープを組み立て

今回は、大変お世話になっている「ラジオペンチ」さんのブログで紹介されている、「OLEDオシロスコープ」を組み立てます。
Arduino で OLED と LCD をどうやって使うかが分かってきたので、作ろうと思っていたオシロスコープに取りかかります。

まずは、「ラジオペンチ」さんのブログのこちらをご覧ください。
このカテゴリの最初を拝見すると、「ラジオペンチ」さんが「OLEDオシロスコープ」の製作を開始したのが、2019年1月ごろで色々な改造を経て完成したのが2020年8月ぐらいのようです。

ラジオペンチさんのブログの完成画像

ネットで「Arduino」と「Osciloscope」で検索すると、OLEDを使った「ラジオペンチ」さんのパクリコピー品のオシロスコープが多数見つかります。くどい様ですがオリジナルは「ラジオペンチ」さんです。
(それだけ、オリジナルが素晴らしいという事なのでしょうが、YouTubeの動画を見ると起動時の名前だけを自分の物にした作品のなんと多い事か・・・)

OLEDオシロスコープの種類と性能

さて、ここで情報を整理します。
「ラジオペンチ」さんの「OLEDオシロスコープ」の最終形態は、ACモードが搭載されたV300です。

そこで公開されているArduino用のスケッチでオシロスコープを製作すると、以下の性能になります。
(素晴らしいです!)
入力モード:+DC, AC (DCの負電圧は不可)
垂直感度:0.2 ~ 50 V
水平感度:50 us ~ 200 ms
サンプリング周期:8 us (125kHz)
トリガ:50% p-p 自動、スロープ指定可能
その他の機能:波形周波数表示、波形デューティ比表示、ゼロオフセット、マルチメータ、電源電圧表示

このオシロスコープを改造されたのが「siliconvalley4066」さんです。(HPはこちら)V402が最新です。
追加・改造された機能
水平感度拡張:20us/div(25samples/div)
FFTによるスペクトラム表示
校正用パルス信号
等価時間サンプリング:~ 16Msps

さらに、「siliconvalley4066」さんが、新たに2チャンネルのOLEDオシロスコープを製作されています。
こちらは GOscillo132が最新のようです。
Arduino(ATmega328P)でこれだけの機能を搭載するとは凄すぎます。

チャンネル数:2
入力モード: DC、AC
電圧レンジ(volts/div): 1V, 0.5V, 0.2V, 0.1V, 50mV
時間レンジ(time/div): 10s ~ 580us (17ksps)、(1チャンネルのみ) 500us ~ 33us (307ksps)
、62.5us ~ 0.625us (16Msps)(等価時間サンプリング)
FFT機能:8bits 128 samples(200ms/div以下)
パルスジェネレータ機能:0.238Hz ~ 8MHz (約5Vpp方形波 Duty ratio可変)
ファンクションジェネレータ機能: 0.01Hz to 9999.99Hz(実用は1kHzまで) 約5Vpp
8波形: sine, saw, revsaw, triangle, noise, sinc5, trapezoid, chainsaw

使用部品

ペンタイプのポータブルオシロスコープを目指します。
イメージは「ラジオペンチ」さんのラフスケッチです。
(ラジオペンチさんのブログより引用)

ラフスケッチ

これを実現する方法を考えるために、いつもの百均で良い感じのケースを探します。

本体ケース

「タッチライト ブロック」です。ダイソーやセリアで扱っています。税抜き100円です。
単4電池を3本内蔵可能ですが、2本を使い5 Vへ昇圧します。

タッチライト ブロック

フタ部分を開けて、LED部を取り外します。
(上部のケースを外すには、横の部分から薄いプラ片などを挿入すると簡単に開きます。)
上側の単4電池2本の電池ケースは、そのまま電池ケースとして使用します。
下側の電池ケース部分は取り除いて、その部分に基板を実装します。

ケースの下部

「ラジオペンチ」さんが製作されたペン型オシロは0.96インチのOLEDを使用していますが、せっかくなので最新版で対応している1.3インチOLEDを使いたいです。
このケースの透明部品は1.3インチのOLEDには小さすぎるので、別部品にします。

OLED表示部

「Travel Case SS」(No.1431)です。セリアで購入しました。2個入りで税抜き100円です。
製造会社のHPです。

Travel Case SS

フタの部分を使います。
下の写真のとおり、、内部に1.3インチのOLEDがピッタリ収まります。
(「1.3インチOLEDケース」と呼んでも良いぐらい。)
これにマスキングをして、黒のスプレーで塗装すればOLEDだけが見える表示部が出来上がります。

OLEDと透明ケース

ケース上部と先端部

OLED表示部以外のケースの上部分と先端部分は、「タッチライト ブロック」を実測して合うように3Dプリンタで作ります。(2回ほど失敗しました。)
いつものFusion 360で設計します。

ケースの3Dモデル

その他の小部品

先端部分は、部品箱のテスト棒を使います。

電源スイッチは後方にロック式のプッシュスイッチを取り付けます。

「ラジオペンチ」さんのラフスケッチでは、グランド端子は先端付近から出ていますが、今回は後方にまとめました。
後方部分には「siliconvalley4066」さんが追加された、テスト信号端子も付けました。

オリジナルでは、操作スイッチは4つのプッシュスイッチですが、操作性を考えてAliExpressから特殊なスイッチを入手しました。
サムホイール・トグルスイッチです。押し込み、左、右の3か所の動きで導通します。
押し込みで「Select」、奥で「Down」、手前で「Up」にすれば1つのスイッチで3つ分の働きをします。
「Hold」スイッチのみ別の場所に取り付けます。

サムホイール・トグルスイッチ

このスイッチの動作はこんな感じでした。
青矢印が端子番号(仮)
緑矢印が今回の用途です。(1の方向に押すと0-1間が導通します。)

スイッチの動作

電源は単4電池2本から昇圧します。
昇圧電源モジュールもAliExpressで購入しました。
入力電圧0.9 ~ 5 Vを出力電圧5Vに昇圧します。

昇圧電源モジュール

動作試験

ブレッドボード上で、Arduino NanoではなくDIP ICの「ATmega328P」で動作するか試験します。
「ATmega328P」単体でArduino Nanoとして動作するようにブートローダを書き込みます。
(実際には、空きメモリを増やすためにUNOのブートローダを書き込みました。)
「ATmega328P」へのArduinoのブートローダの書き込み方は、以下をクリック。

ブートローダを書き込んだ「ATmega328P」をブレッドボードに装着します。
ただし、「ATmega328P」にブートローダを書き込んでArduinoにした場合は、通常のArduinoと違ってUSBで直接パソコンにつなぐことが出来ません。

そこで、USB変換機をつなぎます。
今回は、安定動作が見込まれる秋月電子の「FT232RL USBシリアル変換モジュール (AE-UM232R)」を使いました。

USB変換機

以前ブログで紹介したUSB変換機と端子数が違うので、接続は以下のようにします。

USBAtmega
Pin名前Pin名前
2DTR1RESET
1TXD2RXD
5RXD3TXD
21VCC7VCC
24GND8GND

お二人の配線図ではArduino Nanoが使われているものを「ATmega328P」にするためには、MCUのデータシートを見て、ピンを確認する必要があります。
すぐ忘れてしまうので、図面で残しておきます。
数字はピン番号です。

ATmega328Pのピン暗号

一部、入力部分の抵抗が未実装ですが、ブレッドボード上に組み終わりました。
中央上部に見える赤色LEDは、ブートローダの機能確認で「Lチカ」するための追加部品です。

ブレッドボードで試験

USB変換機を経由して「ATmega328P」に「Lチカ」を書き込みます。
正常に赤色LEDが点滅しました。

次に「ラジオペンチ」さんが公開しているOLEDオシロスコープV300のスケッチを書き込みました。
正常に書き込まれました。

テスト動作の画面

上の写真のとおりOLEDにカッコいい画面が表示されました。
(何かを作っていて、感動する瞬間ですね。)

パソコンにUSBケーブルでつないでいると50 Hzのノイズが出ていましたが、モバイルバッテリにつなげばノイズは消えて問題ありません。
プッシュスイッチでの操作も正常に動作しました。

「サムホイール・トグルスイッチ」での動作確認も行いましたがOKです。
(ケースに組み込まないと、押し込みなどの動作がしっかり出来ませんが)

昇圧回路のノイズを確認するために、USB変換機を取り外して、5 V昇圧回路と電池2本をつなぎます。

電池2本で電源供給
昇圧回路

昇圧回路の出力部分での電圧は「4.93 V」でした。(ジャン測マルチの誤差が0.03 V程度はあるので、実際は4.95 Vぐらいか?)
5 Vではないのが気になりますが、ノイズは問題ありません。

昇圧した電圧

「ラジオペンチ」さんが公開されている「V300」の回路図をブレッドボードで組み立てましたが、動作は問題ありませんでした。
続いて、「siliconvalley4066」が公開されている「V402」の回路にしてみます。
と言っても、違いは

スイッチにつながるダイオード4本を取り外す。
ダイオード除去に伴い、接続されていた「D2」がオープン
入力端子の電圧制御が「D12」から「D4」へ
スイッチDownが「D10」から「D12」
「D10」が校正信号出力へ
「D6」「D3」に配線が追加

ぐらいなので簡単に検証が出来ます。
配線を変更して、「siliconvalley4066」さんが公開されている「V402」のスケッチを書き込みました。問題なく動作しました。

組み立て

途中の写真がありませんが、出来ました。
(組み立てている最中は、集中しすぎて写真を撮るのを忘れがちです。)

途中、1.3インチのOLEDは、他のアナログ回路にノイズをバラまくことが知られているので出力回路にコンデンサを追加する対策を行いました。
1.3インチOLEDのノイズ対策については、以下をクリック。

思っていたよりズングリ型ですが、1.3インチのOLEDと電池2本を内蔵すると、これ以上の小型化は難しそうです。

組み立てたオシロの全景

後方の端子部分です。
中央がコネクタ式のグランド端子(反対側にワニ口付き)
右側がプッシュ式の電源スイッチ
中央左の端子が「siliconvalley4066」さんが追加された「校正用パルス信号」端子
赤色LEDは、電源確認用です。

オシロの後方端子部

裏側の状態です。
元々の「タッチライト ブロック」のフタが付いています。(固定用のマグネットもそのままです。)

オシロの裏側

裏側のフタを外した状態です。(小型のプラスネジ2本で固定されています。)
単4電池が2本見えます。
入っているのはセリアで購入した単4型の充電池ですが、昇圧回路の下限は0.9 Vなので内蔵している電池2本の直列電圧2.4 Vで問題なく動作します。

中に見えるユニバーサル基板には、良く見えませんがプログラムを書き換える端子も内蔵しています。

裏ブタの取り外し

本体の上部から見た写真です。
左側のスイッチは、スライドスイッチで「AC/DC」を切り替えます。
右側のスイッチは、3ポジションのスイッチで、押し込むと「Select」、向かって左が「Down」、向かって右が「Up」です。

オシロの上部

本体の下部です。
左に見えるプッシュスイッチは、「Hold」スイッチです。
中央の溝は、滑り止めに付けました。

オシロの下部

動作確認と評価

ここまで苦労して組み立てた経過を紹介しましたが、このOLEDオシロスコープは致命的な欠陥があります。

そのズングリしたスタイル?
違います。少し太いですが持ってみると、思ったよりも手になじむ大きさです。

操作性も3ポジションのスイッチを採用したので、すんなりと操作できます。

「校正用パルス信号」端子を追加したので、動作確認も容易で何かと便利です。

では、こちらの写真を見てください。
垂直感度は2 Vです。
何も信号を入れていません。テスト端子とグランド線をつないでも変化なしです。

無信号時のノイズ

見てのとおり、とてもじゃないですが計測器として使えないほどの大きなノイズが出ています。
ブレッドボードで動作確認したときは、こんなノイズは無かったのですが、完成したらこんな状態でした。

分解が難しい構造で作ってしまったので、故障探求が難しいです。
ノイズの原因が詳しくは分かりませんが、テスト端子から「ATmega328P」の入力端子までの間で単線の部分があるので、その部分が怪しいです。

テスト端子から出ている単線部分

基板を無理やりひっくり返して写真を撮りました。
やはり、ユニバーサル基板ではグランドが広く取れないのでノイズ対策が難しいです。

オシロスコープの内部

残念ながら整備性が極めて悪い構造に作ってしまったので改善ができません。
対策方法は、現在のところ思い浮かばないので、少しの間、保留とします。
(可能であれば、基板をオーダーして、テスト端子付近まで裏にグランドがあるパターンを作るのが望ましいです。)

コメント