スキップしてメイン コンテンツに移動

簡単にできるIoT~振動の計測②


 前回は、何を作るかを考えて、設計メモにまとめました。
まだプログラミング自体には触れていませんでしたし、大まかな設計をしただけですが、ここまで意外と考えることが多かったと思われるかもしれません。ですが、どう作るかよりも、何を実現するかの方が重要です。本来はもっと何を実現するかを模索するのに時間をかけるべきだと思います(そのためにシステムを試作することも含めて)。

さて、今回はさっそくこれを作ってみます。作る方法はネットでいろいろな人が教えてくれるので、それらを参考にすれば、すぐに作れます。

データを受け取って蓄積する側を作る

まずは、Googleスプレッドシートに以下の図のような表を作り、M5StickCから受け取ったデータを書き込めるようにします(図では既にデータが蓄積されています)。

  • A列「gasCodeVer」:一応、動かしているスクリプトのバージョンを記録
  • B列「receiveTime」:データを受け取った時刻(receivedでないのはご愛嬌)
  • C列「dataNum」:いくつデータが取れているかを記録
  • D列「data1」以降:加速度データ

そのために、以下のことをします。

  1. Googleドライブでスプレッドシートを作る
  2. 「ツール」→「スクリプトエディタ」からスクリプトエディタを開く
  3. Apps Scriptでスクリプト(コード)を書く
  4. 「デプロイ」→「新しいデプロイ」→「種類の選択」→「ウェブアプリ」からデプロイ

基本的なやり方は下の参考ページ(前半部分)を見れば、すぐに分かります。実際に手元で出る画面と少し違うところがあるかもしれませんが、だいたい一緒かな、という緩さをもって見ていくと良いと思います。

ちなみに実際に僕が書いたコードは、以下の12行(カッコ含む)だけです。データを受け取ったら、「rawData」シートの新しい行(既に書き込まれている最後の行の次の行)に書き込みます。JSONという形式でデータが送られてくるので、データの扱いが簡単です。

function doPost(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('rawData');
  var dateString = Utilities.formatDate( new Date(), 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss');
  var jsonData = JSON.parse(e.postData.contents);
  var nextRow = sheet.getLastRow() + 1;
  sheet.getRange(nextRow,1).setValue('ver.34');
  sheet.getRange(nextRow,2).setValue(dateString);
  sheet.getRange(nextRow,3).setValue(jsonData.accelData.length);
  for(var i = 0; i < jsonData.accelData.length; i++){
    sheet.getRange(nextRow,i + 4).setValue(jsonData.accelData[i]);
  }
}

センサーでデータを取得して送る側を作る

データを受け取って蓄積する側ができたので、次はデータを取得して送る側です。今度はM5StickCを動かすプログラムを作るので、別のツールを使います。大まかに以下の流れになります。

  1. M5Bunner(※1)を入手する
  2. M5StickCをUSBでPCにつないで基本のファームウェア(※2)を書き込む
  3. UIFlow(※3)でコードを書く
  4. プログラムを実行!

※1 M5Bunner:M5StickCなどにファームウェアを書き込むツール
※2 ファームウェア:電子機器を動かすためのプログラム
※3 UIFlow:M5StickCなどの開発をするためのツールで、プログラミング言語Pythonやビジュアル(ブロック)プログラミング言語Blocklyでコードを書ける

こちらも以下の参考ページを見ればすぐにできます。英語のページですが、ブラウザで日本語に翻訳(ページ上で右クリックして「日本語に翻訳」を選択)すると、英語に自信がなくても問題なく読めます。日本語なので当然ですが。

UIFlowでは、ネットワークプログラミングモードとUSBプログラミングモードいう2つの方法が用意されていて、前者(ネットワーク)がとても便利です。PCにUIFlowをインストールしなくても、ブラウザでコードを書くことができて、実行ボタンを押すと、ネットワーク経由でM5StickCに反映されて動作します。今回、僕もこのモードを使いました。

ビジュアルプログラミング言語Blocklyを使うと、M5StickCにさせたいことを表すブロックを選んで、組み合わせることでプログラムを組むことができます。僕が書いたコードは下の図の右半分に表示されているものです。ボタンを押すことでON/OFFできたり、液晶の色や文字で現在の状態を表したり、といった動きを入れたのでブロックが多くなっていますが、それでもこれだけで実現できるのには驚きます。


設計では10分に1回の計測としていましたが、動作確認をするのに10分ずつ待つのは時間がかかりすぎるので、ここでは1分に1回の計測としました。

実際に動かしてみる

以上で設備の振動を計測する準備ができました。さっそく計測してみましょう。5MStickCを養生テープでサーキュレーターに取り付けて、ボタンを押して計測を開始します。すると、5MStickCの液晶画面に設定した文字が表示されて、その後、Googleスプレッドシートにデータが書き込まれていきます。

うちのサーキュレーターは、スイッチをカチカチと回すことで、風力を強、中、静音、切の4段階に切り替えることができるものです。加速度データを取得しながら数分おいてスイッチを切り替え、それぞれの風力で加速度データを取得して、それぞれグラフにしてみました。
すると、加速度に周期的な変化が見られて、サーキュレーターの振動がデータとして取れていること、そして風力の設定によって振幅の大きさが異なることが分かりました。周波数の違いを自動的に判別しようと思うと数学的に難しい処理が必要ですが、振幅の大きさであれば判別が簡単そうです。例えば、スプレッドシートには標準偏差を求める機能があるので、データの散らばり具合を数値化することができます。サーキュレーターの風力が強いほど、標準偏差が大きくなるので、どこかでしきい値を設定すれば、動作状況を自動判断することができるでしょう。

このように、M5StickCを使えば、IoT的なことが簡単にできます。もちろんM5Stackシリーズだけでなく、さまざまな同様のデバイスが世の中に数多く供給されるようになっています。身の回りに変化を起こすのに使える、ひとつの要素として頭の片隅に置いておくと、何かの機会にいいアイデアにつながるかもしれません。

このブログの人気の投稿

システム内製化のトレンド

  これまで多くの企業にとって、ICTと言えば外から買ってくるものでした。もしくは、業者に発注して作ってもらうものでした。それがクラウドサービスになって、借りてくるもの、みんなでシェアしながら使うもの、になりましたが、今は社内で作るものになり始めています。いわゆる「内製化」です。 かつてソフトウェアを開発する企業に所属していた身としては、市場の大きな変化につながる話なので、とても気になっているのですが、多くの企業の方にとっては、まだまだ関心の薄い話題かもしれません。なので、なぜシステム内製化というトレンドが起こりつつあるかについて、僕の認識していることを少し書いておこうと思います。 とはいえ「なぜ」というのは非常に簡単な話です。経営、ビジネスモデル、事業の強み、といったものがICTと密接に関係するようになったからです。 アウトソーシングしていい業務と、してはいけない業務は何か、という議論をするとき、ひとつ大きな論点として、強みに直結するものかどうか、ということが挙げられます。その企業独自の強みを他社に依存すると、強みを持続させることも発展させることも危うくなるというのは分かりやすいと思います。システム内製化も同じ論点から出てくる話です。自社の強みの源泉となっている業務フローを支えるシステムだったら、自分たちの手の内に入れておくべきです。 また、今の時代が、不確実性が高く、かつ、変化の激しい時代である(と言われている)ことも、内製化の追い風になっています。不確実で変化の激しい市場に対応するビジネスは、その運用を柔軟に変化させ続けなければいけません。それも高速に。そのためには、システムもビジネスに追従して高速に変化させ続ける必要があります。システム開発を外注していたら、事業変化のスピードにはどうしたって追いつけません。システムが足を引っ張るようになります。必要なスピードを出すためには、社内で、ビジネスを回している従業員のすぐそばで、一体となって、開発をしていかなければならないのです。 そんなわけで、これまで「IT企業」とは言われていなかった企業が、続々とエンジニアの中途採用を始めて、自分たちでシステム開発をやれるようになってきています。そしてすべての企業が「IT企業」になる(逆に言えば「IT企業」という枠組みが消える)時代が来ようとしています。 もちろん、全てのシステム

無料でHPを作る

HP(ホームページ)というのは、多くの中小企業にとって最初に検討されるITツールのひとつだと思います。昔からHPを作成するための様々なサービスが提供されてきましたが、今も便利なサービスが多くあります。そして、無料で簡単にHPを作ることのできるサービスもあります。 有名なところで以下3つのサービス。 ・ WiX ・ ジンドゥー(Jimdo) ・ Googleサイト どれも(2020年夏現在)流行りの「ノーコード」でHPが作れるサービスになっています。他にも STUDIO や Webflow 、 ペライチ といったサービスもあり、選び放題です。 ここでは当事務所のHPを最初に挙げた3つの無料サービスでそれぞれ作ってみて、感じたことなどを、少し紹介しようと思います。 まずジンドゥーで作ったHPが こちら 。 URLは xxx.jimdofree.com(xxxはユーザー登録時に任意に決められる)になります。そして、一番下(フッター)にジンドゥーの広告が入ります。これは無料プランでは変更・削除ができません。 どのサービスでもそうですが、最初から用意されているテンプレートを選んで、必要な部品を残しつつ改変していくとすぐに作れます。もっと写真を強調したオシャレ雑誌みたいなテンプレートもありましたが、ここでは名刺の裏に合わせて、単色の背景にしてみました。 テンプレートの部品ごとに背景色を設定する必要があり、ページ全体を同じ色に変えるのは、少し手間がかかります。何がどこで定義されているか探すパズルみたいです。ブラウザのタブのところにも表示される、ページタイトルをどこで設定できるかも、直感的には見つけられず、いろいろ探しました(管理メニュー→パフォーマンス→SEO)。 一方で、お問合せページを作るのはとても簡単で、プライバシーポリシーを記載するページも、既にあるもの(ただしほぼ空白)を編集するだけでした。 次にWiXで作ったページが こちら 。 URLは xxx.wixsite.com/yyy(xxxはアカウント名、yyyは任意のサイト名)となります。そして、無料プランは最上部に広告が出て、スクロールしても消えません。ファビコン(ブラウザのタブのところに表示されるアイコン)も有料プランでないと独自のものを設定できません。今回の3つのサービスの中では一番広告が目立ち