【メカ屋のIoTチャレンジ】システム構想編

3eb073671fd7f2d39590934348dd54e9_m

【IoT】って何が嬉しいの?

昨年はメディアなどでも【IoT】というキーワードがたくさん取り上げられていました。

IoTは「Internet of Tings:モノのインターネット」なんて言われ方をしますが、このワードだけでピンと来る人はほとんど居ないんじゃないでしょうか。

というか私が全くピンと来ていません。

さらにメディアでは流行に乗っかってなんでも【IoT】と言ってるんじゃないか?という気がしてしまうくらい、具体例として紹介されるものが多岐に渡っており、全体像がつかめません。

インターネットに接続できるモノなら何でも【IoT】と呼ぶのであれば、その混沌とした状況も分からなくはないですが。

で、モノがインターネットに接続できると何が嬉しいの?という疑問も当然湧いてきます。

巷にある色んな情報を総合した私なりの解釈ですと、

  • IoTデバイスに搭載したセンサから遠隔地の情報を取得できる
  • インターネットを介して、遠隔地からIoTデバイスを操作できる

という点かなと考えています。

前者の「情報を取得できる」というのは主にビジネス観点でメリットがありそうで、IoTデバイスを大量にばらまいて、そこから取得した情報をビッグデータとして活用したり、定期的にチェックしなければいけない情報を確認するのにわざわざ現場に行かなくても出来るようになったり。

後者は一般の人にも役立ちそうで、例えばエアコンを外出先から操作できるようにした製品があったり、あとは【スマートロック】のような遠隔地からも家の鍵を開閉できるような製品も増えてきていますよね。

Qrio Smart Lock (キュリオスマートロック)↓Amazon

と、書いてみたものの、どれも「ふ〜ん」って感じで私自身の生活の範囲内では上に挙げたどれもが特に嬉しくありません。

だからなおさらIoTというものの理解が進まないのだと思います。

だったら自分で「IoTなモノ」を作ってみようと思い立ちました。

自分で作るということは自分で仕様を決めるので、その過程で「こういう使い方をすれば便利なんじゃないか?」という発想が出てくるのではないか?

また、IoTというとどちらかというとエレキハード、ソフト屋さんの領域なイメージがありますが、それに関わる形あるモノを作るならメカ屋もその辺の簡単な知識は無いと、これからの時代マズいんじゃないか?というのもあって【メカ屋のIoTチャレンジ】シリーズを始めてみます。

メカ屋がIoTをやるために超えなきゃいけないハードル

先ほど書いた通り、IoTのコアな部分はやはりエレキハード、ソフト屋さんの領域だと思います。

そしてこの領域は、機械系の人では苦手にしている人が多いんじゃないでしょうか。

だからこそ【チャレンジ】なんて言い方をしてみました。

IoTのデバイス、システムを構築するためにはザッとこれくらいの知識が必要そうです。

  • 電気回路
  • センサ
  • アクチュエータ
  • 電気的な制御理論
  • プログラミング
  • ネットワークシステム
  • サーバシステム
  • アプリ開発(遠隔地からのデータ確認や操作用)

いや〜、めまいがしてきそうですね。

この気が遠くなりそうなことについて私が色々調べて勉強した結果、「つまみ食いレベルならこうやれば最短距離で行けるんじゃないかな?」という道筋が見えてきましたので、そのルートについてこの記事の後半で書いていきます。

そしてそれに沿って実際にやってみたことをシリーズとして記事を随時追加していくつもりです。

ただ、「最短距離」と言いましてもかなりのボリュームです。

私は一応、簡単なプログラミングや電子工作の知識が既にありますが、それに加えて必要なことがたくさんあります。

ですから記事として各部分はあくまで「私が実際にやったこと」と「ここの情報を使って勉強しました」というのをご紹介するくらいしか出来ないと思います。

でも知識ゼロからスタートするには、数ある情報を束ねるだけでも途方に暮れてしまうと思うので、そういう意味ではルートを書いておくだけでもそれなりの意義はあるかなと。

メカ屋がやるIoTシステムの構想

上で「最短距離」と書きましたが、これから紹介する方法よりももっと最短なやり方はあるかもしれません。

しかし、自分がやりたいアイディアを達成できないのでは意味がありませんから、ある程度の自由度を持たせた上で出来るだけ簡単そうな方法としてシステムを選定しました。

また、システムを構築する上で路頭に迷わないようにするためには、ネット上や書籍として情報量が多いということも重要なので、その観点にも重きを置いています。

ということで、話を進めていきます。

まず、IoTを実現するための最小構成は下の図のようになるかなと思います。

直接通信

ただ、この方法だとIoTデバイスとスマホやPCと言った端末が直接通信しなければいけないので、セキュリティ面も含めると、メカ屋がシステム構築するにはハードルがかなり高くなります。

そこで、デバイスと端末の間に1クッション置くことを考えました。

間接通信

インターネット上の既存のサービスを利用することにより、簡単かつ比較的安全にデバイスと端末が通信できそうです。

無料で使えるサービスを探したところ、以下の2点が候補に挙がりました。

  • Milkcocoa:主にデバイスから取得したデータをストックするのに向いています
  • スクリーンショット 2017-01-13 11.39.03

  • IFTTT:デバイスからの情報をトリガーとして何かアクションを起こすのに向いています
  • スクリーンショット 2017-01-13 11.41.40

これらのサービスを使う段取り等についてはまた別の記事で書こうと思いますが、自分で頑張ってシステムを作らなくても、こういったサービスを使うことで比較的簡単にデータのやり取りが出来る、ということをまずは覚えておいて下さい。

(もちろんこれらのサービスとデバイスが通信する方法は勉強しないといけないのですが)

IoTデバイス作るためのツール

IoTデバイスで何をやりたいかによってデバイスの構成は変わりますが、何をやるにしても最低限必要なのは

  • 司令塔となるもの:PCではCPUに相当するもの
  • アクチュエータやセンサを接続するインターフェース
  • 無線LAN通信(WiFi)するためのユニット

インターネットに接続できれば良いので必ずしも無線でなくても良いかもしれませんが、それでは活躍の場が限定されてしまうので、このシリーズでは無線でインターネットに接続することを前提としました。

上の3つが1つにパッケージングされており、かつ扱う上での情報量も比較的多いのが以下の2つだと判断しました。

ESPr DeveloperはArduino IDEを使って、Arduinoと同様にプログラミングやセンサ、アクチュエータとのやり取りが可能になります。

Aruduinoとはワンボードマイコンの一種です。

過去にこんな記事を書いてます↓

Arduino_151108
【Arduino】を使った電子工作で野球日本代表を応援!

【Aruduino】というお手軽に電子工作ができるシステムを使って、電子工作に入門してみました
その練習として、プレミア12に便乗して「野球日本代表応援マシーン」を作りました

https://poli-studio.com/2015/11/08/1823/(脱サラはじめました)

Arduinoには色んなラインナップがあって、「Arduino Yun」というのがWiFi付きではあるんですが、上でご紹介した「ESPr Developer」の方が圧倒的に小さいので、こちらを選びました。

Arduino Yunを使うなら、もうひとつ候補として挙げた「Raspberry Pi 3」の方が良いんじゃないかと思ったので。(Arduinoを十分に使った経験のある人なら別ですが)

Raspberry PiもArduinoと並んで電子工作界では超メジャーな存在です。

ただ、ArduinoとRaspberry Pi似て非なるもので、Arduinoはマイコン、Raspberry Piはパソコンと思っておけば良いと思います。

それぞれを制御するためのプログラミング言語も異なり、ArduinoはC言語に非常によく似た専用言語をArduino IDEという統合開発ソフトを使って行い、Raspberry PiはPython(パイソン)という言語を使います。

Raspberry PiはWiFi機能が付いたのは”3″からです。”2″は有線LANなので購入する際はお間違えなく。

上で挙げた2つの大きさを比較するとこんな感じです。

大きさ比較

もちろんどちらが優れていると言うことではなく

  • 大きさ
  • 入出力ピン数
  • 処理能力
  • 消費電力

等々の違いがあるので、目的にあったものを選定しましょう。

細かいことはまた別の記事で書こうと思いますが、ザックリ分けると

モバイルで使いたいならESPr Developer

据え置きで複雑な制御をやるならRaspberry Pi 3

かなと思っています。(消費電力とサイズの観点)

アプリ開発のためにHTML,CSS,JavaScriptを覚える!

表面的なことしか書いていないのにだいぶ長くなってしまいましたが、最後にもうひとつ。

IoTに使えるサービスとして上で挙げました「Milkcocoa」ですが、基本的にはデータをストックしたり、外部からの命令に従ってトリガー信号を発したりするものです。

ではそのストックしたデータをどうやって取り出すか?

Milkcocoaのページにログインすればデータは見れますが、それではあまり実用的ではありません。

使い勝手を良くするためには、ストックしたデータを色んな形で取り出せるようにしたアプリがあると便利ですよね。

アプリと言うと大げさかもしれませんが、何らかの条件を入力して、その条件に合致するデータを読み込めれば、とりあえず最低限はOKではないでしょうか。

例えばこんな感じのものを作ってみました↓

アプリ

質素なんてもんじゃありませんが、一応目的は果たせています。

表示されたものをメモ帳にコピペすればCSV形式に保存も出来るので、あとでEXCEL等でデータ処理も出来ますしね。

このアプリはブラウザ上で動かします。

アプリと言うよりはWEBページですね。

最近のWEBサイトは色んな装飾がされていて動きもありますが、その動きをつける部分が【JavaScript】というプログラミング言語で書かれています。

HTMLはWEBサイトの骨格を規定するための言語で、CSSはHTMLを装飾するための言語です。(言語という呼び方が正しいかは微妙ですが)

見た目を気にしないのであればCSSは覚える必要はないかもしれません。

HTMLとJavaScriptでアプリを作ると良い点は、動作環境を選ばないところ。

いわゆる「アプリ」だとiPhone,Android,Windows,Macでそれぞれ別物ですよね。

でもHTMLとJavaScriptでプログラムを書けば、ブラウザであればchrome,Safari,InternetExploreどれでもほぼ同じように動作します

ということでこの方法を選びましたが、具体的な使い方についてはまた別の記事で。

ちなみにもうひとつのサービスとして紹介した「IFTTT」はそもそもは様々なネットサービスをつなげるものです。

例えば、「Instagramで写真を投稿」したら「Evernoteへ保存」する、ということが出来るサービスです。

この「○○したら」の○○の部分にIoTデバイスからのトリガー信号を使います。

ですから、IFTTTで使えるサービスの範囲内でやりたいことが達成できるのであれば、Milkcocoaを使うときのように自前のアプリは作成する必要がありません。

非常に大まかな全体像はこんな感じかなと思います。

これらをひとつずつ書いていくだけでも半年〜1年コースになりそうですが、これを今年のテーマとしてやっていきます。

最近ブログの更新頻度が極端に落ちていたのは、本業やクラウドファンディングの準備の合間にこれらのことを勉強していたので、ブログを書く方まで手が回りませんでした。

この先もそんなに余裕があるわけではないのでこのシリーズもなかなか進まないかもしれませんが、気長にお待ち下さい。