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

sanguisorba が 2020年05月23日15時32分50秒 に編集

コメント無し

本文の変更

~~**未完成です。** 何か進展があったら書き直します。~~ 間違っている点やお気づきの点がありましたらコメントいただけると助かります。

-

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

+

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

追記 それっぽいものができました。 # 何故作ろうと思ったのか 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$$ ## オフセット電圧調整 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の電源周りが面倒だという方はアンプの非反転増幅回路を使う。ゲイン倍率に注意。