天体撮影用の天気スコア算出アプリの作成

 天体撮影をする時に、天気予報が信用しにくいです。

普通の天気予報の「晴れ」は全く当てにならなくて、いつもwindyと睨めっこしています。

これを何とか指標化出来ないかなともがいてみます。
しかも、PCではなくandroidアプリで。

結論を最初に言うとアプリは出来上がりましたが使い物になっていません。



windy は API を提供しているので、ひとまずアカウント登録します。
point forcastのAPI キーを取得しました。

取得できるデータを確認し、計算式を考えて、計算アプリを作ってみます(もちろんコーディングは全部Gemini任せ)。

言語はpythonです。


早速、現段階の状況です。

見た目はともかく、私の端末(pixel6a)では狙い通り動いてます。
算出ロジックは下の通り。


総合スコア

総合スコア = (雲スコア * 0.75) + (シーイングスコア * 0.1) + (湿度スコア * 0.05) + (風スコア * 0.1)


この計算式は、tomが何となく決めた式です。
何か根拠があるわけではありません。

結果を見ながら修正を加えようと思っています。

雲スコア (配点75%)

下層雲・中層雲・上層雲の合計雲量から算出します。

合計雲量 = min(下層雲[%] + 中層雲[%] + 上層雲 [%], 100)  ※足して100を超える場合、100を上限とする
雲スコア = 100 - 合計雲量


シーイングスコア (配点10%)

シーイングはwindy APIで取得できるデータから算出できそうだったので頑張ってみました。

ここでは、大気屈折率構造定数(Cn2)を、複数の大気層(850hPa〜200hPa)にわたって積分することでシーイングを推定します。

1. 各大気層でCn2を計算:
Cn2 ∝ L04/3 * (dT/dz + Γ)2
(L0: 乱流の外スケール, dT/dz: 気温減率, Γ: 断熱減率)

2. 全層でCn2を積分: Integral_Cn2 = ∫ Cn2(z) dz

3. フリードパラメータ(r0)を算出: r0 = (0.423 * k2 * Integral_Cn2)-3/5 (k: 光の波数)

4. シーイング値(arcsec)に変換: Seeing(") = 0.98 * λ / r0 (λ: 光の波長)

5. スコア化: 0.5秒で100点、4.0秒で0点となるように線形変換します。


湿度スコア (配点5%)

気温と露点温度の差から、夜露の発生しやすさなどを評価します。

温度差 = 気温[℃] - 露点温度[℃]
湿度スコア = min(100, max(0, (温度差 / 15) * 100))


風スコア (配点10%)

地上の風速を評価します。

風スコア = max(0, 100 * (1 - 地上風速[m/s] / 10))




ここまで作って、動作確認をしてみるとAPIでデータを取得する毎にスコアが変わる事が発覚。
しかも値がランダムに変わっている感じ。


調べてみるとwindyから取得するデータが、コール毎に全く違う数値になっている事が分かりました。
これは全く使い物にならない・・・


ここまで来るのにも結構苦労してまして、kivyで記述してBuildozerでビルドしようと思いましたが、Buildozerでのビルドがどうやってもうまくいかない。
config.pxi を手動作成したり、いろいろしてみましたが断念。

そこからbeewareで書き直してここまでたどり着いたのに・・・
(もちろん書いたのは全部geminiですが)


正直かなりショックでした。
まぁ、シーイングの計算が出来る事も分かったし、収穫はゼロではないという事にします。




もうひとつ、Sirilのpythonスクリプトも作ってみました。

あぷらなーとさん考案のクールファイル補正法です。
6月初旬に手動でトライしていたものを、pythonで記載しました。


思っていた通り、Sirilスクリプトでは無理でしたがpythonスクリプトであれば書けました。


たぶん出来ているとは思うんですが、クールピクセルが大暴れしている画像がないので検証が出来ません(笑)

このスクリプトは検証出来ていないですし、他人のロジックなので今のところ公開する予定はありあせん。




んー、晴れて欲しいなぁ…
撮影したい。



コメント

にほんブログ村

PVアクセスランキング にほんブログ村 にほんブログ村 写真ブログ 天体写真へにほんブログ村 科学ブログ 天文学・天体観測・宇宙科学へ