緊急地震速報を教えてくれるはちゅねミクを作ってみた まとめ その2(PC側)

地震ミクが動作する仕組みです。地震ミクの大きな要素としてPC側とミク本体側がありますが、この記事ではPC側で何をしているかの解説をしてます。

地震時に発生する2つの地震波の速度の差を利用して、地震発生後にどの地点にいつ地震波が到達するかを計算して配信する気象庁の速報の1つ。
全国約1,000箇所に設置されている地震計の情報を元に瞬時に計算される。
テレビやラジオでも流れたりします。


上がThe Last 10-Second、下が緊急地震速報アラーム


これはウェザーニュースが提供するソフトウェアの名前です。パソコンにこのソフトを入れておくと緊急地震速報を画面と音で知らせてくれます。
気象庁が発表する高度利用者向けの情報を利用しているようです。
ちなみに月額315円のウェザーニュース会員になる必要があります。そうしないと訓練の動作しかできません。
自分の住む地域(緯度・経度で細かく指定可)を設定し、自分の地域が震度○以上で通知などと指定できます。

  • 動作の流れ

The Last 10-Secondが動作すると通知画面が出ますが、それと同時に緊急地震速報アラームというソフトも通知動作を始めます。
緊急地震速報アラームはThe Last 10-Secondとの連携を目的としたソフトウェアで、フリーで配布されています。
わかりやすい表示、到達までの時間や地震の詳細などの音声通知、メール送信、The Last 10-Secondの動作状態確認など非常に便利で有用な機能を持ちます。
今回の地震ミクの動作はこのソフトの機能である「任意のコマンド実行」から始まります。

ここで後述の自作ソフトを実行するようにします。
後は全て自作ソフトの方でミクの動作に必要なことをしてくれます。

  • 自作ソフト


これはVisual Studio 2008のVisual C#で作りました。先頭の数字は時刻で時:分:秒です。全部同じ時間なのはプログラムのミスで同じデータを表示しているというわけではなく、この処理全てが1秒以内で終わってるということです。
The Last 10-Secondが地震の情報を受信すると地震の詳細が入ってるxmlファイルができるようです。
緊急地震速報アラームのコマンド実行から呼び出されたら、そのxmlファイルをまず読み取りに行きます。この読み取りに行くのは以前に自分が別目的で作ったプログラムがやっています。前に作ったからこれ使えばいいやーってことでそのまま流用しましたw
ここで震度の読み取り、または残り時間の計算に失敗した場合、ミク本体側にはエラーが伝えられます。
読み込みが終わるとシリアルポートをオープンし、接続されているミクへボーレート9600bpsで震度、時間の順で2byteの情報が送信されます。それぞれ8bit(0〜255)の情報を送れますが、震度は震度1〜7の9種類と読み取りエラーの計10種類、時間の方は0秒〜124秒、エラー2通りの計127種類としました。なんで時間が127で7bitの情報なのかといいますと、byte型を使えばいいことをまだ知らなかった時期だったからです(;´∀`)。それに秒数が多いとPIC側のプログラムも長くなってしまうので・・・w
ちなみにもし到達までの時間が124秒よりも長いと計算された場合、エラーのうちの1つである「時間長いよエラー」が送られます。データの中身で言うと125だったかな?ミクがこれを受け取ると7セグLEDには"Long"を表す"Lo"が表示されます。
もう1つの時間のエラーは到達時間が計算できなかったときのエラーです。こちらは7セグに"--"の表示が出ます。
そして情報の転送が終わるとデータの受信待ちに入ります。ミクはデータを受け取ると、転送が正しく行われたか確認するために震度のデータを送り返してきます。PC側ではこのデータが送ったデータと同じか比較します。
データが一致すればシリアルポートをクローズし、処理は全て完了となります。
データが一致しなかったときはPCの画面に警告ダイアログを出した後にシリアルポートをクローズします。また途中で通信エラーが起きた時もその都度警告ダイアログが出ます。
ちなみにこの確認機能ですが、ブレッドボードで組んだときはちゃんと動いてくれてたのですが動画撮影時はどうもうまくいきませんでした。おそらく接触不良か何か。そのため動画中ではデータの確認はOFFにしてありました。


PC側での動作はこのような感じです。そのうちミク本体側の仕組みについても書こうと思ってます。