編集履歴一覧に戻る
sanguisorbaのアイコン画像

sanguisorba が 2020年05月23日15時30分48秒 に編集

コメント無し

タイトルの変更

-

Arduinoで簡易電流計を作りたかった(未完成)

+

Arduinoで簡易電流計を作りたかった(一応完成)

本文の変更

-

**未完成です。** 何か進展があったら書き直します。

+

~~**未完成です。** 何か進展があったら書き直します。~~

間違っている点やお気づきの点がありましたらコメントいただけると助かります。

-

**未完成なので実際にやって大事故が起こっても責任は取りません。**

+

~~**未完成なので実際にやって大事故が起こっても責任は取りません。**~~

+

追記 それっぽいものができました。

# 何故作ろうと思ったのか Arduinoってありますよね。手軽で便利です。 電圧はアナログピンから簡単に測れるんですけど、電流ってなかなか測るのが大変だったりします。 今回紹介するのは筆者がどうやってArduinoで電流を計測しようか悩んだ痕跡です。まだ悩んでいる最中なのでこれはあくまで今思いつく最善の方法です。 # 電流計の使い方 電流計は次のようにして使います。 ![キャプションを入力できます](https://camo.elchika.com/0b095a97251ca38dbc99b901a520ea8c89e45d07/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f34386437663630362d666464362d343066372d623735632d663933636332326132623562/) 左側の三角は**電流計**、右側の抵抗は**負荷**、すなわち電流を計測する機械を示します。下側の電源は**計測先の入力電源**です。 # 今回用いる電流計システム 簡易的で組みやすい回路にしました。 **理想的な、売られている電流計と比べると精度が低いです。** 電流計を今回用いる電流計回路に置き換えると次の回路図になります。 ![キャプションを入力できます](https://camo.elchika.com/2e49d7729f33dad71cf989066e9e4abb9ca79e9a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f34353439363436342d663738332d343633302d623261612d653261313532633538313739/) 右側の抵抗は負荷を示します。左上側の+が書いてあるものは**電圧計**、そして電圧計の下にあるのが電流計のミソとなる**抵抗**です。 抵抗と電圧計を並列に繋ぐと何故電流が測れるのかについて説明します。 分圧抵抗というものがあります。電圧計側の抵抗を$R_A$、負荷を$R_L$、入力電圧を$V_{in}$とします。すると、電圧計に来る電圧$V_A$は次の式で表せます。 $$V_A=\frac{R_A}{R_A+R_L}V_{in}$$ また、負荷の電圧$V_L$は次の式で表せます。 $$V_L=\frac{R_L}{R_A+R_L}V_{in}=V_{in}-V_A$$ 上の式のように、**この電流計は電圧低下が生じます**。負荷が大きければ大きい程、負荷として設定している抵抗の値は小さくなる($V=RI$より、電流$I$が増大すると負荷抵抗$R$は減少)のでその分$V_A$が大きくなり、$V_L$は$V_A$分電圧が低下します。これは注意です。 さて、この時$R_L=0$とするとどうなるでしょう。$V_A=V_{in}$となり、電圧計に入力電圧が100%来ることになります。$V_A$はなるべく小さい方が電圧低下がその分起きないという事になりますから、電圧計は当然微小な電圧を読み取る事を想定している訳です。ここに高電圧が加わると電圧計が壊れる事が容易に想像できると思います。 ## 何故これで電流が測れるのか 簡単です。直列に抵抗を2本つなぐと、電圧は上のように変動しますが、**電流は一定になります**。なので、 $$I_L=\frac{V_L}{R_L}=I_A=\frac{V_A}{R_A}$$ 今回は$V_A$を電圧計で測定し、また$R_A$のパラメータは自分で設定します。よって、$I_A$を求める事で$I_L$が求まるという事になります!また、$V_A$から$V_L$がどれくらい電流計によって電圧低下しているのかも計測できます。 # 実際に組み込む例 今回の電流計では以下の条件で計測する事を想定します。 * 電圧計: 0 ~ 5 Vの間を変動する (Arduinoのアナログピンに直接刺せる。1024段階で電圧がわかる。) * 計測負荷: 最大10A 私が持ってるテスターは2Aまでしか測れないので今回はもう少し頑張ってもらって10Aまで測れる電流計を作ります。電圧計がArduinoなので、分解能は0.00976Aです。中途半端ですが仕様なのでしょうがないです。 ### 電圧計抵抗をどうするか 実は、殆ど1つに定まっています。 先ほど、電圧は低下するが電流は一定であるといいました。つまり、**10Aに耐えられる抵抗**が必要という事になります。 また、電圧低下もありますから、**$R_A$の値はなるべく小さいほうが良い**です。 この条件を満たす抵抗が2つあります。**メタルクラッド抵抗**と**シャント抵抗**です。 大体どちらも0.1Ωが最も低い抵抗値になります。0.1Ωで10Aを測ろうとなると、10A×10A×0.1Ω = 10W級の抵抗が必要です。また、20Aを測ろうとなると20A×20A×0.1Ω=40W級のものが必要です。 $V=RI$から0~10Aの間を0~1Vに変換する事がわかります。 しかし最大1V低下する事を意味するので、**乾電池やリポバッテリで駆動する機械の負荷に対してこの電流計を使うのは難しい**という欠点があります。 そこで、抵抗を並列に接続して抵抗値を小さくします。 ## 抵抗値を小さくする 0.1Ω抵抗を並列に接続する事で非常に小さな値の抵抗を作ります。 0.1Ωを2個並列につなぐと0.05Ωになります。これを使う事で10A流れても0.5Vの損失で済む事になります。 ついでにかかる電流も半分ずつになるので2.5W耐えられる抵抗を用意すれば良い事になります。2.5Wと言うと**もっと安価な5Wセメント抵抗や3W金属皮膜抵抗を使う事ができます。** これを用いて次のような回路を作りました。 入力電圧10V、 負荷10A (負荷抵抗1Ω)時、LM741使用時のシミュレートした電圧計値付きです。 ![キャプションを入力できます](https://camo.elchika.com/cfa720f07de275be97bafc43052cd802f93b8305/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f31353331383936392d626466352d343334372d613339312d393763373537386632376230/) 分かりやすいように、本来は10k抵抗のところを20k抵抗にしています。抵抗値を2倍にしたことにより、出力が0~5V→0~10Vになります。 想定通り、本来10Aを消費する機械にこの電流計を接続すると0.5Vの電圧低下が起きます。また、アンプの効率の問題もあり本来なら9.524Vと表示されるべきですが実際は9.512Vとなっています。 ![キャプションを入力できます](https://camo.elchika.com/72533c064288040695e6557f0d2f3ca8b37cfdf5/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f38646236383764372d366437642d346438352d623462392d376663353164343833366232/) 10kにしました。 これでArduinoで扱えるようになりました。 ## 接続方法 簡潔に。まず、アナログピンに上記回路図の電圧メータを接続します。この時、 * **アンプを通すと位相が逆転するので+-の向きに注意してください**。(回路図通りに組めば良い) * **パターンの配線に細心の注意が必要です。配線の抵抗に気を付けてください。** ソフトウェア面では、 AnalogRead関数を用いて0~5Vを0~1023の値で読み込み、計算をして電流値を出します。 この時の値はAnalogReadで得た1024段階の値を$X$とすると次の式で電流が求まります。 $$I=\frac{10}{1023}X$$

-

## メモ * **実際はシャン抵抗を10個並列にして0.01Ωにする。** この時、10kΩ抵抗は50kΩ抵抗にする。 * 電流計用電源としてマキタバッテリ18Vを考えていたで+12V,-12Vになっているが実際に製作をするときは9V, -9Vにした方が楽。生成にはレギュレータを使う。7809と7909。 * ブリッジダイード回路を用いて交流電流計を作る事も考えているのでLM741を使っているが、直流しかやらないというのであれば負電源を用意する必要がない単電源オペアンプを使うと良い。単電源オペアンプの増幅回路ついて検索すべし。 * Arduinoの源周り面倒だという方はアンプ非反転増幅回路使うゲイン倍率に注意。

+

## オフセッ電圧調整 yusufuさん指摘通りペアンプオフセット存在するでそれ補正します

-

### 問題点 * 理想違って現実ではオペアンプが狙った通り綺麗倍率で出力してくれ

+

交流電流を測定しない事を前提にするよう回路にります

-

はオペアンプ自体ではなく、回路設計側に問題があると思われる。

+

![そっぽい補正回路を足した](https://camo.elchika.com/384afb03b918901c4afcdb89a00c53725caaa6f0/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f38333931333937632d393462372d343266302d626130352d313861636163383165666433/)

-

もう少しスマートな方法がある筈なのアイデア募集中。無抵抗電流計については挑戦中です。

+

赤線囲った部分は20kΩ抵抗です。シミュレートの際は特に何も考えずに10kΩ10kΩにしました。

-

電流より微弱な電昇圧して測定する機械作り言っ多分正

+

新たに追加した抵抗の値については使用するアンプによって異なります。実製作するときとシミュレートの時では値がだいぶ異なってくると思うので今回挙げた抵抗値は大分適当です。実製作回路では更に100kΩ抵抗を可変抵抗にしています。ここらへんは実際に使うオペアンプの性質、パターンの抵抗などで変わってくると思います。 これについては次のサイトをご覧ください。 http://www.nteku.com/opamp/opamp-offset-chousei.aspx 上の回路より得られたシミュレート上の電流は次のようになります。 |負荷抵抗 [Ω]|実際の消費電流 [mA]|電圧から計算した消費電流 [mA]| |:---:|:---:|:---:| |1|9524|9520| |10|995.02|994.74| |100|99.95|100.11| |1000|10.00|10.21| |10000|1.000|1.215| 一応それっぽい電流を示す電流計になりました。実際は抵抗の誤差のほうが大きいのでなかなかこんなきれいな値はれな事と、Arduinoを使場合は表示分解能が0.97mAという事があるのでっと適当な電流計になる筈です。 ## メモ * **計測対象の電が低い時はシャント抵抗10個並列にして0.01Ωにする。** この時、10kΩ抵抗は50kΩ抵抗にする。 * 電流計用の電源としてマキタバッテリ18V考えていので+12V,-12Vになってるが、実際に製作をするきは9V, -9Vにし方が楽。生成にはレギュレータを使。7809と7909。 * シミュレータの都合上LM741を使っている、実際に作る時は負電源を用意する必要がない単電源オペアンプを使うと良い。単電源オペアンプの増幅回路については検索すべ。 * Arduinoの電源周りが面倒だとう方はアンプの非反転増幅回路を使うゲイン倍率に注意。