プレイ日記
おちゃめ ochame_nako
新作プログラム「簡易GPS QSP」です。QSPでGPSもどきを作ってみました。あなたが世界のどこにいるのかを地図上で知ることができます。(コメントには公開キーやプログラムの詳しい使用方法、プログラムの仕組みの解説なども記述しています)
21そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
これがプログラムリストです。(ファイル名:1GQ_GPS) 公開キーは【 2RD4VWQV 】です。 フォルダ名:OCHAME_GPSには4つのPRGと1つのGRPが入っています。 世界地図のグラフィック「GRP:WORLD_MAP」は以前作った簡易地球儀QSPに同梱のGRPと同一のものです。
1そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
このプログラムを使用するためにはまずは内蔵時計をある程度正確に合わせておく必要があります(1分程度のずれなら特に問題はないけど10分とか20分ずれていたら場所がかなりずれてしまう)。 その際に世界標準時との時差をプログラム最初の変数Uに入れておいてください。 日本時間で設定している場合には時差は9時間なので初期値であるU=9から変える必要はありません。
0そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
あとこのプログラムでは現在位置を知りたい場所での太陽の南中高度(太陽が一番高く上がった時の角度)を別途計測する必要があります。 これには先日公開した簡易水準器QSPを用いると良いと思います。 簡易水準器QSP https://miiverse.nintendo.net/posts/AYMHAAADAAADV44ndYCEZw なお、フォルダOCHAME_GPSには簡易水準器QSP ver.1.0.1(1GQ_LV)を同梱しています。
0そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
この簡易水準器はACCELの仕様で戻り値にバラツキがあり表示が素早く変化して値を読み取りにくいのがネックでそれを改善するため一時停止機能を採り入れているのですが、下記の反転している部分のように改善すると表示がなめらかに変化して非常に使い勝手が良くなるのでぜひ試してみてください。(こうすれば良くなるのは分かっていたけどQSPに収めるため唯一妥協してしまった部分) ちなみにKの値(0~1)でなめらかさが変わります。 なお、フォルダOCHAME_GPSにはこの改造を施した「簡易水準器(改)」(LV_KAI)も同梱しています。
0そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
簡易水準器QSPで太陽の高度を計測する際に注意するのは太陽を直接見て角度を測るのは非常に危険ということです。 本体を手に持った状態で本体の側面を太陽の方に向ける(本体上面がギリギリ影になるくらい位置にする)ことで角度を測れば安全に行えます。 南中高度が90度近くになると標準の水平モードだと誤差が大きくなるためBボタンを押して垂直モードに切り替えて「90度-表示高度」の値を入力した方が正確に行えます。
0そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
南中高度が分かったらこの簡易GPS QSPを起動してその値を入力するだけです。すると現在の日時から太陽のあるべき位置を計算してそれを元に現在位置を推測します。(人型のカーソルがある場所が現在位置) 正常に動作をしているかのテストをしたい場合は国立天文台のホームページに日本各所の南中時刻と南中高度が記載されているのでその値を入力してみてください。 http://eco.mtk.nao.ac.jp/koyomi/dni/
0そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
時刻は角度を入力した時刻が自動的に指定されるため記載のデータを入力してテストプレイする際には時刻計算のT=M+H*60-1の部分をT=720(午前12時ちょうどの場合)のように書き換えてください。なお11時30分ならばT=690、12時30分ならばT=750のように1分ごとに値を1変えてください。(ちなみに元の時刻計算で「-1」をしている理由は簡易水準器QSPから簡易GPS QSPを起動するのにかかる時間を想定しているため) 2017年10月28日の東京における南中時刻は11時25分、南中高度は41.2度なのでT=685にプログラムを書き直して南中高度は40.9を入力してみてください。 冒頭にも貼っているように人型のカーソルが東京付近に表示されていれば正常動作をしています。
0そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
南中時刻は日本国内だと11時~13時の間ですが、日付や場所によってその時刻は変わります。(東経135度だからといって常に12時に南中するわけではない) いつ南中するか分からない太陽を12時のずっと前から待ちかまえていて太陽の位置が頂点に達する(南中する)までひたすら角度計測を続けるというのは大変と思うので大体の南中時刻を知りたい場合は現在地を知りたい場所での前日の日の出、日の入り時刻を足して2で割ると良いです。これで誤差1分以内の南中時刻が分かります。 例:日出6時0分、日入16時50分ならばその中間の11時25分頃が南中時刻 この簡易GPS QSPは日本国内でならばそれなりの精度で計測が可能というのを上記の国立天文台のデータを元にテストプレイしてみて分かっていますが、海外では試していません。 海外に在住の方はぜひ試してみてください。(基本的に北半球でないと正常動作はできません)
0そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
簡易GPS QSPを使ってみたいけど2つのQSPを併用するのが面倒とか南中時刻なんてよく分からないという人がもっとお手軽に使えるようにした「簡易GPS QSP type B」も作ってみました。(1GQ_GPSB) こちらは1つのQSPで太陽高度計測機能も内蔵しているためお昼頃(南中時刻で無くてもいい)の太陽に本体左側面を向けてBボタンを押すだけで大体の現在位置を表示しています。 お手軽になったのはいいですが、QSPで太陽高度計測機能を追加するため計算式をさらに簡略化しているため誤差が大きくなっているのと計測機能も簡易水準器QSPより簡略化しているため計測誤差が出やすいという問題もあります。 ネタプログラムとして考えるならばこのくらいのお手軽さの方が良いような気もしますが、QSPでどこまで精度を高められるかというのも知りたいので2バージョンの公開へと至りました。
0そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
このプログラムはQSPに収めるために計算式は私がアレンジしたオリジナルの計算式が使用されています。そのため海外では誤差が大きくなっているかもしれません。(そもそもQSPに収めるため日数計算自体が簡易的なものだし) この簡易GPS QSPは経度はそこそこ正確ですが、南中高度の計測自体に誤差が発生するため緯度は結構誤差が大きいです。 標準タイプの方はそれほど誤差が気になるレベルではないですが、type Bの方は目立った誤差が発生する場合があります。 天文シミュレータではなくGPSもどきなのでこれで十分だと思いますが誤差が気になる人はこのプログラムのような簡易的な計算式ではなく正確な計算式を使用するだけではなく簡易水準器QSP以上に正確に計測できるプログラムを作ってみてください。
0そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
というわけで、このプログラムの動作原理の解説をしておきます。 このプログラムでは標準時との差を示す経度(U=9ならば東経135度)の指定した日付における南中時刻と南中高度を求め実際の計測値との差分によって現在地を求めています。 南中高度=90度-観測場所の緯度+太陽の視赤緯 太陽の視赤緯は下記の式で求めることができます。 0.006918-0.399912*cos(khi)+0.070257*sin(khi)-0.006758*cos(2*khi)+0.000907*sin(2*khi)-0.002697*cos(3*khi)+0.001480*sin(3*khi)  ※khi=元旦からの経過日数*2π/365
0そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
しかし、南中高度の計算だけでこの長さになるとQSPで作るのは不可能です。したがって、ある程度簡略化する必要があります。 太陽の視赤緯の計算をCOS((D-170)/57.3)*23.4と簡略化しました。(Dが元旦からの経過日数) この式だと最大時で1度くらいの誤差が発生しますが、いくら完璧な計算をしても南中高度の計測時に誤差が1度くらい含まれるということを考えるとこの計算式の簡略化は問題ないレベルだと思います。 南中時刻の方も誤差がそれほど気にならないレベルの近似式でアレンジしてあります。ただし、type Bの方は南中時刻はお昼(設定された時差の地域で12時)になるような超簡略化されたものなので誤差が少し目立つかもしれません。 このアレンジされた近似式によってQSPで作ることを可能にしています。
0そうだね
プレイ済み
返信[13]
親投稿
おちゃめ ochame_nako
この「簡易GPS QSP」は南中時のみ使用可能という限定的なものであり、あくまでネタレベルのものですが、「工夫次第ではプチコン3号のみでGPSみたいなものを作ることは可能」というのは分かってもらえたと思います。 GPSに限らずどんなものを作る場合でも「プチコン3号は(機能面で)あれがないからできない」と簡単に諦めるのではなくそれが無くてもできる方法を模索して考え出すというのは非常に楽しいのでぜひやってみてください。 それが(速度面や精度面等で)実用レベルに達するかというのはまた別問題の話なのです。
3そうだね
プレイ済み
返信[14]
親投稿
おちゃめ ochame_nako
一部訂正です。 2017年10月28日の東京における南中時刻は11時25分、南中高度は41.2度なのでT=685にプログラムを書き直して (誤)南中高度は40.9を入力してみてください。    ↓ (正)南中高度は41.2を入力してみてください。
1そうだね
プレイ済み
返信[15]
親投稿
しんいち stgf1080
もしかしたら日時、太陽の方向以外の足りない情報を入力させるとかすれば作れるのかもなぁとか思ってましたが、QSPで出来るとは思ってもいませんでした(@_@) 後でじっくり参考にさせて頂こうと思います。 しかしプチコンの可能性はすごいですね。探検のお供に3DS、なんてことを考えてしまうくらい(^o^)
0そうだね
プレイ済み
返信[16]
親投稿
おちゃめ ochame_nako
しんいちさんへ 別のトピックスで書きましたが、太陽を使って緯度、経度を求める場合には日時の他に太陽の方位角(向き)と高度(角度)は必須条件です。 「南中」という条件を使えば方位が南で確定するため高度さえ分かれば求めることが可能になるわけです。 ただし、そのためには上記の動作原理の解説部分でも書いているように南中時間と南中高度を計算して差分を求めるというのが必要不可欠になります。 それをまともに計算する(有効数字6桁で計算する)ならば計算式だけでQSPには収めることができず、いかに誤差が少なくて簡略化した式を作り出せるかが重要になってきます。 南中以外の条件では、他の道具を使わずプチコン3号でここまでの精度のものを作るのはQSPという縛りが無くても無理だと思います。
0そうだね
プレイ済み
返信[17]
親投稿
おちゃめ ochame_nako
しんいちさんから簡易GPSの提案があった際には簡易分度器QSPではどれだけ正確に測っても1~2度の誤差が出てしまうし、下手をすると5度以上の誤差が出てしまうということでGPSを作れたとしても精度は話にならないレベルになりそう(東京で計測しても日本のどこかを示すレベル)になりそうな感じだったのですが、簡易水準器QSPを作ることで一転しました。 簡易水準器QSPはジャイロの蓄積誤差から逃れられない簡易分度器QSPと比べて誤差が出にくいのに加えて水平基準での計測がデフォなので誤差そのものが小さい(きちんと測れば誤差を1度未満にできる)というメリットがあります。 したがって、簡易水準器QSPが簡易GPS QSP制作の足がかりになったと言っても過言ではありません。 これによって南中高度をきちんと測れば東京であれば東京近郊を示すレベルになりました。(地図上で言えば1ピクセル以内の誤差)
0そうだね
プレイ済み
返信[18]
親投稿
おちゃめ ochame_nako
「プチコン3号に不可能はない」と私は思います。 QSPという極小規模なプログラムであっても無限の可能性があります。
1そうだね
プレイ済み
返信[19]
親投稿
新作QSPを作ってみました。 nobuさんがプレイ日記で投稿された簡易BGMプレイヤーをQSPで再現したものです。 隠れている文字は4Sです。
0そうだね
プレイ済み