sako_DIYのアイコン画像
sako_DIY 2021年02月27日作成 (2021年02月27日更新)
製作品 製作品 閲覧数 4551
sako_DIY 2021年02月27日作成 (2021年02月27日更新) 製作品 製作品 閲覧数 4551

ESP32を用いた車載ソーラー発電設備~sigfoxで遠隔発電量監視~

ESP32を用いた車載ソーラー発電設備~sigfoxで遠隔発電量監視~

概要

私の家は、駅が近いということもあり敷地内には駐車場がなく、少し家から離れた位置に駐車場がある。
あまり治安の良い土地でもなく、飲み屋街が近くにあるということもあり防犯上心配なのである。

そこで駐車監視モード付きドライブレコーダーを導入し、乗っていないときでも監視できるようにしたが、ドライブレコーダーの設定上エンジン停止後12時間が限界で、
運転する頻度を考えると、これ以上バッテリーの負担は増やせない。
キャプションを入力できます
そこで車へサブバッテリーを搭載し、ソーラーバネルで充電するシステムを構築することで監視時間を延長することとした。

構成

まずはバッテリー及び制御装置、ソーラーパネルの設置場所だが、セダン車なので、後部座席後ろの窓の部分にデットスペースがあるためそこへ、ソーラーパネルを
キャプションを入力できます
制御装置及びバッテリーをトランク下ののオフション品等の収納場所へ搭載することにしました。
キャプションを入力できます

機器の構成としては以下の図のようにした。
キャプションを入力できます
なるべく車から独立したシステムにしたかったが、ソーラーからの発電では、充電量が不十分になりそうなので、
運転中は、車のACC電源から充電することとした。

充電コントローラ及びSigfox編

ハード

使用機器

まずは先程の構成図の右側の部分を解説します。
キャプションを入力できます

はじめにのシステムのメインとなる充電コントローラーだが、
Indoor Corgi社さんのE32-SolarCharger という製品を使わせていただいた。
https://www.indoorcorgielec.com/products/e32-solarcharger/
キャプションを入力できます

Arduino IDEで動作を自由にプログラミング可能な、IoTソーラーチャージャー基板です。WiFi内蔵マイコンであるESP32(ESP-WROOM-32)を採用しました。鉛バッテリー充放電回路、microSDスロット搭載。状況にあわせた充電、負荷の接続/切断ができ、ネットワークからのモニタリングも可能です。

引用https://www.indoorcorgielec.com/products/e32-solarcharger/
詳細は、上記リンクで確認していただくとして、
要するに、ソーラー発電システムに必要な、制御マイコン、PWMによる充電量制御、負荷の制御、電流電圧の測定機能がすべてこのボードに詰まっています。

次に、バッテリーですが、設置場所の兼ね合いで、LONG製密閉型ディープサイクルバッテリー12V12Ahを使うこととした。
完全密封型鉛蓄電池 12V12Ah WP12-12(F1端子)(秋月電子)
キャプションを入力できます
完全密閉型で補水等のメンテナンスフリーなっており、扱いやすいバッテリーとなっています。

そして遠隔監視用のsigfoxモジュールです。
Sigfox Breakout board BRKWS01 RC3(スイッチサイエンス)
キャプションを入力できます

Wisol SFM10R3モジュールをベースにした超小型フットプリントのSigfoxブレークアウトボードです。SigfoxのLPWAネットワークで簡単なデータ転送機能を提供します。
「Sigfox Buy」より、開発キットとして登録することで、1年間の無償回線込みでお使いいただくことができます。

sigfoxとは何かをここで語ると長くなりますので割愛させていただくとして、かんたんに説明すると、
フランス発のLPWA(Low Power Wide Area)の1種で、低消費電力で、長距離通信ができる規格です。日本では、京セラがサービス提供しています。

上記モジュールは、そのSigfoxをシリアル通信で扱えるようにしてあるボードで、arduinoやrasberrypiとも相性がいいです。

接続加工

バッテリーは、10Aのヒューズを介して、E32-SolarCharger のバッテリー接続ターミナルへ接続します。

sigfoxモジュールとE32-SolarCharger の接続ですが、E32-SolarChargerからはPCからのプログラム書き込み用に、ボードからRX、TX、GNDピンが出ています。
sigfoxモジュールには、3.3V 、RX、TX、GNDの4ピン必要なので、E32-SolarCharger上のESP32駆動用DCDCコンバータの出力から3.3Vを取り出した。
キャプションを入力できます

ソフトウェア

E32-SolarCharger

ESP32へ書き込むプログラムは、 Indoor Corgi社が公開している、サンプルプログラムを利用させていただき、必要に応じて編集した。
E32-SolarChargerを使ったソーラー充電システム サンプル
プログラム本体は、 Indoor Corgi社のサイトから確認していただくとして、変更点のみ記述します。

float vBatTarget = 15.0; // 最大充電電圧の目標値 float cBatTarget = 3.6; // 最大充電電流の目標値

目標充電電圧と電流値を使用するバッテリーに合わせます。
今回使用したバッテリーでは、
充電電圧(サイクルユース):14.4~15.0V
充電電圧(スタンバイユース):13.5~13.8V
充電電流:~3.6A
となっています。

Serial.begin(9600); //sigfoxモジュールに合わせる

シリアル通信速度はデフォルトで115200になっていますが、sigfoxモジュールに合わせます。

// TimelyTaskManagerにタスクを登録 timelyTaskManager.setHourlyTask(4, 5, SendSigfox); timelyTaskManager.setHourlyTask(5, 20, SendSigfox); timelyTaskManager.setHourlyTask(6, 35, SendSigfox); timelyTaskManager.setHourlyTask(7, 50, SendSigfox);

タイムスケジューラ関数が用意されていますので、sigfox送信用関数を15分ごとに実行するように登録します。
sigfoxは、140回/日という制限がありますので、24時間*60分/140回=10.28....分となるので、
マージンを取って15分ごとにしています。
ここは発電量や運転頻度の多い日中の送信間隔を短く、夜間は長くするという工夫をすればより詳細にデータ取りができそうです。

case ESP_SLEEP_WAKEUP_TIMER: // タイマーでDeep sleepから復帰 wakeUpTimer = true; ina219.vbus(true); ina219.current(true); lcd.clear(); if (logMode) { oneTimeLog(); } loadControl(); SendSigfox(); //sigfox()送信 sleepControl(); wifiControl(); break;

E32-SolarChargerではESP32のdeepsleep機能を用いて、発電量が低下したときに、sleepし消費電流を抑える機能がついています。
deepsleepから15分に1回復帰し、電圧確認し電圧が低ければまた15分後に起動します。
このループに入ってるときは先程のスケジューラは実行されないため、別途deepsleepからの復帰時にsigfox送信関数を呼び出すようにします。

void SendSigfox(){ //sigfox 送信関数 float vCharge=vcharge(); //入力電圧測定 float vBat = ina219.vbus(true); //バッテリー電圧測定 float cBat = ina219.current(true); //充電電流測定 int vCharge2=abs(vCharge*1000); int vBat2=abs(vBat*1000); int cBat2=abs(cBat*1000); char buf[30]; if(cBat<0){ //充電電流を16bitの符号付きへ加工 cBat2=(cBat2^0xFFFF)+1; } sprintf(buf, "AT$SF=%04x%04x%04x",vCharge2,vBat2,cBat2);//データー加工 if(Serial){ Serial.println("");  delay(100); Serial.println(buf); //sigfoxモジュールへ送信コマンド送付 } }

こちらがそのsigfox送信関数です。
入力電圧、バッテリー電圧、充電電流を測定し、データ加工、シリアルにてsigfoxモジュールへ送信します。
sigfoxモジュールに、AT$SF=送信データ(最大12Byte)をシリアルで送信することにより、sigfoxサーバーにデーターが送信されます。
12Byteをどのように使用するかは、ユーザーが自由に設定できますので、今回のシステムでは以下のようにしました。
キャプションを入力できます
充電電流は、放電中は負値となるため符号付きです。

sigfoxcallback 及びambient

受信したsigfoxデーターは、sigfox.comで確認できます。
ですが、送信されたデータは16進数データで見にくいので、callbacks機能を用いて、加工そしてambientに転送、グラフ化します。
キャプションを入力できます
受信したデータをどのように加工するか設定するCustom payload configには、以下のように設定しました。

input:0:uint:16 battery:2:uint:16 Current:4:int:16

こうすることで、ESP32で加工して送信したデータを復元できます。
そして加工したデーターをambientにポストします。

Urlpattern

http://ambidata.io/api/v2/channels/XXXXX/data

Contenttype

application/json

Body

{ "writeKey":"XXXXXXXXXXXXX", "d1": {customData#input}, "d2": {customData#battery}, "d3":{customData#Current} }

これで、sigfoxcallbacksの設定は完了で、データー受信時に自動でデーター加工、Ambientへ転送されます。
ambientでの設定方法の説明は省略しますが、受信したデータをグラフ化するとこんなかんじなりました。
キャプションを入力できます

制御装置編

次に構成図の中心部分の制御装置をを制作します。
キャプションを入力できます
機能としては、給電元の切替機能、昇圧、ノイズフィルタ、負荷制御、逆流防止です。

  1. 給電元の切替は、リレーを用いて、エンジン駆動時は、車から給電するように、それ以外は太陽光パネルから給電する様に切り替えます。

  2. 昇圧は、充電コントローラーは降圧型で、入力は、充電目標電圧以上の電圧の入力を必要とするので、15V以上に昇圧します。

  3. ノイズフィルタは、E32-SolarChargerは本来、入力に太陽光パネルを接続するように設計されているので、車からの給電時のノイズを抑えるため、別途ノイズフィルタを取り付けます。意味があるかはわかりません

  4. 負荷制御は、E32-SolarChargerに機能としてあるのですが、回路図をみるかぎりマイナスコントロールです。車ではボディアースを取る関係上不便なので、リレーでプラスコントロール化します。

  5. 逆流防止ですが、 車のエンジン駆動時にサブバッテリーへ給電するようにしていますが、車のエンジンスタート時は、車が大電流を要求するので、サブバッテリーから逆流しないように、ショットキーダイオードを入力回路に挿入します。

以上の機能を含め設計した結果がこちらです。
キャプションを入力できます
そして制作したものがこちらです。
キャプションを入力できます
ノイズフィルターとダイオードはここに写っていませんが最終完成時には組み込まれています。
使用したものは以下です。

車載編

それでは実際に車に組み込みます。
車からの電源及び負荷(ドラレコ)は車前方、
制御装置及びソーラーパネルは、車後方なので、5mの1.25sq 2cのソフトキャプタイヤケーブルを用意し
配線しました。
車前方ヒューズボックス
車後方トランク

後部座席後ろにソーラーパネル及び、sigfox用アンテナを設置しました。
ソーラーパネル 50W
アンテナ延長ケーブル
キャプションを入力できます
キャプションを入力できます
そして今回制作した機器をすべて組み込みました。
キャプションを入力できます

完成編

以上ですべての工程が完了しました。
最後に、当初の目的が達成できているかを確認します。
今回使用したバッテリーは12Ahで表記は20時間率で計算された値だそうです。
12Ah÷20時間=0.6A
よって0.6Aの電流で20時間駆動できるということです。

今回接続したドライブレコーダーは、公称5W実際は12V0.25A程度(3W)でした、
よって単純計算で40時間以上駆動できるはずです。
実際に充電無しで、2日半ほど駆動できたことが確認できました。

あとは日中の太陽光でどれほど充電されるかは、現在検証中です。
今回のシステムは、インバーター等用意すれば、いざ災害などで、電源断となった場合の仮電源としても使用できそうです。

以上長くなりましたがお読みいただき、ありがとうございました。

1
ログインしてコメントを投稿する