乾電池の内部抵抗による電圧降下を実際に測定してみました。
無負荷の状態から大電流を流した際に、どのように電圧が落ちるのかをグラフ化しています。
乾電池の内部抵抗の値がどのくらいなのかを分かりやすく紹介します。
乾電池の電圧降下と内部抵抗を測定・計算してみた
アルカリ乾電池(単三)を無負荷と負荷状態で電圧値を測定してみました。
無負荷の電圧が1.5Vで、負荷時(2.2Ω)の電圧が1.27Vでした。
乾電池の内部抵抗による電圧降下を確認できています。
計算式のE-rI=RIより、単三電池の内部抵抗は0.398Ωでした。
※計算過程は後の方で記載しています
測定方法から計算方法まで詳細に紹介していきます。
また実際に内部抵抗の影響により、乾電池で電圧降下する様子も下記の動画にしています。
負荷(抵抗)を接続した瞬間に乾電池電圧が落ちることが良く分かります。
乾電池の内部抵抗
乾電池には内部抵抗があります。
理想的な状態は起電力(E)のみなのですが、現実の乾電池には内部抵抗(r)があります。
新品ならば大抵数Ω以下の非常に小さく、日常の使い方では特に気にしない抵抗です。
基本的に乾電池の電圧は1.5V
例えば、電池で動く時計・リモコン・マウスなど消費電流が小さいものを想定します。
消費電流が小さい場合(数mA程度)、乾電池の電圧を測定してもほぼ「1.5V」となります。
乾電池の内部抵抗の影響はほとんどありません。
仮に起電力_1.5V、内部抵抗_0.5Ω、消費電流_約10mAの場合が下記です。
乾電池の電圧は「1.495V」となり、テスターなどで測定しても大体1.5Vとなります。
内部抵抗による電圧降下は僅か(0.005V)しか発生していません。
大電流を流すと電圧降下により1.5V以下
但しモータなど大きい負荷・機器を想定した場合は、乾電池の内部抵抗の影響がでてきます。
消費電流が大きい場合(数A程度)、乾電池の電圧は「1.5V」を大きく下回ります。
仮に起電力_1.5V、内部抵抗_0.5Ω、消費電流_1Aが下記となります。
乾電池の電圧は「1.0V」となり、1.5Vから大きく電圧が低下します。
消費電流が1Aのため、内部抵抗(0.5Ω)による電圧降下が0.5Vも発生します。
テスターで乾電池の内部抵抗の測定は難しいです
市販のテスターでは乾電池の内部抵抗が測定できません。
実際に所持しているテスターで試してみましたが、もちろん測定出来ませんでした。
1Ω以下の乾電池の内部抵抗の測定は普通のテスターではまず無理だと思います。
(接触抵抗の誤差、テスターの精度的にも難しいと考えられます)
専用の測定器などもメーカから出ていますが、非常に高価なものとなっています。
乾電池に大電流を流して電圧降下させます
今回は乾電池に電流を流して電圧降下を測定して、内部抵抗を計算していきます。
乾電池に電流を流す回路に関しては下記記事でも紹介しています。(リンク先はこちら)
乾電池に「抵抗値が小さく」「容量が大きい」抵抗を接続すればOKです。
今回は2.2Ωの5W品のセメント抵抗を繋げています。
大きい抵抗(100Ωや1kΩ)より、小さい抵抗(数Ω)の接続した方が大電流が流せます。
電流を多く流せた方が内部抵抗による電圧降下を確認しやすいです。
電力容量(W)が大きめの抵抗を選びます
乾電池の電圧は1.5Vですが、電流を多く流すので電力容量(W)が大きめの抵抗を接続します。
電力容量(W)が大きい抵抗としてはセメント抵抗が市販でも販売されています。
例えば、乾電池1.5Vに2.2Ωの抵抗を使うとすると単純計算で1Wを超えます。
W(電力) = V(電圧)×I(電流) = V(電圧)^2/R(抵抗) = 1.5(V)^2/2.2(Ω) = 1.02(W)
今回選んだセメント抵抗は5W品のため、十分に電力容量に余裕があります。
電力容量(W)に余裕があるセメント抵抗でも結構発熱します。
普通の金属皮膜抵抗だと1/4W程度のため、NGです。最悪燃えます。
最初は筆者もセメント抵抗を持っていなくて、金属皮膜を複数並列で接続しようと思いました。
ただ一回試したところ発熱がかなり大きかったので、結局セメント抵抗を購入しました。
余裕持った電力容量(W)の抵抗を使用するのをおすすめします。
乾電池の電圧降下を自動でプロット・CSV化
大電流を流す前後で電圧値をグラフ化させて電圧降下の確認までしたいと思います。
テスターを目で見て電圧値をプロットするのは手間です。
そのためArduinoのアナログ入力を使って自動的に電圧値を測定させます。
但し、単純に内部抵抗を計算したいだけならばテスターでも可能です。
負荷と無負荷の状態で乾電池の電圧を下記記事のようにテスターで測定するだけでOKです。
Arduinoをラズベリーパイと連携させることで自動でグラフ化までさせます。
また後でデータとして使えるようにcsv出力まで対応していきます。
実際の回路図イメージとしては下記形です。
乾電池の放電回路にArduinoのアナログ入力ピン(A0)とGNDを接続した形です。
特にはんだ付けなどは必要なく、ジャンパー線などで配線・接続すればOKです。
電池BOXやICクリップ-ワニ口があると接続が楽だと思います。
下記記事でラズベリーパイとArduinoとの連携方法に関して紹介しています。
その際も可変抵抗使ったアナログ電圧を読み取りグラフ化しています。(リンク先はこちら)
ラズベリーパイとArduinoを連携!アナログ入力を応用してみた
ArduinoでAD変換してラズパイにデータを送ります
Arduinoには予め、AD変換+USB経由でラズパイにデータを送るプログラムを書き込んでおきます。
Arduinoの開発環境のインストール方法や、プログラムの書き込み方法も特に難しくありません。
下記記事で紹介しています。(リンク先はこちら)
ArduinoでAD変換!分解能10bitで電圧測定してみた
Arduinoにはアナログ入力があり、AD変換することが可能です。(ラズパイには無い機能です)
電池の電圧値をArduinoで読み取らせます。実際のプログラムは下記です。
0.5秒周期でArduinoのアナログ0ピンの電圧値を読み取り、ラズパイにデータを送信します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void setup() { // put your setup code here, to run once: Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: float analog_0 = analogRead(0); float voltage_0 = (analog_0*5)/1024; Serial.print("ADC="); Serial.print(analog_0); Serial.print("\t"); Serial.print("V="); Serial.print(voltage_0); Serial.println(""); delay(500); } |
ラズベリーパイとPythonでプロット・CSV化
ラズパイにはデフォルトでPythonがインストールされており、誰でも簡単に使用できます。
初心者の方でも大丈夫です。下記記事で使い方を紹介しています。(リンク先はこちら)
ラズベリーパイでプログラミング入門!Pythonの簡単な始め方
PythonでArduinoとUSBシリアル通信
今回のプログラムは下記記事でラズパイのCPU温度をリアルタイムでプロットした応用版です。
ラズベリーパイのヒートシンクの効果は?ファンまで必要かを検証!
今回はCPU温度ではなく、USB接続されているArduinoのデータをPythonでグラフ化します。
Pythonで1秒間隔でUSBシリアル通信をReadして、電圧を表示・プロットします。
そして指定の時間(今回は2分後)に測定したデータをcsvで出力しています。
出力したcsvはプログラムの同フォルダに作成されます。
実際に使用したプログラムは下記です。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import itertools import math import numpy as np import serial ser = serial.Serial('/dev/ttyUSB0', 115200) from matplotlib import pyplot as plt from matplotlib import animation from subprocess import getoutput def _update(frame, x, y): """グラフを更新するための関数""" # 現在のグラフを消去する plt.cla() # データを更新 (追加) する x.append(frame) # Arduino*の電圧を取得する a="" a=ser.readline() while ser.in_waiting: a= a + ser.readline() a2= a.split(b'V=') a3= a2[1].split(b'\r') y.append(float(a3[0])) # 折れ線グラフを再描画する plt.plot(x, y) # 指定の時間(s)にファイル出力する if int(x[-1]*10)== 120: np.savetxt('logger_bat_drop.csv', y) # グラフのタイトルに電圧を表示する plt.title("CH* = "+ str(y[-1]) +" V") # グラフに終止電圧の0.9Vに補助線(赤点線)を引く p = plt.plot([0, x[-1]],[0.9, 0.9], "red", linestyle='dashed') # グラフの縦軸_電圧の範囲を指定する plt.ylim(0,2.0) def main(): # 描画領域 fig = plt.figure(figsize=(10, 6)) # 描画するデータ x = [] y = [] params = { 'fig': fig, 'func': _update, # グラフを更新する関数 'fargs': (x, y), # 関数の引数 (フレーム番号を除く) 'interval': 1000, # 更新間隔 (ミリ秒) 'frames': itertools.count(0, 0.1), # フレーム番号を無限に生成するイテレータ } anime = animation.FuncAnimation(**params) # グラフを表示する plt.show() if __name__ == '__main__': main() |
乾電池の電圧降下を測定します
実際に測定した乾電池は「三菱電機」製の単三アルカリ電池です。
冒頭でも紹介しましたが、実際の測定動画が下記となっています。
無負荷→負荷(2.2Ω抵抗)を付けた瞬間に電圧降下が発生しています。
測定データのcsvは下記となります。ご自由にお使いください。
CSVでは1秒置きのデータで2分間(120秒)の電圧値が保存されています。
最初は無負荷で、15秒辺りで2.2Ω抵抗を接続して負荷状態にしています。
mitsubishi-alkaline_drop-2-2.csv
無負荷で乾電池の起電力を測定します
最初に無負荷(2.2Ω抵抗を接続していない)状態で電圧を測定しました。
乾電池の電圧値は大体1.5Vでした。
回路図で言うと本当に乾電池に何も接続していない状態です。
※厳密にはArduinoのアナログ入力ピンに繋がっていますが、今回は省略しています。
この結果より「乾電池の起電力_E=1.5V」とします。
負荷時の乾電池の電圧を測定します
次に負荷(2.2Ω抵抗)を接続して、乾電池の電圧を測定します。
乾電池の電圧は大体1.27Vでした。
回路図で言うと2.2Ω抵抗に接続された状態です。
この結果より「(負荷時の)乾電池の電圧=1.27V」とします。
乾電池の内部抵抗がどのくらいかを計算します
測定した情報より乾電池の内部抵抗を計算していきます。順番としては下記になります。
- 乾電池に流れる電流を計算する
- 乾電池の内部抵抗を計算する
乾電池に流れる電流を計算します
負荷時の乾電池の電圧が、抵抗2.2Ωにかかる電圧になります。
電流 = 乾電池の測定電圧/抵抗 = 1.27V/2.2Ω = 0.577A となります
乾電池の内部抵抗を計算します
内部抵抗を含んだ、乾電池の計算式は「E-rI=RI」です。
そのため「1.5V - r ×0.577A = 2.2Ω × 0.577A」となります。
結果、乾電池の内部抵抗 r=0.398Ω となりました。
計算した内部抵抗が合っているか検証します
計算した内部抵抗が合っているか確認・検証します。
新たに同じ種類の新品の電池で、今度は抵抗を2.2Ω→4.4Ωにして測定してみます。
回路図としては下記形になります。
前回同様の電池のため、起電力 E=1.5V・内部抵抗値が0.398Ωとしています。
乾電池に流れる電流がI = 1.5V / (0.398Ω + 4.4Ω) = 0.313A となります。
そのため負荷時の乾電池の電圧がV = 4.4Ω×0.313A = 1.376V 付近になるはずです。
実際に測定したグラフが下記です。
負荷時(4.4Ω)が1.37Vとなり、計算値とほぼ同じ結果になりました。
乾電池の内部抵抗としては大体合っていそうです。
測定データのcsvは下記となります。ご自由にお使いください。
CSVでは1秒置きのデータで2分間(120秒)の電圧値が保存されています。
最初は無負荷で、15秒辺りで4.4Ω抵抗を接続して負荷状態にしています。
mitsubishi-alkaline_drop-4-4.csv
あくまで今回のは一例で、電池の残り容量などで結果は変わりますのでご注意ください。
まとめ
今回は乾電池が電圧低下と内部抵抗に関して紹介させていただきました。
記事をまとめますと下記になります。
ラズベリーパイ(raspberry pi)とPythonは今回のようなデータ取集に非常に便利なツールです。
ハードウェアの勉強や趣味・工作にも十分に使えます。是非皆さまも試してみて下さい。
コメント