アナログ式CPU負荷メータを作る


![photo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100408/18226b5a-ad2f-2b7e-abe4-c33d6a4187d2.jpeg)

パソコンのCPU負荷率ってきになりますよね。でもこれを表示するものを常に画面に出しておくわけにもいかないですし、いい感じに外から観察できるものはないかと考えたところ、「アナログ電流計でCPU負荷率を見よう」と思いつきました。

仕組みはこのような感じになっています。Golangで書かれた専用アプリケーションがCPU負荷を250ミリ秒単位で調査、シリアルポート経由でArduinoに伝えて電流計を動かすという仕組みです。

最初はATtiny412ベースで作っていましたが、Arduino版もつくってみました。

結構いい感じに反応してとてもおもしろいですし、電気回路も比較的簡単でおすすめです。ブレッドボードならばハンダゴテ不要。

# 用意するもの

半田付けなし、ブレッドボードで組み立てる例です。

![parts.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100408/53591662-f486-5657-62a6-a5a1bb498bcc.jpeg)

### Arduino Nano Every

[秋月電子 1500円](https://akizukidenshi.com/catalog/g/gM-14848/)

新世代のxmega系のavrコアを使った新しいArduinoです。純正なのにお手頃価格。ピン配置が書いてないのが残念なところ。

### アナログパネルメータ(100μA DC)

[秋月電子 1000円](https://akizukidenshi.com/catalog/g/gM-00139/)

100μAでフルスケールになるアナログパネルメータです。最大でも100μAなので使いやすいです。漏れ電流でちょっと0が浮いてしまいますが、細かいことは気にしないようにしましょう。

### 10KΩ抵抗 

[秋月電子 100円](https://akizukidenshi.com/catalog/g/gR-07838/)

10kΩの抵抗です。100本入って100円。これと1kΩはとてもよく使うのでこの2種類だけでも揃えておいて損はないです。ここでは10kΩのみ使います。

### 半固定抵抗器 50KΩ

[秋月電子 40円](https://akizukidenshi.com/catalog/g/gP-03281/)

電流計の最大値を調整するのに使います。

### コンデンサー 10uF

[秋月電子 10円](https://akizukidenshi.com/catalog/g/gP-03116/)

Arduinoから出力されるアナログ信号は実際はPWM波のデジタル信号で、それをより直流っぽくするためのコンデンサーです。無くても全く支障はありませんが、もし何かさらに部品を付けたい場合ははつけてください。

### その他に必要なもの

あとは [ブレッドボード](https://akizukidenshi.com/catalog/g/gP-02314/)、[ジャンパワイヤー](https://akizukidenshi.com/catalog/g/gC-05159/)、[みの虫ジャンパーワイヤ(電流計をつなげるのに使う)](https://akizukidenshi.com/catalog/g/gC-08916/) があれば組み立てられます。

# 配線図

こんな感じで配線します。

![schematics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100408/c7ec9594-7fb3-4e9c-8e70-fb8da551364b.png)

まずは、針がいきなり振り切れるのを防ぐため、半固定抵抗を一番左まで絞っておいてください。

# Arduino IDEでビルド

Windowsでのインストール例です。まずおもむろにArduino NANO Everyを接続しておきます。

[この記事を参考](https://qiita.com/ELIXIR/items/7620fdc830ca60561dc3)にArduino IDEでArduino NANO Everyの設定を行ってください。
Arduino NANO Everyのポート番号がわからない場合は、デバイスマネージャを開いて、「ポート(COMとLPT)」でわかります。

ファイル→スケッチ例→01.Basics→Blink.inoを開いて書込して、本体のLEDが点滅するかを確認してください。

[このファイル](https://github.com/mamemomonga/analog-loadmeter/blob/master/arduino/meter/meter.ino) の Raw を押して、それを meter.ino という名前で保存します。それをダブルクリックするとフォルダに移動するか聞いてきますので実行します。それをArduino Nano Everyに書き込みます。

# ホストアプリケーションを実行する

ホストアプリケーションは実際にCPU負荷を測定しながらシリアルポート経由でArduinoに送信するプログラムです。こちらはWindows版バイナリを起動する例です。ビルド済みのバイナリはWindowsのほかにもLinux(amd64), macOS(amd64)用があります。Goで書かれていますので、ソースからのビルドも難しくはないとおもいます。

[ここにある](https://github.com/mamemomonga/analog-loadmeter/releases/tag/v0.0.1) cpuload-analogmeter-windows-amd64.exe をダウンロードします。警告やウィルスが心配な人は自分でGolang環境を導入してビルドしてください。

cmd.exeを開いて、上記ファイルをドロップします。その後に -p オプションをつけて、ポート番号を設定し実行すると動き出します。

例:

	C:\Users\user\Desktop\cpuload-analogmeter-windows-amd64.exe -p COM16

## 調整

いったんCTRLを押しながらCで でアプリを終了し、調整を行います。上のコマンドに -z オプションをつけて起動すると、0%の状態を出力します。このときにメータの中央のねじをまわして、ゼロに近い位置に調整してください。たぶん漏れ電流の関係で完全に0にはなりません。

つぎに、-f オプションをつけて実行します。これで100%の状態を出力します。100を示すように半固定抵抗を調整してください。

これを何度か繰り返して、いい感じに調整してみてください。

再度オプションなし(-pオプションは常に必要)で実行すると、きちんとCPU負荷状態を表示するようになります。 あとはPCに負荷をかけて針がうごくかチェックしてみてください。

# まとめ

アナログメータ、たのしいですね。あとはこれにLEDをつけたり、プログラム側を調整してきちんとした常駐プログラムにしたり、いろいろ工夫ができそうですね。それではよい電子工作ライフを！