コンパクトなプログラマブル ポケット電源 - OLED表示・Arduino互換・USB充電式
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO(開発用) / Arduino Nano R3(本体組み込み用) | 1 | 最終的にはNanoまたはATmega328P単体で組み込み |
| XL6009 DC-DC ブーストコンバーター モジュール | 1 | Li-Po 3.7V → 15.6V 昇圧 |
| LM317 可変出力リニアレギュレーター | 1 | 出力電圧可変用 |
| 7805 5V レギュレーター | 1 | MCU用電源 |
| MCP4131 デジタルポテンショメーター (10kΩ, SPI) | 1 | 制御電圧生成(7bit, 129ステップ) |
| LM358 オペアンプ | 1 | デジタルポテンショ出力を2.5倍増幅 |
| OP07 精密オペアンプ | 1 | 電流検知用(低オフセット 10µV) |
| ラッチリレー 5V 2A (2コイル) | 1 | 出力ON/OFF、ラッチで消費電流ゼロ |
| SSD1306 OLED (128×64, SPI/I2C) | 1 | 電圧/電流/電力/稼働時間表示 |
| Li-Po バッテリー 3.7V (USB充電対応) | 1 | |
| 1N4007 ダイオード、抵抗各種 (1k, 10k, 22.1k, 1MΩ等) | 適宜 | 分圧、電流制限、プルアップ等 |
| タクトスイッチ 12mm (割り込み用×2) | 2 | |
| 16MHz 水晶発振子、端子ブロック、ピンヘッダー、FR4ユニバーサル基板、銅テープ、ホットグルー等 | 1式 |
必要なツール
- はんだごて、ホットグルーガン、ミニドリル
使用ソフトウェア
- Arduino IDE
- ライブラリ:
U8glib(OLED表示)
プロジェクト概要
趣味の電子工作で頻繁に必要となる可変電源を、低コスト・携帯性・プログラマブル・充電式で自作しました。市販のベンチ電源は高価・大型ですが、これは手のひらサイズで 2.0V〜12.0V / 最大400mA 出力、電圧・電流・電力メーター機能、ラッチリレーによる保護機能、OLEDメニュー操作を備えます。ファームウェアアップデートで機能追加も可能です。
仕様
- 最大出力電流: 400 mA
- 出力電圧範囲: 2.0 V 〜 12.0 V
- 電圧ステップ: 約 0.1 V
- 最高効率: 約 75%
- 電流測定精度: ±1 mA
- 電圧測定精度: ±0.02 V
※クイックプロトタイプです。大容量バッテリー・追加回路・設計改良で 0〜30V、負電源、大電流化も可能。
動作原理(ブロック図ベース)
- 電源: 3.7V Li-Po → XL6009 で 15.6V 昇圧 → 7805 で 5V (MCU用) 生成。USBからはダイオード+5Ω抵抗で簡易充電(※Li-Po充電としては非推奨、専用IC推奨)
- MCU/インターフェース: ATmega328P (Arduino互換) + 割り込みボタン×2 (INT0/INT1) + SSD1306 OLED (SPI風) + USBシリアル書き込みポート
- 可変電圧生成コア: MCP4131 デジタルポテンショ (10kΩ, 7bit=129ステップ) → 0〜5V, 約40mVステップ → LM358 (2.5倍増幅) → 0〜12.5V, 約0.1Vステップ → LM317 ADJピン へ入力
- LM317 出力: Vout = Vadj + 1.25V (入力15.6Vでドロップアウト余裕あり) → 外部負荷へ
- 電流検知: 負荷帰還GNDを 1Ω 検知抵抗 経由でシステムGNDへ → 電圧降下 (1mV/mA) → OP07 (2.5倍増幅) → 2.5mV/mA → ADC (内部1.1V基準, 約1mV/LSB) で 0〜400mA 測定
- 電圧監視: バッテリー電圧、昇圧電圧、充電電圧、出力電圧を分圧してADC入力
- ラッチリレー: 2コイル駆動 (D4, D5) で出力遮断/接続。パルス駆動で保持消費電流ゼロ。過負荷/短絡時自動遮断、手動でも操作可
製作プロセス
- シングルスイッチソケットボックスを加工、バッテリー/USBポート/電源スイッチ等をレイアウト
- XL6009用ヒートシンクを銅テープ+コインで自作
- 3モジュール構成で基板作成:
① Arduino + I/O + 制御モジュール
② ステップ電圧生成 + LM317 モジュール
③ 電流検知 (OP07) モジュール - モジュール間を配線・はんだ付け、ホットグルーで固定・絶縁
ファームウェア構成 (Ver 1.0.3 Beta)
複数タブで機能分割:
- ADCタブ:
calc_VI()で各電圧/電流を20回平均サンプリング、内部1.1V基準ADCで変換 - Digipotタブ:
increment/decrement_digipot()でMCP4131をソフトSPI制御 (D6=CS, D7=CLK, D8=DATA) - Displayタブ:
update_display()でU8glib使用、テキスト/数値/ステータス表示 (将来: グラフ/アナログメーター風) - Interruptタブ: INT0/INT1 (D2/D3) フォーリングエッジ割り込みでボタン検知、チャタリング対策に並列コンデンサ
- Relayタブ:
rc1/2_latch()でラッチリレーコイルへパルス出力 (D4/D5 → トランジスタ駆動) - Timerタブ: Timer1 で1秒割り込み、稼働時間カウント
メインループ概要
void loop() {
update_display();
calc_VI();
if (Switch1 == 0) { rc1_latch(); Switch1 = 1; increment_digipot(); } // 電圧UP / リレーON
if (Switch2 == 0) { rc2_latch(); Switch2 = 1; decrement_digipot(); } // 電圧DOWN / リレーOFF
delay(100);
}
既知の制限事項
- 出力電圧 2.0V 未満不可 (LM317の Vref 1.25V + 分圧構成由来)
- 電圧はステップ可変 (連続可変ではない)
- 電流検知の1Ω抵抗でグランドシフト発生、大電流時精度低下
- ADC分解能低い (1.1V/1024 ≈ 1mV)
- 低電圧大電流時の効率が悪い (リニアレギュレーター特性)
- Li-Po充電回路が簡易的 (ダイオード+抵抗のみ、CC/CV制御なし) → 専用充電IC (TP4056等) への置換推奨
コードバージョン履歴
- Ver 1.0.1: ピンアサインコメント付き基本版
- Ver 1.0.2 Beta: テキスト/ボックス配置修正、過負荷トリップ修正
- Ver 1.0.3: 起動時リレー誤動作修正、起動時デフォルト出力 5.00V 設定追加
完全なスケッチは記事のCodeセクション(ダウンロードリンク)を参照。
回路図
Circuits.io (現 Tinkercad Circuits) 版: オンラインシミュレーター
参考・学習リソース
- ロータリーポテンショメーター チュートリアル
- ボタン/割り込み チュートリアル
結論
このプログラマブルポケット電源により、マルチメーターなしで電圧/電流/電力を確認しながらプロトタイピングが可能になりました。携帯性・拡張性・低コストを両立し、今後のファームウェアアップデートでさらなる機能追加(グラフ表示、プリセット電圧、データログ、Bluetooth監視等)を予定しています。
製造プロセス
- Arduino UNOとOLEDディスプレイでクラシックPongゲームを自作:ステップバイステップチュートリアル
- スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
- Arduino電源制御センター:N-FET/P-FET/リレー/RTC搭載キット
- Arduino Dueと3.2インチTFTで作る温度監視付きリアルタイムクロック
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- Arduinoプロジェクトのための最適化電源ソリューション
- Arduino MegaとNextion HMIで作る高機能ウェザーステーション
- ArduinoとNokia 5110ディスプレイで自作電圧計:ステップバイステップガイド
- Arduino Mega 2560搭載 総合トレーニングキット – センサー、モーター、カスタムPCB完備
- NextionディスプレイでFridgeyeアプリを構築:ステップバイステップガイド
- Arduino UNOとEthernetシールドで太陽放射を測定する自作ピラノメーター