E32-SolarChargerを使ったソーラー充電システム (IoTソーラー充電、放電制御)

概要

ソーラーパネルより鉛バッテリーへの充電、および接続機器への放電をコントロールするE32-SolarCharger用のアプリケーション例です。

バッテリーの電圧、電流をLCD表示するほか、microSDカードへのロギング機能があり、グラフ化して分析するなどの応用が可能です。 電圧低下時の負荷切断機能、夜間などの充電が見込めない時は電力消費を抑えるスマートスリープ機能を実装しております。 WiFiを使用することで、ユーザースイッチだけでなく、Webブラウザ経由でも制御可能です。

Arduino IDEソースコード

プログラムはArduino IDE形式です。以下より ダウンロードして、お使いのArduino IDEでE32-SolarChargerボードに プログラムを書き込んでください。

Arduino IDE 2.xにおいて、自動インストールされるライブラリと衝突してコンパイルできない場合があるため、Arduino IDE 1.8.xをご使用下さい

ボードマネージャーのインストール時、ESP32coreを以下の表のバージョンに合わせて下さい。合っていないと正常に動作しない場合があります。

Version日付ESP32core変更履歴
2019_9_72019/9/71.0.0WiFi非接続で動作時に、測定値ロギング用csvファイルが作成できない点を修正しました。
2020_8_22020/8/21.0.4ESP32core 1.0.4に対応しました。Webサーバー機能をサードパーティライブラリに依存しないように書き換えました。inoファイルのコメントを日本語に直しました。その他、細かい修正を行いました。
2020_9_212020/9/211.0.4ソーラー入力回路の発熱を抑えるため、PWM周波数を500Hzに変更しました。電流測定とPWM調整の安定度を向上させました。
2020_9_282020/9/281.0.4電圧と電流が低い際のPWM調整ルーチンを修正しました。
2020_11_22020/11/21.0.4特定の状況で急激にソーラー電圧が上昇すると電圧制御がうまく動作しない問題を修正しました。
2020_12_52020/12/51.0.4SDカード、SPIFFSにアクセスした際に一部メモリーが解放されない問題を修正しました。
2021_2_102020/2/101.0.4時刻がずれる場合があるため、WiFi接続時に明示的にNTPサーバーと同期するようにしました。

サードパーティライブラリ (Version 2019_9_7のみ)

Version 2020_8_2以降のバージョンでサードパーティライブラリは不要になりました。それ以前の旧版をお使いの方のみインストールして下さい。

Version 2019_9_7は以下のサードパーティArduinoライブラリを使用していますので、あらかじめインストールしてください。 以下からダウンロードして解凍してできたディレクトリをArduino IDEのlibrariesディレクトリにコピーして下さい。

ライブラリVersion内容
ESPAsyncWebServer1.1.0Webサーバーを実装するために使用します。
AsyncTCP1.0.0上記ESPAsyncWebServerが使用します。

最新版のESPAsyncWebServer、 AsyncTCPの組み合わせだと起動に失敗します。 ESP32core1.0.0、 ESPAsyncWebServer1.1.0、 AsyncTCP1.0.0 でご使用下さい。




プログラムの準備

行番号は最新バージョン2021_2_10のものになります。旧版は同様の設定をしている箇所を変更して下さい。

SolarCharger.inoファイルの13, 14行目にお使いのWiFi SSIDとパスワードを入れてください。現在時刻とBootstrapコードをインターネット上から取得しているのでインターネットに接続されたWiFiをご使用ください。WiFiに繋がない場合はWebサーバーと現在時刻が利用できませんが、それ以外の機能は動作します。

const String wifiSSID = "yourssid";        // WiFiのSSIDを入力
const String wifiPass = "yourpassword";    // WiFiのパスワードを入力

IPアドレスを固定したい場合は15行目をコメントアウトして、アドレスをカンマで区切って設定して下さい。

// #define staticIP 192, 168, 1, 100  // IPを固定する場合はコメントを外してIPを記入する(カンマ,で区切る)

SolarCharger.inoファイルの17-27行目は充放電制御に関する設定になっております。 お使いの機器に合わせて値を調整してください。基板で測定できるのは、バッテリー充電電流となっており、 バッテリー充電電流 = ソーラーパネルの入力電流 – 負荷への出力電流という関係になっております。 バッテリーの仕様のほか、ソーラーパネルの最大入力電流8Aを超えないように設定してください。 なお、基板自体が消費する電力は測定値に含まれません。

// バッテリー充放電のカスタマイズ
float vBatTarget = 14.0;      // 最大充電電圧の目標値
const float vBatG1 = 0.1;     // vBatTarget +/- vBatG1を外れたらPWMを調整する
const float vBatG2 = 0.8;     // vBatTarget +/- vBatG2を外れたらPWMを大きく調整する
float cBatTarget = 1.0;       // 最大充電電流の目標値 (ソーラーからの入力電流 - 負荷への出力電流)
const float cBatG1 = 0.1;     // cBatTarget +/- cBatG1を外れたらPWMを調整する
const float cBatG2 = 0.5;     // cBatTarget +/- cBatG2を外れたらPWMを大きく調整する
float vLoadCut = 10.8;        // バッテリー電圧がこの値を下回ったら負荷を切断する(自動の場合)
float vLoadRecover = 12.0;    // バッテリー電圧がこの値を上回ったら負荷の切断を解除する(自動の場合)
float vChargerSleep = 8.0;    // ソーラー入力電圧がこの値を下回るとスリープに入る
float vChargerWakeup = 11.0;  // ソーラー入力電圧がこの値を上回るとスリープを解除

デフォルトではSDカードにログ情報を書き込むようになっています。SDカードをFAT32でフォーマットし、 常にスロットに入れた状態でご利用ください。 SDカードを使用せず、内蔵フラッシュのSPIFFS領域に書き込むように変更することも出来ます。 その場合はStorage.hの15行目opLogSDをfalseに変更してください。

static const bool opLogSD = true;       // true : SD, false : SPIFFS

起動

ソーラーパネル、バッテリーなどの接続はE32-SolarCharger製品ページをご参照ください

電源を入れてシリアルモニタを開いてプログラムを書き込んでください。 書き込み手順はこちらで解説しています。その後、SW3を押しながらSW1を押して起動してください。 (ソーラー入力電圧が低いとスリープに入るようになっております。 SW3を押しながら起動するとそれを回避します。実際の運用時はSW3を押す必要はありません。) 起動して正常にWiFiに接続すると以下のようにIPアドレスが表示されます。 同じWiFi上のPCやスマホのブラウザを開いて、http://IPアドレス/battery.php を開くことで、 ネットワーク上から測定値の確認、ログのダウンロードなどが行えます。

-----------------------
Program start

WiFi Connected IP : 192.168.2.224
2020/08/02 16:00 Time Configured
2020/08/02 16:00 Web Server Started

LCD、スイッチ制御

LCDディスプレイ上にバッテリーなどの情報が表示されます。SW4、SW5を押すことで表示される情報を切り替えられます。

メニュー内容
BAT V/Cバッテリー電圧、電流を表示します。放電は負の値となります。
BAT Pバッテリー電力を表示します。放電は負の値となります。
CRG Vソーラー入力電圧を表示します。
LOGロギングが稼働中かどうか表示します。
LOAD負荷の設定を表示します。AUTO:電圧により自動 OFF:切断
SLEEPスリープの設定を表示します。AUTO:電圧により自動 OFF:スリープにしない

LOG, LOAD, SLEEPのメニューでSW3を押すと値を変更するモードになります。 SW4、SW5で値を変更し、再度SW3を押すことで設定値が変わります。

測定値のロギング

ロギングを有効にすると、バッテリー電圧、電流、電力およびソーラー入力電圧をcsv形式で記録します。 ファイルはSDカードまたはSPIFFS上に保存されます。 アクティブ状態では1分に一度、スリープ中は15分に1度の頻度で記録を行ないます。




負荷制御

LOADをAUTOに設定すると、バッテリー電圧に応じて負荷の接続をコントロールします。 バッテリー電圧がvLoadCut設定値を下回ると負荷を切断し、赤色LEDが点灯します。 バッテリー電圧がvLoadRecover設定値を上回ると負荷を再接続します。 消費電流が多い負荷を接続中はバッテリーの電圧が一時的に低下しますので、 vLoadCutとvLoadRecoverには1V以上差を付けることを推奨しております。 アクティブ時は1分おき、スリープ時は15分おきにバッテリーの電圧をチェックして負荷を切り替えます。

スマートスリープ

SLEEPをAUTOに設定すると、ソーラーパネル入力電圧に応じてDeepSleep状態に入ります。 入力電圧が8Vを下回ると夜間もしくは発電の見込めない曇天と判断しスリープ状態に入り、黄色LEDが点灯します。 入力電圧が11Vを上回るとアクティブ状態となり、緑色LEDが点灯します。 スリープ中は消費電力を下げることができますが、WiFiは切断状態となります。 アクティブ時は1分おき、スリープ時は15分おきに入力電圧をチェックしてスリープを切り替えます。

ブラウザから制御

ブラウザから基板のWebサーバーにアクセスして情報の確認、操作が可能です。 スリープ中はWebサーバーも停止するためアクセスできません。 手動でSW3を押してスリープ状態から復帰してください。

バッテリー管理ページ (http://IPアドレス/battery.php)
バッテリー情報、ソーラーパネル入力電圧、充放電設定値などが確認できます。 ログ、スリープ、負荷の切り替えも可能です。
ログファイル管理ページ (http://IPアドレス/logfile.php)
記録したログファイルのダウンロード、削除ができます。
システム情報ページ (http://IPアドレス/system.php)
システム情報の確認のほか、基板の動作を記録したファイルのダウンロード、削除ができます。

まとめ

ソーラーパネルより鉛バッテリーへの充電、および接続機器への放電をコントロールするE32-SolarCharger用のアプリケーション例の説明は以上です。プログラミングで自由に動作をカスタマイズすることが可能です。ネットワークに繋がったソーラーコントロールシステムの例として、参考にして下さい。

Indoor Corgiでは他にもプログラミング可能な基板と、応用例を公開しています。そちらもぜひ参考にして下さい。

E32-BreadPlus(スイッチ付き コンパクトESP32、ESP-WROOM-32 ブレッドボード開発基板)

WiFi、Bluetooth機能を内蔵したマイコンであるESP32、ESP-WROOM-32をブレッドボードに挿して開発するための基板です。Arduino IDEで自由に動作をプログラミングすることができます。リセットとプログラム書き込み用スイッチ実装済のため、自分の作りたい回路に集中できます。使用できないピンを削減したことで、類似品に比べてコンパクトになっています。

ESP-IR+TPH Monitorをブラウザから制御 (温度/湿度/気圧/赤外線制御 ホームIoT)

ESP-WROOM-02をWebサーバーとして動作させ、スマートフォンやPCのブラウザから 温度、湿度、気圧の取得、赤外線送信、動作ログの取得などを行うESP-IR+TPH Monitor用のアプリケーション例です。

ESP-PowerMonitorで電流測定 (電流、電力の測定とIoTモニタリング)

基板上に搭載されているINA219を用いて、接続機器の電圧、電流を測定するESP-PowerMonitor用のアプリケーション例です。