GR-ROSEで作るIoT渾天儀

この記事は がじぇるねGR Advent Calendar 2021 の5日目です。
先月開催されたGR-ROSE IoTシステム開発コンテストでのLTをもとに補足情報を加筆したものです。

Introduction

今日は12月5日。暦の上ではまもなく大雪を迎え寒さが日増しに深まるこのごろですが、皆様お変わりなくお過ごしでしょうか?

私も若くて元気なころは季節の移ろいをあまり切実に意識することはありませんでした。基礎代謝が高いと冬の寒さなんてへっちゃらなんですよね。でもだんだん年を取るにつれて、冬の寒さがつらい。季節の変化を意識して体調管理にも気を配らないといけないようになってきました。

f:id:licheng:20211120185758j:plain:w600

IoT渾天儀で太陽の運行を知る

さて、季節の移ろいというのは、つまりは地球から見た太陽の運行のことですよね。
そこで太陽の運行を知るためにこんなメカを作ってみました!名付けてIoT渾天儀です。

f:id:licheng:20211120190508j:plain:w640

メカは100円ショップ(セリア)で売ってるプラダンと木材で作りました。円弧の切り出しには直径30cmまで対応のコンパスカッターを使用しました。手作りのアナログ工作です。CADすら使ってません。紙とペンと定規とコンパスで設計しました。

f:id:licheng:20211121122852j:plain:w640

目盛りはinkscapeで描いてPDF化し、コンビニでA3用紙にプリントアウトしました。分度器のような目盛りはinkscapeのタイルクローン機能を使うと簡単に描けます。コンビニでのプリントアウトでは原寸大で印刷することに注意。ローソンの場合は「用紙に合わせる」を「しない」に設定します。

渾天儀とは?

f:id:licheng:20211121121945p:plain:w250:right

渾天儀とはいったい何かというと、古代のギリシャと中国で発明された天体観測のための機械です。西洋ではArmillary sphere (羅:Sphaera armillaris)、東洋では渾天儀 (こんてんぎ / Hùntiānyí / 혼천의) と呼ばれています。

IoT渾天儀のしくみ

私の作った渾天儀は2個のモータで動き、地球上から見た太陽と星座の動きをシミュレートできます。それと太陽はLEDで光ります。

f:id:licheng:20211121142458j:plain:w640

2個のモータにはステッピングモータを使い、これをGR-ROSEから制御します。24BYJ48はユニポーラ結線のモータなので、バイポーラステッピングモータドライバのDRV8825で駆動するのは不適切な気がするのですが、いちおう回ります。(桃, 橙, 黄, 青をA1, A2, B1, B2に接続、赤は未接続)

連続回転するものに給電するのは意外と難しいことで、スリップリングという部品を利用しています。LEDへの給電のスリップリングは小型化のためにコンタクトプローブ(ポゴピン)を使って自作しました。

f:id:licheng:20211121142651j:plain:w533

天文計算のフローは下図の通り。日時と観測地点の経度・緯度から太陽と星座の位置を計算してモータの回転角に換算します。本当は緯度に応じて天球の傾きもモータ駆動で変化させたかったのですが、機構的に難しいため今回は手動としました。

f:id:licheng:20211121142717j:plain:w533

この天文計算のC++クラス化をGitHubで公開しています。

IoT渾天儀の動作

夏至の日には太陽は双児宮から天蟹宮に入り、もっとも高い軌道を通ります。

f:id:licheng:20211121142745j:plain:w533

冬至の日には太陽は人馬宮から磨羯宮に入り、もっとも低い軌道を通ります。

f:id:licheng:20211121142759j:plain:w533

北緯35度では夏と冬でこれだけ太陽の高さが違うんですね。東京や大阪がだいたいこの北緯35度付近です。

黄道十二宮双児宮、天蟹宮、人馬宮、磨羯宮はそれぞれ、ふたご座、かに座、いて座、やぎ座に相当しますが、実際の星座の位置とは約1月ずれています。これは黄道十二宮が成立した二千数百年前と現代とでは地球の歳差運動によって自転軸の向きが変化しているためです。

IoT対応

肝心のIoTをやる時間があまりありませんでしたが、いちおうAzure IoT Central には対応しました。デバイス定義はコマンド1個だけで、日時と経度・緯度を指定するとそれに従って渾天儀が動き、計算結果の太陽の黄経・赤経赤緯を返します。

f:id:licheng:20211121142917j:plain:w640

それだけではちょっと寂しいので、REST APIを使って自前のWebアプリからもコマンドを呼んでみました。

f:id:licheng:20211121135315p:plain:w324

REST APIの使い方に関しては、公式のドキュメントに解説があります。

しかし、認証処理のところで出てくるトークンていうやつが、何のことやら分からなくて手こずりました。

要するに、IoT CentralのWebページの 管理 → APIトークン → 新規 で生成したトークンなる文字列を、HTTPリクエストヘッダのAuthorizationヘッダで指定しなければならないということらしいです。Web系の人にはこんなの常識なのかもしれませんが、組込み系の自分にはチンプンカンプンでした。

f:id:licheng:20211121160438p:plain

この文字列は秘密の文字列なので、フロントエンドに丸見えでは意味が無いように思われます。なのでAPI中継サーバを作成しました。詳しくは下記の記事に書きました。

今後の展望

というわけで今回はここまでですが、さらにブラッシュアップして、いつの日かリアルイベントが展示できるようにしたいと思ってます。

【課題】

  • モータの初期位置出し、現在は手動 → フォトセンサで自動化
  • メカの強度と精度がプラダンでは足りない → CADで設計してMDF製に
  • IoT対応もうちょっとしっかり → Azureの勉強からします

デモ動画

実際に渾天儀が回転しているデモ動画です。デモ用に4日で1年の動きにしています。
(地球が4回自転する間に1回公転すると仮定した場合の動きです。)

発表資料