スポンサーリンク

ラズピコでバイブコーディング SSD1306 で日の出と日の入りのグラフを描画する

前回、ラズベリーパイPicoをパソコンにつないで、Thonnyなど中間のアプリケーションが不要でバイブコーディングできることが分かりました。それが前回の収穫です。それが分かれば、あとは何でも応用がききます。

今回は、ディスプレイSSD1306 OLEDをラズベリーパイPicoに接続して日の出と日の入りを表示させてみることにしました。

配線は人間がやりました(あたりまえ)。SSD1306はよく知られたディスプレイですけれど、グラフを自在に扱うのが難しい。日本語も表示できますが、それはまた今度、いつかの機会に。

エージェントさんは、Claude Codeを使いました。私が投げた最初に投げたのは「ssd1306のディスプレイがつながってると思うんだ」という一言。Claude Codeは「UF2ブートローダーモードで接続しているので、ディスプレイが確認できない」と言ったかと思うと、私にファームのダウンロードリンク(CircuitPythonだった)を示して、本体へのコピーを促しました。このガイダンスができるということは、picoの取扱説明さえ不要かと思わせます。

プロンプトは「きょうの日付、現在地(東京)の日の出、日の入りの計算とグラフ化をお願い」のみ。

できたプログラムが下記の写真です。横軸まるごと1年分です。上のカーブが日の入り。下のカーブが日の出です。2本のカーブの「間隔」が昼の長さになります。8月24日の東京の日の出は5:06、日の入りは18:21と出ています。

この2本のカーブが上下対称でないところが面白いですね。数週間のずれがあるのは、地球の公転軌道が楕円であること、自転軸も傾いているから。カーブをよく見ると、日の出の底と日の入りの頂点が左右にずれているのがわかります。

中核のプログラムを書くのにかかった時間そのものは、約5分でした。これに先立ち、I2Cスキャンなど状況調査に8分かかっています。ファームの入れ替えを行いましたがこれに2分かかっています。 アプリ本体のサイズは約25KBでした。(264KBのうち、CircuitPython本体などが使うものを除いて、CircuitPythonが使える容量は179KBです)

どうやって日の出と日の入りを計算したのでしょうか? Claudeさんの説明は以下のとおりです。

日の出とは「太陽の中心が地平線から -0.833° の位置に来る瞬間」です。これを求めるには、その日の太陽が天球のどこにいるか(赤緯)がわかればよくて、あとは球面三角法で「東京の緯度で、その赤緯の太陽が地平線を横切る時刻」が出ます。

手順

① 太陽の位置を求める

M = 0.9856·t − 3.289 平均近点角
L = M + 1.916·sin M + 0.020·sin 2M + 282.634 黄経(真の位置)
地球の公転は真円ではなく楕円なので、等速で進む M に補正項を足して実際の位置 L を出します(中心差)。

② 黄経 → 赤緯

sin δ = 0.39782 · sin L
地軸が23.44°傾いているぶんを射影する式です。8/23なら δ ≈ +11.7°。

③ 地平線を横切る時角を解く

cos H = (cos 90.833° − sin δ · sin φ) / (cos δ · cos φ) φ = 緯度35.69°
これが核心です。H は南中からのズレ角で、2H がそのまま昼の長さになります。今日は H = 99.6° → 2H/15 = 13時間16分

④ 時角 → 時刻

T = H/15 + RA − 0.06571·t − 6.622     地方平均時
UT = T − 経度/15      → 世界時
JST = UT + 9

私には無理です。ありがとう。

前にも増して言えるのは、天文学に絡む数式の理解、プログラムの知識、ファームウェアのインストール方法、ディスプレイの動かし方といった知識が一切合切不要だということです。配線はしないといけませんが、それだけです。

それが、プロンプト一つでできるようになったというのがすごいと思います。ハードウエアに近い低レベルな作業なので、ウェブアプリを作るのとはまた違う感動がありました。

この記事へのコメント

  1. このチッチャな画面でも、日の出・日の入りのカーブが微妙にズレてるのがチャンと分かかるのがスゴイですね・・・

    Claudeさんの説明は・・・私には一行目から無理でした・・・
    日の出・日の入りって、長い間太陽中心が基準だと思ってましたが、チョッとでも見えてたら「昼」なんですね・・・
    以前、江戸時代の不定時法を調べてた時、明け六ツ・暮れ六ツの定義も不思議な決め方をしてるのを思い出しました・・・

  2. i*matさん、コメントありがとうございます!

    あの小さなOLED画面でも、グラフの曲線が非対称になっているのがちゃんと読み取れて面白いですよね。
    ハードウエァに近いところのコーディングができてしまうっていうのが驚きで、
    しかも、人間が時間について不思議な決め方をしてることを全部お見通しだというところが恐怖です(笑)

タイトルとURLをコピーしました