「SGT-Meter7」を自作するための資料一式です。

このメーターはTAを測定する計測器と、パソコンで実行するブラウザベースのローカルアプリで構成されます。

計測器として次の二つを設計しました(両方を作成する必要はありません)。
・d-meter
　高精度版の計測器です。
　5千円未満で部品をそろえることができます。
　表面実装の部品を使うので電子工作の未経験者にとっては、難易度が高いかもしれません。
・s-meter
　簡易版の計測器です。
　2千円未満で部品をそろえることができます。
　非常に単純な回路なので電子工作の未経験者でも作れると思います。
　簡易版と言っても、感度16未満であれば通常の使用において高精度版との差異は感じられないと思います。

それぞれのディレクトリに回路図、部品一覧、ファームウェアを含みます。
ファームウェアの書き込み(または更新)方法についてはCopilotやGemini等のAIへ
「Raspberry Pi Picoへuf2ファイルを書き込むにはどうすればよいですか？」
と聞いてください。

「sgt-meter7」はパソコンで実行するアプリ一式です。
Windows 11標準のブラウザまたはGoogle Chromeで実行できます。
ディレクトリごとデスクトップ等へコピーすれば使用できます。
詳細については「help.html」を参照して下さい。
(拡張子を表示しない環境では「help」と表示されます)

Mac OSについては検証していません。
ブラウザの互換性情報によると、Safariでは実行できません。
ChromeまたはOperaならば実行できる可能性があります。

---------------------------------------------------------------------------------------------------
以降の文章はこのメーターを改造したり、自作メーターを設計したい人向けの簡単な説明です。
技術的な内容ですので、このメーターを自作して使うだけであれば読む必要はありません(技術用語を使っているので)。


〇計測器について
主に次の処理を行います。
・ADコンバータを使って電圧を測定
・電圧からTA値を算出
・TA値をパソコンへ送信

高精度版の外部ADCは24bit/2400SPSモードで使用しています。
ADCの内部クロックはRC発振器であるため精度が低く、送信頻度に数%の誤差があります。
定電圧源としてADC内蔵の参照電圧を使用しています。

簡易版ではマイコン内蔵のADCを使用しています。
Raspberry Pi Picoの内蔵ADCは分解能が12bitと低いですが、サンプリング頻度が高いです。(最大500k SPS)
オーバーサンプリングして区間平均を算出し、高精度版と同じ送信間隔となるようにしています。
定電圧源としてマイコン内蔵のレギュレータを使用しています。高精度版に比べて安定しない可能性がありますが、
ADCの基準電圧も同時に変動するので測定値に対する影響は軽微だと思います。

emeter.deの資料によるとAbilityメーターの分解能は10bitだそうです。

これらの計測器ではフィルタ処理をしていません。
Pico2のDSPを使用すればもっと滑らかかつ機敏に表示できる可能性があります。
逆に某メータのようにオーバーシュートし、しばらく振動するような動作をシミュレートできるかもしれません。

パソコンとの通信にはUSBシリアルを使用し、文字列としてデータを送信しています。区切り文字はLFです。
パソコン側から見たサンプリング数は2400[サンプル/秒]です。
Arduino IDE のシリアルプロッタ や Tera Term を使えば動作を確認できます。

短いプログラムですので、C言語の知識があれば、解析/改造は容易かと思います。


〇パソコン側アプリについて
ブラウザベースのローカルアプリです。HTML+CSS+JavaScriptで実装しています。
Web系の知識があれば、容易に解析/改造できると思います。

・計測器との通信には「Web Serial API」を使用しています。
　Chromiumベースの最近のブラウザであれば、ローカルHTMLファイルからこのAPIを利用できます。

・メーター(ゲージ)のUIには次のJavaScriptライブラリを使用しています。
　https://github.com/bernii/gauge.js
　オリジナルのライブラリは座標を整数化しているため、針の動きが滑らかになりません。
　また、針の形状が三角形であるため、細長くすると先端の視認性が悪くなります。
　これらに対処するために修正を加えています。

・メーターの動作についてはsgtmeter.jsでシミュレートしています。
　抵抗値とTA値の変換や、感度と針の振れ幅の関係等を実装しています。
　メーターの振る舞いを理解する参考になるかと思います。

・アプリ側では計測値に対して指数移動平均をかけた後に単純移動平均を多重にかけています。
　適切なフィルタ処理を実装すればもっと滑らかかつ機敏に表示できる可能性があります。
　一般的なモニターのリフレッシュレートに合わせて描画間隔は60Hzとしています。

・音声出力には「Web Speech API」を使ってデフォルトの音声を使用しています。
　音声を変えたい場合はcommand.jsのcommandPlay()を適切に修正してください。

Webサーバに配置した場合、HTTPS接続ならば実行可能です。
HTTP接続では「Web Serial API」の制限により使用できません。


〇メーターの仕様について
メーターについて私の理解と、このメーターの仕様を簡単にまとめます。

・TA値の定義は次になります。
　5kΩ → 2.0
　12.5kΩ → 3.0
　無限大 → 6.5

・このメーターでは、抵抗値をRとしたときのTA値を次の式によって求めています。
　　TA = R / (R + CONST_R) * (TA_MAX - TA_MIN) + TA_MIN
　　ただし、TA_MAX=6.5 , TA_MIN=0.9412 , CONST_R=21250
　これはRalph Hilton氏の考案した式を若干修正したもので、定義によく一致するらしいです。

・伝統的なメーターの可動域は 100° + 余白(2.5～5°) です。
　100°を40分割して目盛を振ります。(1目盛：2.5°)
　Set位置の目盛は15となります。
　伝統的な大きさの物理メーターでは8目盛分が約1インチとなります。

・感度の定義は次になります。
　5kΩ(TA2.0)の抵抗を接続し、針をセット位置に設定した状態で、100kΩの抵抗を並列接続した際に
　針が右端(目盛40)まで移動する増幅率を感度32とする。
　同様に50kΩを並列接続した際に、針が右端まで移動する増幅率を感度16とする。
　一般化すると
　　「TAが2.0で針がセット位置にあるとき、感度がSならば、
　　　[S × 3.125kΩ]の抵抗を並列接続すると、針がメモリの右端を指す」
　となります。

・感度補正をしない場合、TAの変化量と針の移動量が比例します。
　ホイートストンブリッジにおいてPCと並列に接続する側の可変抵抗器(トーンアーム)の目盛から
　TA値が決められているようですので、このような関係になります。
　なお、Ralph Hilton氏の解析によると、ブリッジにおいてPCと直列に接続する抵抗を 21.25kΩ とすれば
　伝統的なメーターとよく一致するとのことです。

　PCに特定の反応があった場合、PCの抵抗値の変化はその時のTA値によらず同じような変化量となるようです。
　セッション中にPCのTAが高くなると、同じ反応に対する針の振れ幅が少なくなっていくため、メーターに
　同じような針の動きを期待するならば、TAの高まりに合わせて感度を高く調整していく必要があります。

　抵抗値の変化量に比例して針が反応するならば、そのような調整をせずともメータの針は期待通りに動きます。
　針の動きを抵抗値の変化量に比例すように補正することを、このメーターでは感度補正と呼んでいます。
　他のメータでは自動感度調整等の用語を使うようです。

　このメーターではTA2.0を1倍として補正に必要な倍率を計算しています。
　単純に抵抗値の変化量に比例するようにすると、TA値が5.0以上や2.0未満の場合、針が動きすぎたり、
　逆に動かなすぎたりします。
　そため、TA値が2.6～4.3の範囲から外れた場合、感度補正が穏やかになるように調整しています。

---------------------------------------------------------------------------------------------------
この配布物について有償/無償を問わず、また改変の有無も問わず利用/公開/再配布を制限しません。

Copyright (c) 2026 ShinGeTsu Meter.
