工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino Nanoで作るMPPTソーラーチャージャー: 太陽光発電の最大電力追従制御

必要な部品と材料

部品数量備考
Arduino Nano R31制御用マイコン
インダクタ 100μH1定格電流は必要出力に合わせて選定
Nチャネル パワーMOSFET (IRFZ44N等)1ロジックレベル駆動推奨
Adafruit Standard LCD 16x2 白文字/青背景1動作パラメータ表示用
ACS712 電流センサーモジュール2入力/出力電流測定用
ショットキーダイオード1出力側逆流防止・整流用
抵抗・コンデンサ各種適宜電圧分圧、フィルタ等

必要な工具

使用ソフトウェア

プロジェクト概要

市販の安価なチャージコントローラーはPWM方式で効率が悪く、MPPT対応の高効率品は高価です。そこで、自作でMPPT(最大電力点追従制御)機能付きの高効率ソーラーチャージャーを開発しました。バッテリーの状態と太陽光条件を理解し、太陽電池から最大電力を引き出して効率的に充電します。

Step 1: MPPTとは、なぜ必要か?

一般的な12V/100Wソーラーパネルの出力電圧は18-21Vですが、12Vバッテリーの充電電圧は11-13.6V程度です。従来のPWMコントローラーは単に電圧を下げるだけで、電流は増やせません(電力損失が発生)。

これに対し、降圧チョッパー(バックコンバータ)を用いれば90%以上の効率で電圧変換でき、余った電圧分を電流に変換できます。さらに、太陽電池の出力は非線形で、時間帯や日射量により最大電力点(MPP)が変化するため、MPPTアルゴリズムで常に最大電力点を追従させる必要があります。

Step 2: MPPTの動作原理

入力側の電圧・電流(VI特性)と出力側のVI特性を監視し、入力電力(Pin = Vin × Iin)と出力電力(Pout = Vout × Iout)を計算します。前回の入力電力と比較して、出力電圧(PWMデューティー比)を増減させ、入力電力が最大になる点を探索します(摂動観測法)。

例: 入力 17V × 5A = 85W、出力 13V × 6A = 78W の時、前回より入力電力が高ければ出力電圧を下げ、低ければ上げることでMPPに収束させます。

Step 3: ArduinoでのMPPT実装

以下はMPPTと出力制御を統合した核心部分のコードです。

// Iout = 出力電流, Vout = 出力電圧, Vin = 入力電圧
// Pin = 入力電力, Pin_previous = 前回入力電力
// Vout_last = 前回出力電圧, Vout_sense = 今回出力電圧

void regulate(float Iout, float Vin, float Vout) {
  if ((Vout > Vout_max) || (Iout > Iout_max) || 
      ((Pin > Pin_previous && Vout_sense < Vout_last) || 
       (Pin < Pin_previous && Vout_sense > Vout_last))) {
    // 過電圧/過電流、または電力が下がっている方向ならデューティー下げ
    if (duty_cycle > 0) duty_cycle -= 1;
    analogWrite(BUCK_PIN, duty_cycle);
  } else if ((Vout < Vout_max) && (Iout < Iout_max) && 
             ((Pin > Pin_previous && Vout_sense > Vout_last) || 
              (Pin < Pin_previous && Vout_sense < Vout_last))) {
    // 余裕があり電力が上がっている方向ならデューティー上げ
    if (duty_cycle < 240) duty_cycle += 1;
    analogWrite(BUCK_PIN, duty_cycle);
  }
  Pin_previous = Pin;
  Vin_last = Vin;
  Vout_last = Vout;
}

Step 4: バックコンバータ回路

Arduino Nanoで作るMPPTソーラーチャージャー: 太陽光発電の最大電力追従制御
NチャネルMOSFETによるローサイドスイッチング構成

通常ハイサイドスイッチングにはPチャネルMOSFETかドライバICが必要ですが、本設計ではNチャネルMOSFETをローサイド(負極側)に配置し、パネルの+12Vをグラウンド基準として使用しています。これにより安価なNチャネルMOSFET(IRFZ44N等)をArduinoのPWM出力で直接駆動可能です。

電圧測定の工夫

入力側と出力側でグラウンドが分離されるため、出力電圧の直接測定が困難です。そこで「入力側グラウンド(ArduinoのGND)と出力側グラウンドの電位差」を測定し、入力電圧から差し引くことで実出力電圧を求めています。

// 出力側グラウンド電位を測定 (入力GND基準)
Vout_sense_temp = Vout_sense_temp * 0.92 + float(raw_vout) * volt_factor * 0.08;
// 実出力電圧 = 入力電圧 - 両グラウンド間電位 - ダイオード順方向電圧降下
Vout_sense = Vin_sense - Vout_sense_temp - diode_volt;

電流測定にはACS712モジュールを使用(Arduino電源で駆動、入力側GND基準)。PWM周波数はタイマー設定変更により62.5kHz(D6ピン)としています。インダクタ値は周波数と電流要件に応じて選定(オンライン計算機利用推奨、100μH 5-10A程度)。

Step 5: 仕上げと追加機能

LCDによるパラメータ表示、ユーザー設定用スイッチ2個を追加。最終版コードと完全な回路図は近日公開予定。

Step 6: 実際の回路図・部品表・コード

Arduino Nanoで作るMPPTソーラーチャージャー: 太陽光発電の最大電力追従制御
実装しやすいよう簡略化された回路図

コード・BOM・回路図をアップロード済み。実際のものとは少し異なりますが、製作しやすい構成になっています。

完全版スケッチ (Solar_charger_tutorial_code.ino)

ウォッチドッグタイマー、EEPROM設定保存、LCDメニュー操作、ソフトスタート、過熱保護、ファン制御など実用的な機能を盛り込んだ完全版です。主要機能:

// 主要定義
#define VIN_PIN A1
#define VOUT_PIN A0
#define IOUT_PIN A2
#define IIN_PIN A3
#define LM35_PIN A4
#define FAN_PIN 5
#define BUCK_PIN 6
#define MENU_PIN 3
#define BUTTON_PIN 2
#define LED_PIN 13
#define CHARGE_LED A5
#define LIGHT_PIN 4

// LCD, EEPROM, ウォッチドッグ等の初期化
// メインループで10回平均サンプリング -> MPPT制御/充電制御 -> LCD表示更新
// 詳細コードは添付ファイル参照

回路図

Arduino Nanoで作るMPPTソーラーチャージャー: 太陽光発電の最大電力追従制御 Arduino Nanoで作るMPPTソーラーチャージャー: 太陽光発電の最大電力追従制御

設計のポイントと注意事項

製造プロセス

  1. ブルドーザー技術:設計、製造、将来イノベーション
  2. 太陽電池:初期実験から現代フォトボルタイクスまで
  3. Arduinoで実現する低コスト・リアルタイム太陽光パネル監視システム
  4. Bluetooth操作のArduinoスパイボットを自作する
  5. FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
  6. 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
  7. 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
  8. ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
  9. Arduinoプロジェクトのための最適化電源ソリューション
  10. ソーラートラッカー V2.0 – 高度なDIYソーラーパネル追尾システム
  11. 風力発電:大気の動きをクリーンな電力に変える技術