準天頂衛星「みちびき」の信号をobnizで受信する

このエントリーをはてなブックマークに追加

準天頂衛星「みちびき」とは

日本の上空には日本のオリジナルGPS衛星の「みちびき」があります。
将来的には10m程度の誤差があるGPSを2-3mにすることが可能だそうです。
市販のGPSモジュールで信号が受信可能なので、obnizにつないで受信してみましょう。

秋月にも売ってるGPS受信キットを使用します。みちびきに対応済みです。
http://akizukidenshi.com/catalog/g/gK-09991/
そのピンヘッダをそのままobnizに接続し、受信しやすいようにベランダなど空が見える場所に置いておきます。

これで準備完了です。
あとはプログラム画面で受信します。

プログラム

このGPSモジュールとはUARTを使ったテキストベースでのやりとりになります。
obnizから電源を供給し、3.3vのUARTを有効にします。(電源は5vですが、uartは3.3vです)
そして、受信した信号の中からみちびきを探します。
みちびきの衛星番号は193ですので、受信した衛星の情報を表すGPGSVに193が含まれるかを調べてみましょう。
これを実行すると、、、無事に人工衛星193を受信しました。

ちなみに屋内ですとうまく受信できなかったので、他の衛生に比べて少し弱いのかもしれないですね。

Program

<!-- HTML Example -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>

  <script src="https://unpkg.com/obniz@1.9.1/obniz.js"></script>
</head>

<body>
<div id="obniz-debug"></div>
<br>

<textarea id="text" style="width:100%;height:300px;font-size:13px;"></textarea>
<button id="clear">Clear</button>

<h2 id="founds"></h2>

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async () => {
  obniz.io0.output(true);
  obniz.io1.output(false);
  const uart = obniz.getFreeUart();
  uart.start({tx: 2, rx: 3, baud:9600, drive:"3v"});
  
  var satellites = {};
  
  uart.onreceive = function(data, text) {
    $("#text").text($("#text").text() + text)
    //console.log(text);
    
    if (typeof text === "string") {
      var lines = text.split('\n');
      for(var i = 0;i < lines.length;i++){
        if (lines[i].indexOf("GPGSV") >= 0 && lines[i].split(',').length > 5) {
          const satellite = lines[i].split(',');
          satellites[satellite[2]] = satellite[4]
        }
      }
      $("#founds").text("Index, Satellite Id")
      for (key in satellites) {
        $("#founds").html($("#founds").html() + "" + key + " " + satellites[key])
        if (satellites[key] == 193) {
          $("#founds").html($("#founds").html() + " <=みちびき")
          uart.end();
        }
      }
    }
  }
  
  $("#clear").click(function(){
     $("#text").text("")
  })
}
</script>
</body>
</html>

今すぐ実行

HTMLがブラウザで開かれて実行されます。