Skip to content
This repository has been archived by the owner on Aug 20, 2024. It is now read-only.

Section 4 加速度センサーを使おうか

tekimen edited this page Feb 26, 2016 · 13 revisions

その前に前回の復習

加速度センサーを使おう

なんとなく加速度センサーを使いたくなったので、KXSC7-2050を使いましょう。

http://akizukidenshi.com/catalog/g/gK-07243/

KXSC7-2050

加速度センサーです。これを使うと、ものの移動、振動が測れるよ。えっ、それだけじゃわからない…?まあ、まずはやってみましょう。

Arduino側

ハードウェア

回路を組んでみましょう。今回は実写で!

配線図

ソフトウェア

acceleration.inoをスケッチしてください。とはいえ、ただ単純に受け取った値(電圧)をシリアル通信で送るだけですけどね。

Arduinoのシリアルモニタを開いて、以下の画像のようになっていればOKです!おそらく、カンマ区切りで数値が表示されていてそのうち1つの値が100ほど大きい状態になっているのではないでしょうか。

シリアル通信しているスクリーンショット

サーバー側

GUI用のライブラリをインストールするのも大変ですし、今回はWebブラウザを使いましょうか。そのためにHTTPとWebSocketサーバーを作りましょう。

WebSocketとは

WebSocketとは、リアルタイムで通信することのできるプロトコルのことです。HTTPは要求(リクエスト)を送って応答(レスポンス)を返すプロトコルのためにリアルタイムに使用するには向いていなかったのですが、WebSocketの登場のおかげでリアルタイムのWebアプリケーションを作ることが簡単になりました。

サーバーとクライアント(ブラウザ)とは1対多の関係になります。サーバーを持たないリアルタイムなプロトコルもあって、WebRTCと呼びます。

Python

Pythonのプログラムである、accelerator.pyを書いてみましょう。

あっ、シリアル通信してるので、以下の部分をArduino IDEと同じものにそろえてくださいね。

ser = serial.Serial('/dev/cu.usbserial-A90173KX', 9600);

プログラムを読んでみるとわかるかと思いますが、ここでも、シリアル通信で受け取った値をそのままWebSocketに流してます。

ブラウザ側

HTML5でページを作ります。graph_socket.htmlというHTMLのテンプレートをサーバー側で読み込んでいます。JavaScriptを使ってグラフを表示させます。また、ここでこれからお話する各種の計算を行っています。

さて、プログラムを起動してみましょう

起動してウェブブラウザでlocalhost:8080に接続すると、グラフが流れてくると思います。それが加速度です。一つだけ上にあるのがありますが、z軸の加速度です。2g分の重力加速度を受けているためです。

なので、ブレッドボードを持ち上げたり回転させてみたり振動を与えると、グラフの形が変わってしまうわけです。面白いですね。ちょっといじってみましょう〜

これぞデータビジュアライゼーション

昨今、データビジュアライゼーションというのが流行ってます。要するにデータの可視化です。見えるようわかりやすく表現することで、新たな発見があるかもしれません。ビジネスにおいてもなんかチャンスあるかもしれない。だからみんな注目しているらしいです!

しっかし…ぼくはフロントエンドエンジニアではなかったのでこんなしょぼいグラフしか作れませんでした…

d3.jsというライブラリを使っていますが、コレを綺麗に表示させるのもいい仕事だと思います!

この設計には欠点があります!

WebSocketは一対多と話しましたが、シリアル通信は1対1です。実はこのままでは__複数のブラウザに接続することができない__という欠点がこのコードにはあります。複数のブラウザに接続するにはどーしましょ?というのは後回し(やりたかったら宿題ね)。