電子リレー(IRF520)と電流・電圧測定(INA219) と、近くの文房具屋さんで埃をかぶって売ってた「知育キット豆電球ソケットセット」を使ってENELOOPの放電器を作る。
ダイソーとかだと知育玩具が売ってなかった。
amazonのほうが安いんだけどこういう町のお店にはお金使いたいし。
前に書いたblogの簡単応用
方針
豆電球で電力を消費させ、解放電圧で0.9Vになったら放電をとめてENELOOPを痛まないように、なおかつニッカド水素特有の「メモリー現象」の回復(リフレッシュ)を行いたい。
中途半端に放電した状態で途中充電すると容量が減ってしまうのでこういうのが欲しかった。
単体の機材は売ってるし、電子回路で自作するものもいくつか公開されている。
んが、これは負荷をかけた状態で0.9VになったらOFFにするという仕組みで、実はENELOOPにはもう少し電力が残っている。
最後のひと絞りまで使い尽くすけどいたわり放電というのはマイコン IOT制御ならでは。
ハードウェア接続
IRF520は GPIO 21(40番ピン)と39番ピン(GND) を接続。pigpio + python3 で制御
INA219は、I2C用にGPIO 2(SDA/3番ピン),GPIO3(SCL/5番ピン)、VCCは1番ピン、GNDは9番ピン
ina219制御ライブラリはこちら の 「gitからライブラリを手に入れる」の項目を参照
実際の回路はこちら。1.2Vでは豆電球が暗いので手ブレしてる orz
OS
Rasberry PI の OSは、Raspbian Buster Lite 2019-07-10 のものを使った。
Python3の殴り書きソース
$vi discharge.py
#!/usr/bin/env python
# csvに出力したかったのでflush()を使いたい
import sys
# GPIOのコントロール
import pigpio
# sleep用
import time
# 現時刻取得用
from datetime import datetime
# 電力計のライブラリインポート
from ina219 import INA219
from ina219 import DeviceRangeError
SHUNT_OHMS = 0.1
# Raspi GPIO21(40番PIN)を出力設定にする
pi = pigpio.pi()
pi.set_mode(21,pigpio.OUTPUT)
# 電流測定の初期化
ina = INA219(SHUNT_OHMS)
ina.configure()
# 豆電球をoffにしておく
pi.write(21,0)
# 電池はすぐに電圧を復帰しないので、0.05秒待ってやる
time.sleep(0.05)
# 初期電圧を計る
voltage = ina.voltage()
print("%.3f" % voltage)
# 解放電圧が0.9V以上なら、whileでループ
while voltage > 0.9:
pi.write( 21,1 ) # 電球ON
time.sleep( 30 ) # 30秒豆電球を点灯
power = ina.power() # 消費電力を計る
pi.write( 21,0 ) # 電球OFF
time.sleep( 0.05 ) # ちょっとだけ待つ
voltage = ina.voltage() # 解放電圧を計る
print("%s,%.3f,%.3f" % (datetime.now().strftime("%Y/%m/%d %H:%M:%S"),voltage,power))
sys.stdout.flush() # python3だとこれがないと逐次出力にならない
# これがないと32回目の起動で失敗する。pigpioの仕様。
pi.stop()
使ってみた
6:09 に放電を開始、9:26 に0.7Vになったので放電を停止したようだ
2019/08/04 06:09:33,1.352,201.463
2019/08/04 06:10:03,1.348,200.976
2019/08/04 06:10:33,1.344,199.024
2019/08/04 06:11:03,1.340,197.805
中略
2019/08/04 09:25:33,1.032,115.122
2019/08/04 09:26:03,0.988,103.902
2019/08/04 09:26:33,0.752,54.390
この時点で解放電圧をテスター測ってみると、1.02Vもあり、やはり解放電圧は相当高めであった。