ソーラーパネル出力電力測定(データロガー製作編)

下記の記事で、薄型ソーラーパネルの出力電力の温度特性等をChatGPT 4o等に調べてもらったが、1日のうちにどのように出力電力が変化するのかなどを調べてみたくなったので、Arduinoを使った測定装置(データロガー)を製作した。
製作するにあたって、欲しい機能をどのような構成で実現できるかを検討する段階からChatGPT 4oに相談しながら進めた。

まず、基本的な機能としては、出力電力のデータを一定時間ごとに長時間保存することなので、実現できる装置についてChatGPT 4oに聞いてみた。

ソーラーパネルの出力電力を長時間測定し、データをためられる機器はありますか

ソーラーパネルの出力電力を長時間にわたって測定し、データを保存できる機器はいくつかあります。一般的なものとしては、以下のようなデバイスが考えられます。

1. データロガー(データ記録装置)
: HOBO社のデータロガーやCampbell Scientific社のものなど、温度、湿度、電圧、電流などの測定に対応した多用途のものがあります。
ポイント: 測定間隔を自由に設定できるものが多いため、長時間の測定に最適です。
2. パワーモニター(電力モニター)
: EnphaseやSolaredgeなどのパワーモニターは、ソーラーパネルの電力生成状況をモニタリングでき、クラウドを介してデータを長期間保存することも可能です。
ポイント: 特に太陽光発電システム用のモニターは、発電状況の詳細なログデータをクラウドに自動保存してくれるため便利です。
3. ArduinoやRaspberry Piを用いた自作測定システム
概要: ArduinoやRaspberry Piに電圧や電流を測定するセンサーを組み合わせることで、長時間にわたりデータを記録できるカスタムデバイスを構築できます。
利点: 低コストで柔軟性があり、好みに合わせてプログラムやデータ記録方式を調整可能です。
ポイント: データをクラウドに自動保存するようにプログラムすることもできますが、若干の電子工作スキルが必要です。
これらの装置の中から、測定したいデータの種類、必要な記録期間、予算などに応じて適切な機器を選ぶと良いでしょう。

回答されたデータロガーや電力モニターなどは数十万円もするような装置が多かったので、安価なArduinoで製作することにした。

次に装置の概略構成を確認した。

Arduinoに電圧や電流を測定するセンサーを組み合わせた、長時間にわたりデータを記録できるカスタムデバイスの作り方を教えて

(下記の内容は作成途中のものであり最終の仕様とは異なる)

Arduinoに電圧や電流を測定するセンサーを組み合わせたデータ記録デバイスを構築するには、以下の手順で進めるとよいでしょう。

必要なパーツ
Arduinoボード(例: Arduino Uno)
電圧センサー(例: ZMPT101B AC電圧センサーモジュール)
電流センサー(例: ACS712電流センサーモジュール)
SDカードモジュール(データを長期間保存するために使用)
SDカード(データ保存用)→実際はmicroSDカードを使用
抵抗や配線(必要に応じて)
ソーラーパネル(測定対象)

構築手順
1. 配線を設定する
電圧センサー電流センサーをソーラーパネルの出力に接続します。これにより、ソーラーパネルからの電圧と電流を測定できます。
センサーからの出力をArduinoのアナログ入力ピン(A0、A1など)に接続します。

2. SDカードモジュールの接続
SDカードモジュールをArduinoに接続します。一般的な配線は以下のようになります。
MISO: Arduinoのピン12
MOSI: Arduinoのピン11
SCK: Arduinoのピン13
CS: 任意のデジタルピン(例: ピン4)

3. ソフトウェアの準備
Arduino IDEでプログラムを作成します。
必要なライブラリをインストールします。
SDライブラリ: データの保存に使用します。
Wireライブラリ: 必要に応じて、センサーとの通信に使用します。

4. コードの作成
以下は、電圧と電流を測定し、SDカード(実際はmicroSDカード)に記録するArduinoコードの例です。
(コード例、表示省略)

5. 動作確認と調整
Arduinoをソーラーパネルに接続し、SDカードモジュールがデータを記録していることを確認します。
測定値が正しいことを確認するため、測定結果と実際の出力値を比較し、必要に応じて補正を行います。

6. 長時間測定のための電源
ArduinoとSDカードモジュールを長時間動作させるための電源が必要です。モバイルバッテリーやソーラーパネルなどの安定した電源を用意してください。

7. データ解析
記録されたデータ(datalog.txtファイル)をPCに取り込み、ExcelやPythonなどを使用してデータを可視化・解析します。

注意点
センサーの範囲確認: センサーの計測範囲がソーラーパネルの最大出力に対応しているか確認します。
データの頻度: microSDカードの容量と記録の頻度を考慮して、測定間隔を調整しましょう。
温度管理: デバイスの周囲温度によって計測精度が変わる場合があるため、できるだけ安定した環境で設置します。

インターネットで、例示されたArduino用のモジュールを探し、下記の構成で製作する方法についてChatGPT 4oに質問したところ、モジュールのどの端子をどこに接続するかや、それらのモジュールを使った場合のコード例が示された。

Arduinoボード(例: Arduino Uno)
電圧センサー(Youmile DC 0-25V Arduino用端子電圧検出器モジュール)
電流センサー(ACS712電流センサーモジュール)
SDカードモジュール(KKHMF SDカードスロットソケットリーダーモジュールArduino用 SPIマイクロSDアダプタ)

(下記の内容は作成途中のものであり最終の仕様とは異なる)

ソーラーパネルの出力電力を長時間にわたって記録するためのカスタムデバイスを作るには、以下の手順で進めます。この手順では、Arduinoボード(Arduino Uno)、電圧センサー、電流センサー、SDカードモジュールを用いて、電圧と電流を記録し、そのデータをSDカードに保存する方法を解説します。

必要な部品
Arduino Uno
電圧センサー(例: Youmile DC 0-25V)
電流センサー(例: ACS712)
SDカードモジュール
SDカード(実際はmicroSDカード)
ソーラーパネル
ジャンパーワイヤー

概要
ソーラーパネルの出力電圧と電流をそれぞれ電圧センサーと電流センサーで計測し、そのデータをArduinoが読み取り、microSDカードに保存します。電力は「電圧 × 電流」で求められ、Arduinoプログラムで計算してログに記録します。

ステップ1: センサーとArduinoの接続
電圧センサーの接続
電圧センサーの入力端子をソーラーパネルの出力に接続します。
電圧センサーの出力ピン(「OUT」)をArduinoのアナログ入力ピン(例: A0)に接続します。
センサーの「VCC」と「GND」をそれぞれArduinoの「5V」と「GND」に接続します。
電流センサーの接続
電流センサー(ACS712)の「VCC」と「GND」をArduinoの「5V」と「GND」に接続します。
電流センサーの「OUT」ピンをArduinoの別のアナログ入力ピン(例: A1)に接続します。
ソーラーパネルの出力のプラス側を電流センサーに通し、電流を計測します。
SDカードモジュールの接続
SDカードモジュールの「VCC」と「GND」をそれぞれArduinoの「5V」と「GND」に接続します。
SDカードモジュールの「CS」「MOSI」「MISO」「SCK」ピンをArduinoのデジタルピン10, 11, 12, 13にそれぞれ接続します(SPI通信)。

ステップ2: Arduinoコードの作成
(コード例、表示省略)

コードの説明
SDカードの初期化
SD.begin(chipSelect);を使って、SDカードを初期化します。失敗した場合はメッセージを出力します。
電圧と電流の測定
電圧センサーからの値をanalogRead(voltagePin)で読み取り、電圧に変換します。同様に、電流センサーからの値をanalogRead(currentPin)で読み取り、電流に変換します。
電力の計算
power = voltage * current;で電力を計算します。
microSDカードへの記録
電圧、電流、電力を「datalog.txt」に書き込みます。

ステップ3: 動作確認
Arduinoをソーラーパネルに接続し、デバイスの動作を確認します。記録がうまくいっているかを確認するには、microSDカードをPCに挿入し、「datalog.txt」ファイルを開いてデータをチェックします。

注意点
電圧センサーと電流センサーのスケール
センサーによって出力が異なるため、仕様に応じてスケール調整が必要です。
ソーラーパネルの電圧
高電圧を計測する場合は、センサーが対応できるか確認してください。
これで、長時間にわたってソーラーパネルの出力電力を記録できるカスタムデバイスが完成です。

さらに、時刻や温度も記録する方法や、測定値を表示する方法について相談したところ、RTCモジュール(リアルタイムクロックモジュール)、温度センサ(防水プローブ)、OLEDディスプレイを使う方法が提案された。この提案を受けて、装置の概略構成を下図のようにした。
温度センサは、実際はセンサー転換器の基板に接続しており、その基板にはプルアップ抵抗が内蔵されていた。
(注:下記回路は作成途中のものであり最終構成とは異なる)

Arduinoやそれに接続するモジュール等の情報はインターネット上に豊富にあり、AIを利用してそれらを用いた構成について調べるのは容易だが、色々な疑問点をChatGPT 4oに確認しなければならなかった。

・リアルタイムクロック(RTCモジュール)への最初の時刻の設定方法を質問したところ、パソコンの現在時刻を設定するコードが提案された。
・「SDカードの初期化に失敗しました」というエラーについて質問し、32Gまでの容量のmicroSDカードまでしか使えないことが判明。
・うまく動作しない原因を尋ねたところ、I2Cアドレスを調べるためのコードが提案された。
・OLEDディスプレイの表示を行うコードと、microSDカードに書き込みを行うコードを別々に作成したところ、それぞれのコードは正常に動作したが、OLEDディスプレイ表示とmicroSDカード書き込みの両方を行うコードは正常に動作しなかったので、SPIを使用するSDカードモジュールとの競合等について質問したところ、多数の解決方法が示されたが、まだ解決していない。
・Arduinoに書き込むコードのサイズが大きいので書き込めないとのエラーが出たので、コードのサイズを小さくする方法を質問し修正してもらった。
・使用した電流センサモジュールは両方向の電流を測定できるものだが、20Aタイプの測定範囲は、-10A〜10Aなのか、-20A〜20Aなのかを質問したところ、-20A〜20Aとの回答。
・使用した電流センサモジュールは両方向の電流を測定できるものなので、ソーラーパネルからの出力線を逆に接続しても壊れないものだったが、正符号の測定値を得るためには、ソーラーパネルの+端子をどちらの入力端子に接続すべきかについて質問。
・計算された電力の値がおかしい値だったので、生成されたコードを調べたところ、電流センサモジュールの5Aタイプの感度(185mV/A)で計算されていたので、使用した20Aタイプの感度をChatGPT 4oに調べてもらい、感度100mV/Aに計算式を修正。

作成した装置を下図のようにケースに収めた。長めのジャンパーワイヤーしか手元になかったので、配線がごちゃごちゃしているが、OLEDディスプレイの表示を行うコードと、microSDカードに書き込みを行うコードを使い分けることによって目的の機能を達成することができた。

OLEDディスプレイの表示例は下図の通り。ただし、温度センサをソーラーパネルにまだ貼り付けていないので温度は室温。

安価なワットメーターもソーラーパネルに接続しており、上記測定時と同様の時刻での表示は下図の通り。

・インターネットもない時代では、電子工作の月刊誌ぐらいしか情報源がなく、部品の入手も容易ではなかったが、現在は作成したい機器についてAIに相談して実現することができ、部品の入手も容易である。
・今後、出力電力等をmicroSDカードに記録し、日の出前から日没後までのデータを取得して、10Wや20W以上の出力電力が期待できる時間帯などを調べたり、発電量に対する天候の影響を数日間にわたって調べたりする予定。microSDカードに保存されるファイルのサイズは、1秒程度の間隔で1時間程度記録したところ140KB程度だったので、たとえば3秒間隔で記録すれば長期間の記録が可能である。
・厳密な測定値が必要なわけではないので、センサの測定値の補正やノイズ対策は行なっていない。

目次