google-site-verification: google3bd66dd162ef54c7.html
FC2ブログ

Arduinoで作るペン型オシロ (ケース製作編)

 0.96インチOLEDとArduinoで作るオシロは機能確認版が出来たので、そこそこ実用的なペン型オシロが作れそうな感じです。ということで、ケースに入れて完成形にもっていくことにしました。

 まだハードとソフトの改良を予定していますが、ケースは多分これ以上変わらないと思うので記事で紹介します。

 全く何も無いところから始めるのは大変なので、ダイソーでベースになりそうな物として買ってきたのが、これ。

▼ダイソーの箸箱
ダイソーの箸箱
 箸とスプーンが入っているので、普通の箸箱より幅が広いところがポイントです。

▼収まり具合を検討
端箱と回路部品
 主要部品を並べてみたところですが、このケースに充分入りそうです。

 ただそのままでは箸箱の雰囲気が漂ってよろしくないのでく、ヒンジの機能に影響しない範囲で加工しました。

▼ケース加工完了
ケース加工
 プローブの出る部分は段差を付けて加工。また、全長が長すぎるので後ろを真っ直ぐに切断して、箸箱の気配を消しました。前後の穴は、透明プラ板をエポキシで接着して塞ぎます。また、上側の透明プラスチックはOLEDの画面の部分だけ残して、黒色に塗装しました。

 これでケースは出来たので、この中に電子部品を詰め込んでいきます。

▼測定プローブ取り付け
プローブを取り付け
 いらなくなったテスター棒の先端金属部をケースにねじ止めしました。ネジはM5だったので標準のナットが使えました。GND側はアース用の小型のネジ留め端子があったのでこれを付けておきました。

▼部品取り付け中
部品を入れてみる
 ねじ止め以外の部品はホットボンドでぺたぺたと固定。残ったスペースにプリント基板を詰め込めば完成です。と書くと簡単そうですが、残りスペースは思っていたより狭くて、プリント基板作りはちょっと大変でした。このあたりは回路図が固まったら別途記事で紹介予定です。

▼完成
完成品の内部
 とりあえず動く状態まで組み上げることが出来ました。なお、基板は簡単に取り外せるようにコネクタで接続しています。

▼使っている様子
使用中
 狙い通りペン型で使うことが出来ます。先端付近のオレンジ色のLEDは、サンプリング周期に合わせて点滅します。

▼操作スイッチ
側面のスイッチ
 上側側面には先端側から、+(UP)、-(DOWN)、SELECT の三つのボタンがあり、これで機能選択します。
 UP/DOWNのボタンにはジョグダイヤルのような物を使いたかったのですが、手に入らなかったのでタクトスイッチにしています。まあ、レンジの数が少ないので、ボタンをポチポチ押していると、すぐに端まで行っちゃいます。

▼電源スイッチ
電源スイッチ
 後ろには電源スイッチと電源ON表示の赤色LEDを取り付けました。

▼画面ホールド状態
画面ホールドした状態
 表示画面の横にあるHOLDスイッチで画面をホールドした状態です。筆記用具と並べて置いても、あまり違和感がありません。

▼なりたかった姿を振り返る
ペン型オシロ
 本当はこんな感じの、すらっとしたものを作りたかったのですが、実際に出来た物はかなり太くて大きくて、もっさりしたものになってしまいました。

◆まとめ
 何とかケースをでっち上げることが出来たので、目標としていたペン型オシロスコープが完成しました。電池駆動なので気軽に使えると思います。

 市販のペン型オシロは表示をPC側で行う物が多くて、ペン型のケースで波形表示までやっている物は珍しいと思います。まあ性能では到底かなわないのですが。

 回路とソフトはほぼ出来上がっているのですが、この状態でもう少し改良してから公開したいと思います。とりあえずは、簡易電圧計モードと、バッテリー電圧チェック機能を追加したいと思っています。

0.96インチOLEDを使ったオシロ、機能確認版の製作 (Arduino)

 0.96インチOLEDとArduinoを使ったミニオシロの試作版を作ってみたら具合が良さそうでした。それなら、ということで改良版を作っていたのですが、ほぼ一段落したので現在の状態を公開します。

▼外観
Arduinoで作るオシロ
 まだArduino UNO とブレッドボードで動かしています。

▼OLED画面と操作ボタン
オシロ画面んと操作ボタン
 操作スイッチはとりあえずタクトスイッチを使っていて、左から、Hold, DOWN, UP, SELECTです。

▼回路図 (図をクリックで別窓に拡大)
Arduinoで作るオシロの回路図
 出来るだけ少ない部品で作ることを目指しています。というか、オペアンプをきちんと使いこなすのは大変なので思いっきり手抜きしています。

 R3の反対側をポートにつなぎ、LOWとHi-Zに切り替えることで入力アッテネーターの切り替えをやっています。ちなみにハードのアッテネーターは R3無しで1/5、R3有りの1/50 の2段切り替えだけで、それより細かいステップはソフトで刻んでいます。

 スイッチの読み取りはピンチェンジ割り込みでやりたかったのですが、たまに取りこぼしがあったので、ダイオードで合成してPin2にも入力し、Arduinoの普通の割り込みの、attachInterrupt で検出する方式に変更しました。ちなみに、最初にやったピンチェンジ割り込みは、こういうやり方です→ピンチェンジ割り込みについての私の記事

 なお、R51はタクトスイッチの接点にコンデンサ (C51) から大きな電流が流れ込むのを防止するために入れたものですが、ダイオードが入っているので不要だったかも知れません。ただ、スイッチ操作から割込み発生までのタイミングを少し遅らせる効果はあるはずです。

 ちなみに、この抵抗が必要な理由については、以下に解説があります。
・居酒屋ガレージ日記さん:スイッチに並列に入るコンデンサ
・ikkeiさん:スイッチに並列コンデンサはダメ回路

 アンチエイリアシングのために、ADCの前にローパスフィルタを入れた方が良いのですが、入力インピーダンスが高いので、単純なCRのフィルターを入れのは無理がある感じです。一方で、入力のR1に並列に小さな容量のコンデンサを入れて、立ち上がり速度を改善したいところです。これ、よく考えると両者の効果は相反するので、間を取って何もしないことにしました。(本当にそれでいいのか?)

◆スケッチ
 スケッチはこちら→オシロのスケッチ_20190213OledOsillo (Shift JIS エンコードです)
 機能を無計画に追加していったので、構造がおかしなところがあります。また、レンジ操作を switch case文で書いたので、見易くなった半面、ソースが長くなちゃってます。

 OLEDの画面に1kB、波形メモリーに400バイトのRAMを消費するので、RAM容量が苦しいです。対策として、PROGMEMを使って文字データーをフラッシュ領域に置くようにしているのですが、ここのプログラムの書き方が判り難かったです。そのあたりは別途記事で紹介する予定です。

▼オシロの画面
オシロの画面
 垂直感度、スイープ速度、トリガスロープをスイッチ操作で選択可能。SELECTボタンで項目移動、UP/DOWNで内容選択するスタイルにしました。選択されている項目の下には、上向きの浅いコの字を表示します。Holdボタンを押すとその状態で画面を保持。再度押すと元に戻ります。なおHold中は画面に Hold と表示します。

 細かい点は下記の動画が判り易いと思います。

▼動画


◆主な仕様
・垂直感度(フルスケール当たりの値)
 固定レンジ:50V, 20V, 10V, 5V, 2V, 1V, 0.5V, 0.2V
 Autoレンジ:50V, 5V (波形が出来るだけ大きく表示されるように上/下限の値を自動調整)

・水平レンジ(div当たりの値、4div=フルスケール)
 50ms, 20ms, 10ms, 5ms, 2ms, 1ms, 500us, 200us

・トリガ
 波形PPの1/2レベルで自動トリガ。トリガスロープUP/DOWNの指定が可能。
 トリガ非検出でも波形は表示し、トリガ検出失敗表示する (unsync と表示)。

・電圧計機能
 波形メモリーの値の平均値を画面に表示。簡易電圧計として使えるはず。

・画面ホールド
 ホールドスイッチを押すと画面をホールド、再度スイッチを押すとホールド解除。なお、ホールド中はholdと画面に表示。

・設定状態のリジューム機能
 ボタン操作の5秒後に設定内容をEEPROMに保存。保存した内容は次回パワーON時に反映。

◆まとめ
 とりあえず現在やってみたいことをプログラムに書いてみました。欲を言えばキリが無いので、このあたりで手を打つのが良いかなと思います。

 最高サンプリング周期が8μsなので10kHz程度の波形までしか観察出来ません。それくらいだったら音にして耳で聴いたのと変わらないじゃん、という声も聞こえて来そうです。まあ波形を見た方が情報量は多いかと。

 ADCで読んでバッファメモリーに書くまでの処理をアセンブラで書けば、たぶんあと何倍かは早くなるはずです。どこかにヒントが書かれていないか、注意していたいと思います。

◆妄想をスケッチ
ペン型オシロ
 ペン型オシロです。最終的にはこれを作ってみたいんですよね。相手が負の電圧だったら、先端を逆に繋げばいいんです。

【2019/02/14追記】
▼ピン割り込みで取りこぼしが出た回路
ピン割り込み
 最初に試したのがこの回路です。CPUのレジスタを操作してPin 8,9,10からピン割り込(状態変化検出割り込み)みでスイッチの状態を読んだのですが、たまに取りこぼしが出ちゃいました。記事内にも書きましたが、こういう方法の割込みです→ピンチェンジ割り込みについての私の記事
 あと、この回路ではコンデンサの電荷をスイッチで一瞬で抜いているので、接点の寿命の問題があってあまりよろしくありません。理由は記事の中のリンク先をご覧ください。

0.96インチOLEDを使ったオシロの試作版(arduino)

 前の記事の最後にちょっと触れた、0.96インチOLEDを使ったオシロの試作版というか、機能確認バージョンが出来ました。

 最高サンプリング速度(周期)は8μsなので、10kHzくらいまでの波形なら観察出来るはずです。

▼0.96インチOLEDオシロ
0.96インチOLEDオシロ
 小さな画面ですが、コントラストが高いので、思いのほか見易いです。

▼回路図
0.96インチOLEDオシロスコープの回路図
 Arduinoのアナログ入力(A0)から信号を入れると、その波形をOLEDに表示します。入力電圧は0-5Vの固定。操作スイッチは今のところ、スイープ速度4段の切り替えと、トリガスロープの選択だけです。

 スケッチはこちら、→ 0.96インチOLEDオシロスコープのスケッチ S-JISエンコードです。(Arduino IDEの画面にコピペするのが簡単だと思います)

 縦軸の自動ズーム機能、自動トリガ機能が付いています。これ以上の詳しい説明は省略します。I2Cインターフェイスの0.96インチOLED(SSD1306)を接続すればそのまま動くはずです。ファンクションジェネレータなど無くても、入力に短い線を繋ぐことで、ACラインの誘導ノイズ波形が観察出来るので動作確認が出来ます。

 表示のVRAMに1kバイト、波形バッファに400バイトのメモリーが必要なので、RAMの容量が苦しいです。なお、ライブラリはAdafruit_GFX.hとAdafruit_SSD1306.hを使っています。

◆動いている様子 (?rel=0)

 あれこれ入力波形を変えて観察している様子です。初めの方に、同じ波形を入力したアナログオシロの画面も出てきます。(トリガ極性切り替えの様子の動画を入れるのを忘れました)

 なお、波形はドットで描いているのですが、ドット間を直線で接続した方が見易かったかも知れません。

◆まとめ
・結構それっぽい物が出来ていると思います。

・ADCは数100kHz以上の信号でも反応するようで、エイリアシングが強く出ています。勘違い防止のために、入力にローパスフィルタを入れた方が良さそうです。

・試作版を動かしていて思ったのですが、この小ささを生かしてペン型オシロを作ると面白そうです。操作スイッチやメニューなどは、ペン型にした時のことを意識して作り込みたいと思います。
カレンダー
09 | 2019/10 | 11
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード