#cmdevio2016 (レポート: La-5) IoT WARS – Force Awskens –

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。

昨日はお足元の悪い中、弊社イベント「Devlopers.IO 2016」に沢山のご来場誠にありがとうございました。
ディープでテックなセッションがずらっと並ぶ中、私は懇親会のクロージングセッションを担当いたしました。今回は当日のデモを中心に補足解説を書いていきたいと思います。

スライド

まずは当日のスライドです。

。。。我ながら、とても技術セッションのスライドとは思えない。。

テーマ

今回のテーマは「IoT」ということで、IoTでどんな事をお伝えするべきかを考えた結果「IoTはクラウドの構築と同じく"既存の技術を組み合わせることで可能になる"」ということをテーマに掲げました。各デモも全てIoTというワードが登場する前から当たり前にWebやクラウドで使われる技術を組み合わせたもので構成し、このために新しく勉強した技術や言語はありません。

IoTにも色々なカテゴリや分野があるのですが、所謂ロボット操作やモーター制御のようなハードウェアにかなり手を入れて作られるソリューションには電子工作の知識が必要になりますが、気候などのセンサーデータやカメラデータで得られる情報を収拾、可視化して分析する用途でIoTやM2M、M2Hを使う場合はNode.jsやPythonなど元々ある技術と通信技術を抑えておけば構築、開発は可能です。実際にセッションをご覧になった方に「あれなら俺でもできる」と思って頂けるようなデモを心がけました。

では各デモの解説です。本番をあれだけくだらない感じでやったので、解説は超ド真面目にやってみたいと思います。

デモ解説

顔認識ソリューション

こちらのデモはOMRONの「HVC-C2W」を使用したクラウドIoTの例になります。 センサー部自体は既存の製品を使いましたので実装としてはデータ収拾、クラウド送信としてのiOS部とAWS IoTに届いた後のLambda Functionの2つとなります。

iot_wars1

本来このソリューションは顔認識されたデータをRDSやRedshiftに格納して客層分析等に使う目的で開発したのですが、今回はクロージングセッションということでLambda Functionを改修し、Twilio APIと分析させて「女性が通りかかったら電話がなる」というエンタメ路線に変更しました。

LEDテープライト

MOS FETの実践例です。Raspberry Piは5V/1.4Aくらいまでしか出せませんので(B+モデルの場合)、それ以上の電圧、電流を扱いたい場合は外部から電源を取り込み、そのスイッチのON/OFF、電圧量をリレーで制御する、という形を取ります。

rpi-bplus-cutdown

※Raspberry Pi Model B+の回路図(電源部)。F1部に2Aのヒューズがあり、これ以上の電流が流れないようになっている。

「誰でも出来る」という裏テーマに基づき、回路としてハンダ付け等をするのではなく、ブレッドボード上で回路を組み上げていきます。 今回は12VのLEDテープライトを用いましたので、外部から12Vの電源を引っ張ってきました。

リレー部分にはMOS FETを使用しました。リレーは大きく分けて「メカニカルリレー」と「FETリレー」の2つにわけられます。メカニカルリレーは電圧をかけると磁力により物理的に接点が繋がり電流が流れるのに比べ、FETリレーは半導体素子を使用することにより無接点で電流を流します。具体的に言うとFETリレーのゲート側に電圧をかけると内部でLEDが発光、それをフォトダイオードアレイというチップが受光してさらに電圧に変えて起電することによってドレイン-ソース間に電流が流れる、という仕組みです。特徴としては静音、低レイテンシがあげられます。昔はそんなに高い電圧を扱うことは出来ませんでしたが最近はパワーMOS FETというもので200V以下まではあつかえるようになりました。

GPIO

GPIOはR,G,Bそれぞれにデジタル入出力端子(本番ではGPIO17, GPIO27, GPIO24)に結線し、電源部はアースとして6番に逃しました。拡張部は使わずにModelB以下やEdison等他のボードでもいけるはずです。

制御はテストとしてPythonのPIGPIO、本番はNode.jsのpi-gpioを使用しました。
どちらも単純にGPIOのPIN番号を指定しvalueをセットすれば電圧が流れるライブラリです。

BB-8

このデモは当初の予定には入ってなく完全に思いつきです。
東京に出張してきてたまたま秋葉原オフィスの休憩室に行ったらBB-8が所在なさげに佇んでいました。せっかくだから使おうと思いデスクで調べてみたところ、元はSpheroという製品とのこと。Spheroは一時期結構有名になったので知っていました。そしてSpheroはあるNode.jsのOSSで制御できる、ということも。

Cylon_js_-_JavaScript_framework_for_robotics__physical_computing__and_the_Internet_of_Things_using_Node_js

改めて見てみると若干ストームトルーパーをパクったに影響を受けたようなロゴも偶然ですが今回のテーマにあっているようなのでこのフレームワークを使用しました。入力デバイスとしてLeap Motionを使おうと思っていたのですが、その制御ライブラリも入っている親切設計なので、この2つのライブラリを使って実装したところ、わずか10分で出来上がりました。

BEBOP DRONE

こちらも最初は別のライブラリを使って開発しようとしていたのですが、Leap Motion制御のノウハウをそのまま引用すべくCylon.jsで実装することにしました。
Leap MotionでBEBOP DRONEを動かすにあたって、安定稼働に導くコツは

  • Leap Motionは秒間数十リクエストが飛ばせます。一方DRONEはシンプルなAPIで動作します。特にCylon.jsからの操作は「Land」「TakeOff」「Left」「Right」と必要最低限の動作にとどまり、体勢安定などは全てDRONE側で制御してくれます。このリクエスト差を埋めるような仕様を組んであげる必要があります。
  • とはいえ通常のコントローラー同様、一旦キャリブレーションをしてあげることが安定稼働には重要です。FlatTrim等Cylon.jsで補えない部分は自作してあげるとより安定するでしょう。

まとめ

クロージングセッションということで盛り上がり第一、面白さ第一でデモを組み込んでみました。見た方がIoTという存在をより身近に感じて頂ければ幸いです。

「あと2週間あればもっといいものが見せられた」と思うのは世の常で、次回またこのような機会を頂けましたら、もっとブラッシュアップしたものをお届けできればと思います。