見出し画像

ベランダ発電 発電量の可視化をしてみた

ベランダに設置している太陽光パネル2枚の発電量を確認したくなって、試行錯誤した結果を簡単に紹介します。

いきなり成果物の紹介

長々とシステム構成とか機器紹介とかしてもつかみとしては面白くなさそうなので「こんなのできた」をまず紹介。こんなグラフができました。ドン!

画像
発電量のグラフ (ambientサイトにて作成)

下記のリンク先のサイトでリアルタイムで見れます。(AmbientというIoTデータ可視化サービスを利用しました)

発電量積み上げグラフ

画像
発電量積み上げグラフ (1分間隔の瞬間値)

2つのパネルの発電量を積み上げて表示しています。(単位はmW)

この日は曇りで時折晴れ間がでるという天気でした。急に晴れると一気に発電量が上がって2パネル合計で120Wを超えています。80Wと40WのパネルなのでMAXで発電できることはまず期待できないのですが、瞬間値でみるとMAXを超えたりするみたいですね。

電圧+電流グラフ

画像
右軸電流、左軸電圧

2つのパネルの電圧と電流をグラフにしてます。
見分けづらいですが、ピンクの線が 40Wパネルの電圧、赤の線が80Wパネルの電圧です。

接続しているポータブル電源のMPPT機能の差だと思いますが、ピンクの線(Anker)は電圧が激しく上下しているのに対して、赤の線(Jackery)は比較的フラットに推移しています。

推測するにAnkerは積極的に電圧を変更して最大で発電できるポイントを検索し続ける傾向があり、Jackeryは多少の電流変動でも電圧を変更せず発電量を平準化しているように見えます。このあたりはMPPTの調整する思想のちがいっぽいですね。

発電効率がAnkerの方が良いかというとそこはデータを集めて平均を取るなどしないと結論は出ないのですが、どちらも変わらないように見えます。Ankerは瞬間的に高い電力を取り出そうとしますが、電圧を上げると電流が下がり思ったほど電力が取り出せていないようです。

Ankerのポータブル電源のLCDで確認できる太陽光パネルの発電量は10Wを表示した次には2Wを表示するとかブレが大きいです。Jackeryのポータブル電源では測定値では瞬間的に10Wを記録していても5WのLCD表示のまま変化しないなどとなることも確認できます。

つまり、Ankerのポータブル電源では瞬間最大値を表示しやすく、Jackeryのポータブル電源では平均値に近い値が表示されると言えそうです。

ユーザーからすると瞬間的に高い値が確認できる方が性能が良いように見えがちなので、ユーザーへの「ウケ」が良さそうな作りをしているのがAnkerなのかもと推測しています。

1時間ごとの発電量グラフ

画像
1時間ごとの発電量を平均化したグラフ

1 時間ごとの発電量を平均化したグラフです。2枚のパネルの発電量を積み上げてグラフにしてます。

すごく天気がいいと2つのパネルの合計で1時間平均で100W近い値が確認できました。2パネル合計で120Wh発電できる仕様ですが、その7割ぐらい性能が発揮できれば十分と思っていたところ、98Wh 発電できているので 81%の性能が実測でだせたのはなかなかです。

1日ごとの発電量推移グラフ

画像
発電量推移 (Wh)

1日のトータルの発電量を確認するためのグラフです。朝から順々に増えていって夜に最大値になり、翌朝0からまた始まります。

上記グラフをご覧の通り、すごく天気の良い日は 2パネル合計で 500Wh を超えます。
天気が悪いと 50Wh にも届きません。ばらつきがすごく大きいです。

一般的に 100Wの太陽光パネルでは平均して 200Wh/1日 ぐらいが期待できるそうです。このシステムでは120Wの太陽光パネルなので 240Wh/1日 が期待値となるようですが、本当にそうなのかは1年ぐらいデータをとってみないとわからないですね。

今のところ言えるのはすごく天気がいいとポータブル電源の容量MAXまで余裕で充電できるけれども、天気が悪いとほとんど発電できない。日中に外出していて無駄なく発電した電気をすべてポータブル電源に貯めたいなら、太陽光パネルの5倍程度の容量のポータブル電源が最大で必要と思われます。
けれども、そんなに大きなポータブル電源を用意しても天気が悪い日が続くとあっという間にポータブル電源の中身が空っぽになってしまう。高いお金をかけてポータブル電源を用意しても無駄なく貯めて無駄なく使うのはなかなか難しそうですね。

システム構成

簡単にシステムを紹介して終わりにします。
念の為、注意事項を

  • 全部自分で買ったものです

  • 製品をオススメする意図はありません

  • 買い始めると沼なので気をつけましょう

  • 太陽光発電で購入した機器の元は取れません(20年ぐらい使えばとれるかもしれないけど現実的ではない)

40Wパネルシステム

  • 太陽光パネル: FlexSolar Portable 40W USB&DC Solar Phone Charger

  • ポータブル電源: Anker 522 Portable Power Station (320Wh)

80Wパネルシステム

  • 太陽光パネル: Jackery SolarSaga 80 (JS-80A)

  • ポータブル電源: Jackery ポータブル電源300 Plus

電力モニタシステム

  • コンピュータ: Raspberry Pi 3

  • 測定チップ: INA260

画像
ラズパイとINA260チップ2セット 配線が汚い。。。

ベランダに設置した太陽光パネルからケーブルをエアコン穴を通して室内にもってきて、ポータブル電源に接続する手前でINA260のチップを挟んで測定しています。

上記のサイトを参考にさせていただいて、作りました。
(参考どころか中身もよくわからずほとんどそのまま利用させてもらっています)
ありがとうございます。

作成したプログラムは以下
ラズパイが起動したらこのプログラムが自動で起動するようにデーモンとして登録して使ってます。INA260は 0x40 と 0x43 の二つのアドレスで一つのラズパイに接続してます。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import csv
from datetime import datetime
import signal
import time
import board
import adafruit_ina260
import ambient

# ambientサイトへデータを送信するためのキーを登録
ambi1 = ambient.Ambient(xxxx1, "xxxxxxxxxxxxxxx1") 
ambi2 = ambient.Ambient(xxxx2, "xxxxxxxxxxxxxxx2")

REC_START_HOUR = 5 
REC_END_HOUR = 17
 
# CSVファイルからWの値の合計を計算する関数
def calculate_w_total(csv_filename):
    w1_total = 0.0  # Wの合計を初期化
    w2_total = 0.0

    try:
        with open(csv_filename, mode='r', newline='') as file:
            reader = csv.reader(file)
            #header = next(reader)  # ヘッダー行をスキップ

            for row in reader:
                if len(row) >= 5:
                    w1_value = float(row[4])  # Wの値を浮動小数点数に変換
                    w1_total += w1_value  # Wの値を合計に追加
                    w2_value = float(row[7])  # Wの値を浮動小数点数に変換
                    w2_total += w2_value  # Wの値を合計に追加

		# 1秒間隔のデータを1時間データにして Wh 単位としてリターンする
        return w1_total/3600000, w2_total/3600000

    except FileNotFoundError:
        print(f"ファイル '{csv_filename}' が見つかりませんでした。")
        return None
    except Exception as e:
        print(f"エラーが発生しました: {e}")
        return None
 
# メインタスク関数
def task(arg1, arg2):
 
    # 電流・電圧・電力の取得
    cur1 = ina260a.current
    vol1 = ina260a.voltage
    po1  = ina260a.power
    cur2 = ina260b.current
    vol2 = ina260b.voltage
    po2  = ina260b.power

    global po1d
    global po2d

    po1d.append(po1)
    po2d.append(po2)

    # 日時の取得
    _now = datetime.now()
    today = _now.strftime("%Y-%m-%d")
    nowtime = _now.strftime("%H:%M:%S")
    file_end = _now.strftime("%Y%m%d")
    
    print ('日付 %s 時刻 %s 電流 %.2f/%.2f mA 電圧 %.2f/%.2f V 電力 %.2f/%.2f mW' % (today,nowtime,cur1,cur2,vol1,vol2,po1,po2))
    
    if REC_START_HOUR <= _now.hour <= REC_END_HOUR:
        with open('/home/admin/work/power/power2_%s.csv' % (file_end),'a') as f:
            writer = csv.writer(f)
            writer.writerow([today,nowtime,cur1,vol1,po1,cur2,vol2,po2])
            
            if _now.second == 0:
                input_csv_filename = '/home/admin/work/power/power2_%s.csv' % file_end
                total_w1, total_w2 = calculate_w_total(input_csv_filename)
                total_all = total_w1 + total_w2

                if len(po1d) > 0 and len(po2d) > 0 and _now.minute == 59:
                    po1a = sum(po1d) / len(po1d)
                    po2a = sum(po2d) / len(po2d)
                    po_all = po1a + po2a
                    po1d = []
                    po2d = []
                    print(total_w1, total_w2, total_all, po1a, po2a, po_all)
                    r = ambi1.send({"d1": total_w1, "d2": total_w2, "d3": total_all, "d4": po1a, "d5": po2a, "d6": po_all})
                
                print(total_w1, total_w2, total_all)
                r = ambi2.send({"d1": cur1, "d2": vol1, "d3": po1, "d4": total_w1, "d5": total_w2, "d6": cur2, "d7": vol2, "d8": po2})
    else:
        print('記録時間外')
 
i2c = board.I2C()
ina260a = adafruit_ina260.INA260(i2c)
ina260b = adafruit_ina260.INA260(i2c,address=0x43)

po1d = []
po2d = []


signal.signal(signal.SIGALRM, task)
signal.setitimer(signal.ITIMER_REAL, 0.1, 1) # コマンドラインでCtrl+Cで止められるように
 
while True:
    time.sleep(1)

作成にあたってよくわからない部分は ChatGPTに聞いてみたんですが、的確に回答してくるし、ちゃんと動くコードまで書いてくれるのですごいことがよく分かりました。

プログラム作成するのに詳しい人に聞いたり、google で検索たりするより、ChatGPTに聞いた方が早いし正確って時代になっちゃったんですね。すごいなぁ。

おわりに

久しぶりにハンダゴテ出してきて電子工作して面白かったです。
気が向いたらシステムの詳細などを紹介してみようと思います。

ポータブル電源や太陽光パネルの特性やら癖がいろいろあって測定してみててとっても面白いですね。なんだかいろんな太陽光パネルやポータブル電源を試してみたくなりますが、買いまくってると大変なことになっちゃうのでとりあえず機材増やすのはこのぐらいでしばらくやめとこうと思います。(本当に我慢できるのかは。。。。)

それではまた。

この記事が参加している募集

#我が家のDIY

2,370件

この記事が気に入ったらサポートをしてみませんか?

コメント

パワーバンクス@公式note
すごいですね!視覚化されていると発電量がわかりやすいです。プログラムの部分は私の頭では処理できませんでした 笑。MPPTによってこんなに取り込み方が違うんですね!
toshi
電圧、電流を可視化して眺めていたら、いろいろな考察ができたので記事にまとめてみたのですが、こんなニッチな情報にコメントいただけて嬉しいです。

ことの発端は、Ankerのポータブル電源に繋いだ方がLCD表示で見る限り発電量が多いので、Jackeryのポータブル電源のMPPTは実は性能が悪いのか?と疑問を持ったところからでした。

Ankerはユーザーにわかりやすい表示をするように調整されているように傾向的に見えるだけで実は発電量は大差がなさそうかなという感じになったと思ってます。

これはバッテリー残量のパーセンテージ表示にも言えそうです。
Ankerの方がバッテリ残量の値は増えやすく減りやすく見えます。
Jackeryは増え方も減り方も変化が穏やかな感じがします。

これもちゃんと取り出した電力を記録して差をみないと正確なことは言えないのですが、これも設計思想の違いでJackeryは変化を少なく見せてるのかもしれないです。(ちゃんと調べてみたいですね)

パワーバンクスさんのJackeryでエアコン使った記事もこの辺が影響しているのかもしれないと思って読ませていただきました
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。
二児の父。専業主夫見習い。 子育て楽しんでます。
ベランダ発電 発電量の可視化をしてみた|toshi
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1