高機能9Vニッケル水素電池充電器:Arduino制御で定電流・dV/dt終止・トリクル充電対応(Ver.1)
概要
市販の9Vニッケル水素電池充電器の多くが「定電流制御なし、終止検知なし、過充電で寿命短縮」という問題を抱えるため、Arduino UNOで制御するスマート充電器を自作。MCP4725(I2C 12bit DAC)+LM358オペアンプ+LM317可変レギュレータで精密定電流源を構成し、-dV/dt検知で充電完了を判定、その後トリクル充電(C/40)へ自動移行するVer.1を実装。LCDで電圧/電流/時間/充電量を表示。
充電理論の要点
- 9V NiMH=単セル1.2V×7〜8直列(公称8.4〜9.6V)
- 満充電単セル電圧≈1.5V、充電中は1.6V超も
- 必要充電電圧:最大8セル×1.6V=12.8V+レギュレータ降圧+検知抵抗降圧 → 17V電源必須
- 急速充電:0.5C〜1C(dV/dtまたはdT/dt終止)
- 緩慢充電:0.1C(タイマー終止、14-16h)
- トリクル:<0.025C (C/40) 推奨
回路構成
定電流源ブロック
- MCP4725 DAC(0-5V出力)
- LM358オペアンプで3.06倍増幅(R4=6.8kΩ, R3=3.3kΩ) → 0-15.3V
- LM317 ADJ端子へ接続 → OUT-ADJ間1.2V維持でバッテリー電圧制御
- 電流検知抵抗 R5=10.2Ω(10Ω標準+実測補正)で電流=電圧/10.2
電圧測定ブロック
- バッテリー電圧:分圧器(R1=5.1kΩ, R2=20kΩ)で1/5に分圧 → A0入力(0-5V範囲内)
- 検知抵抗電圧:A2直結(0-5V範囲内)
安全/表示
- リレー(常開接点)でバッテリー物理切断
- I2C LCD(YwRobot 1602、New LiquidCrystalライブラリ使用)
- ブレッドボード電源モジュールで5V/3.3V供給
- 17V昇圧コンバータ(XL6009等)でLM317入力確保
ステート・マシン制御フロー
- INITIALIZATION:リレー切断、DAC=0V
- NO_BATTERY:電圧<0.1Vなら待機
- BATTERY_CONNECTED:電圧>7Vなら次の段階へ
- CURRENT_RAMP_UP:DAC電圧を微増し目標電流(既定30mA)到達まで
- CHARGING:定電流維持、毎分バッテリー電圧記録、5分間の線形フィット傾き<0で完了判定
- CURRENT_RAMP_DOWN:トリクル電流(C/40≈4.25mA)まで減衰
- TRICKLE:トリクル維持、最大6分(設定可)経過で終了
- END_OF_TRICKLE/FINAL_STATE:リレー切断、完了表示
異常検知:過電流(>200mA)、過電圧(>15V)、制御不能、電流予期せぬ減少 → 即座にリレー切断・エラー表示・停止。
ソフトウェア構成(複数.inoファイル)
charger.ino:メイン・ステートマシン、パラメータ定義main.ino:loop()、状態遷移ロジックhw.ino:ハードウェア抽象化(DAC書込、ADC平均化、リレー制御、保護割込み)lcd.ino:LCD表示更新(ちらつき防止ロジック込み)calculations.ino:最小二乗法で電圧傾き算出、時間変換、充電量計算
設定パラメータ(charger.ino冒頭)
float target_current_mA = 30; // 充電電流 mA
float battery_nominal_capacity_mA = 170; // 公称容量 mAh(トリクル電流計算用)
float max_time_for_trickle_charge = 6; // 最大トリクル時間(分)
容量170mAhなら最大170mA(1C)まで設定可能。最小≒17mA(C/10)。
表示例
- 充電中:
9.45V 30.0mA 12(電圧/電流/経過分) - 完了時:
Completed 0:45/Charge 22mAh(時間/充電量) - dV/dt傾きも表示:負値で完了検知
安全上の警告
- 高電流充電は発火/爆発リスクあり。放置禁止。
- アルカリ電池等の非充電池には絶対使用しないこと。
- NiMH専用。他化学系(Li-ion, NiCd等)はコード修正必須。
- 設計/コードのバグによる損害について作者は無責任。
今後の拡張予定(Ver.2以降)
- 放電機能(容量測定用)
- サイクル充放電(リフレッシュ/寿命試験)
- 温度センサー追加でdT/dt終止併用
- ボタン/ロータリー・エンコーダーでパラメータ設定可能に
- SDカード/EEPROMへログ記録
リソース
- 全ソースコード(6ファイル)
- New LiquidCrystalライブラリ(YwRobot LCD対応)
- 回路図(PNG)、Fritzingプロジェクト(
.zip)
まとめ
Arduino+DAC+オペアンプ+レギュレータという古典的アナログ制御構成で、市販品並みの「定電流・-dV/dt終止・トリクル」を実現したスマート充電器。ステート・マシン設計で挙動が明確、LCDで全パラメータ可視化、安全保護も多重化。NiMH電池の特性を深く理解し、アナログ回路設計とファームウェアの統合を学ぶ上で極めて優れたプロジェクトです。Ver.2での機能拡張も楽しみです。
製造プロセス
- スマート渇きアラート植物アラーム – 最適な水やりタイミングを知らせるDIYセンサー
- イタリア語ワードクロック自作:Arduino Nano、NeoPixel、LCD、RTCで時刻を文字で表示
- アナログ3ピンで4×3キーパッドを接続 - Arduinoピン節約テクニック
- Arduino MKR Fox 1200で作る信頼性の高いSigfox kWhメーター
- Bluetooth対応温度モニター:Arduino NanoとHC-06でスマホ監視
- 非接触ジェスチャー錠: APDS-9960とArduinoでセキュアアクセス
- Arduino Nanoコンパニオンキット – 電子工作に必須の部品とツールを搭載した多機能IC型デバイス
- Arduino Micro/Leonardo用 USB-MIDIアダプタキット – 完全パーツリストと実装ガイド
- Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保
- RGB 32バンド オーディオスペクトラムビジュアライザー - Arduino LEDマトリックスプロジェクト
- Arduino UNOで作る精密反応速度テスター