Cactify ~ 植物と話して笑顔になろう~

  • Medium      2018 10 17 23 22 24
Owner & Collaborators
License
By
Summary
植物としゃべってみたい... 植物が元気か知りたい... そんなことを思ったことはありませんか?
"Cactify"はこれをIoTで実現!

LINEのボットと話しかけることで、植物とおしゃべりを楽しんだり、植物が元気かどうかを確認することができます。

Materials

    Tools

      Blueprints

        Making

        • 構想を練る

          0
          Thumb img 2188
          このカテゴリのポイントは、
          身近でIoTとファブを絡めながら、利用者の笑顔を誘うというものである。
          • IoTとファブを組み合わせる

            0
            Thumb img 2188
            IoTの使い方
            • デバイスやセンサーの情報をインターネット経由で活用
            • インターフェースからインターネット経由でデバイスを操作

            ファブ(Fabrication: 製造、組み立てという意味)の使い方
            • センサーや操作できるインターフェースを搭載し、その情報を送る
            • デバイス自体に稼働部などを搭載し、それをIoTで動かす

            センサー ➡︎ 温度センサー、人感センサーなど
          • 笑いを誘うものってなんだろう?

            0
            Thumb img 2188
            このカテゴリーのテーマは「笑顔を誘う
            笑顔にはどういうものがあるのか?
            • 滑稽で笑う。ウケる。
            • かわいらしい様子でほっこりする。癒される。

            FABで笑顔を誘うとなると高度なモデリングや笑いのセンスがないといけない...
            →IoTで笑顔を誘う!!

            例えばユーザにメッセージを送って喜ばせる的な...
          • 結論

            0
            Thumb img 2188
            そこで私が目をつけたのが観葉植物だ。

            • 普段は話しかけてきたりしない観葉植物が話しかけてきたら面白い!
            →観葉植物に直で話しかける人がいると聞いたこともある...
               その夢を叶えたい!

            • 利便性も重視
            →空気の温度や土壌の湿り気がわかると便利


            結論として、利便性と面白さを兼ね備えた観葉植物のLINE BOTを作ることに決めた。


        • 使うモノ

          0
          Thumb img 2188

          • センサーの選定

            0
            Thumb img 2188
            今回のプロジェクトで使うセンサーは、空気中の温湿度を測るセンサーと、土壌中の水分を測るセンサーだ。

            今回私が選定したセンサーは


            DHT11は空気中の温度と湿度を同時に計測できるセンサーモジュールであり、専用のドライバーをインストールすることでA/Dコンバータや校正が不要であるため、採用した。

            また、SKU:SEN0193は土壌湿度センサーであり、静電容量方式を採用しているために長時間稼働していてもセンサーが劣化しにくいため、採用した。

            • Small 300px sen0193
            • Small m 07003
          • デバイスの選定

            0
            Thumb img 2188
            センサーと接続するデバイスは

            Raspberry Pi 3 Model B であれば容易にWi-Fiからインターネットに繋げられるほか、
            Node-RED というフローエディタがデフォルトで使えるためだ。

            Small raspberry pi 3 462x322
          • 開発プラットフォームの選定

            0
            Thumb img 2188
            前の項にあるように、開発プラットフォームは、
            デバイス側とクラウド側の両方でNode-REDを使用する。
            Node-RED とは、フローベースの開発ツールだ。2014年にIBMがクラウドの「Bluemix(現IBM Cloud)」をリリースする際に、標準搭載のOSS(オープンソースソフトウェア)として提供されるようになった。

            Node-REDではノードと呼ばれるプログラムモジュールのようなものを線でつなぎ、msgオブジェクトというノードからノードへと伝わる変数でプログラムを組む。
            また、ノードに直接JavaScriptでプログラムを書くこともできるので、汎用性に優れる
          • クラウドの選定

            0
            Thumb img 2188
            クラウドはIBM Cloudを使った。
            これは前述のNode-RED を使うためだ。
          • 言語処理API

            0
            Thumb img 2188
            LINEで送られてきた内容の意味を判別するためには高度な言語処理が必要だ。
            そのため、言語処理APIとしてDialogflow を使用する。
            Dialogflow は自然言語対話プラットフォームであり、比較的容易にチャットボットを作成できる。
          • LINE Developers

            0
            Thumb img 2188
            利用者にLINEを送るために、必ず必要になるのがAPIであるLine Developers
            LINEのボットチャンネルの作成や、APIに対してPOSTすることで指定のユーザーにメッセージを送るのに使う。
          • 3D CADソフトの選定

            0
            Thumb img 2188
            今回、3Dモデル作成のための3D CADソフトとして、Blenderを使用した。
            Blenderとはとはオープンソースの3D CGソフトウェアの一つで3Dモデルの作成からリグアニメーションまで汎用的にできるものだ。
            元々3Dプリント出力に特化しているわけではないため、STLオブジェクトの3Dプリントのための最適化はアドオンの3D Print Toolboxを使った。
          • 3Dプリンターの選定

            0
            Thumb img 2188
            今回初めて3Dプリンターを購入することになったため、Wi-Fi使用可能で、インターフェースがわかりやすく、組み立てもいらないXYZプリンティングのダヴィンチ mini w+を使った。
            XZ方向の精度とY軸ピッチの解像度共に十分だと考えた。
        • センサーとRaspberry Piをつなげる

          0
          Thumb img 2188
          まず、Raspberry Pi にセンサーをつなぎ、センサーから値をとれるかを検証した。検証には各センサーとA/Dコンバータのmcp3002をブレッドボード上において行った。
          また、DHT11から値を取得するために、Raspberry Pi にbcm2835 ライブラリNode-RED node-red-contrib-dht-sensorノードをインストールし、mcp3002 から値を取得するためにNode-RED node-red-node-pi-mcp3008ノード(mcp3002使用可能)をインストールした。




          • Small      2018 10 14 19 16 58
          • Small solid
          • Raspberry Pi と IBM Cloudをつなげる

            0
            Thumb img 2188
            さて、センサーから値を取得したはいいものの、それをクラウドに上げなければ意味がない。そもそも、なぜクラウドにあげる必要があるかというと、各種APIに接続するときにWebhookやHTTPリクエスト(POST)を使える環境が必要なためだ。
            • Raspberry Piをデバイス登録する

              0
              Thumb img 2188
              Raspberry PiをIBMのサービスからアクセスできるように、Raspberry PiをIBM Cloudでデバイスとして登録する必要がある。スターターキットのInternet of Things Platform Starterでこのドキュメント1をもとに、デバイスタイプ、ID、トークンなどを設定した。
              Small            90
            • IBM Cloud で Node-REDを使う

              0
              Thumb img 2188
              IBM CloudでもNode-REDを使うため、IBM CloudでスターターキットのNode-RED Starterのアプリを作成した。アプリ起動後、https://[設定したアプリ名].mybluemix.net/red/で初期設定を済ませたのち自分のフローにアクセスできるようになる。
            • 二つのNode-REDを接続

              0
              Thumb img 2188
              デバイス側とクラウド側のNode-REDが互いに送受信可能にする最後のステップだ。
              Node-RED Starter をダッシュボードから開き、「接続を作成」とかかれたボタンから前の項で作成したInternet of Things Starter を選択した。
              選択をすると、「接続」の欄に追加したアプリが表示される。

              Small            92  li
            • Node-RED間でデータの送受信

              0
              Thumb img 2188
              Node-RED間でのデータの送受信はNode-REDにデフォルトであるnode-red-contrib-scx-ibmiotappノードで行える。
              送信はInternet of Things Starterで設定したクレデンシャルをノードに設定し、ノード内に設定したデータを何かのmsgオブジェクトをトリガーとして送信するか、データを内蔵したmsgオブジェクトをノードに送ることで送信できる。
              また、受信はInternet of Things Starterのクレデンシャルを設定しておくだけで自動的に行われる。
              Small            89
            • 送受信してみる。

              0
              Thumb img 2188
              Functionノードに、トピックが"test"で内容が"event"のmsgオブジェクトを作り、IBM Outノードに送信、その内容がRaspberry Pi側に送ることに成功した。
          • LINE チャンネルの作成

            0
            Thumb img 2188
            LINEを送るにはもちろんそれを送るチャンネル(アカウント)がなければいけない。このStateでは、行った設定などを中心に説明する。
            • チャンネル作成

              0
              Thumb img 2188
              今回はLINE DevelopersのMessaging APIのチャンネルを作成した。
              この時に重要なのが、LINEをユーザーに送信する PUSH_MESSAGE の機能が使えるプランを選択すること。送られてきたメッセージに返信をするだけじゃあ意味がない。
            • API利用の下準備

              0
              Thumb img 2188
              API利用に必要なアクセストークンLINEからのリクエスト(ユーザーが送ったメッセージ)を取得するためのWebhookの設定をした。

              Webhook URLは https://[アプリ名].mybluemix.net/webhook で設定できる。
              • Small            95
              • Small            96
          • プログラムを組む

            0
            Thumb img 2188
            実際にプログラムを組み、Cactify のシステムを作る。
            • Raspberry Pi の Node-RED の流れ

              0
              Thumb img 2188
              1.  "all commands"とあるIBM IoTノードでクラウドからリクエストを受け取る。
              2. Javaなどのif文にあたる機能をもつswitchノードでリクエストを種類分けする。
              3. 種類に応じて、センサーから値を取得する。
              4. 取得した値をfunctionノードでJSONに成形し、"ibmout"とあるIBM IoTノードでクラウドに送信する。

              • Small      2018 10 15 21 38 06
              • Small      2018 10 15 21 38 46
            • IBM Cloud の Node-RED の流れ①

              0
              Thumb img 2188
              フローはここから閲覧→IBM Cloud Node-RED フロー
              量が多いので、フロー内のコメントノード内で細かく説明します

              とりあえず大まかに説明。
              • 送られて来るwebhookには種類があり、友達登録の場合とメッセージの場合がある。それが友達登録の場合初期設定のメッセージをLINEにPOSTし、ユーザーの返信内容に基づいて初期設定を行う。これをIBMCloudantというデータベースに保存する。
            • IBM Cloud の Node-RED の流れ②

              0
              Thumb img 2188
              • webhookがメッセージによるものの場合、そのメッセージの原文をそのままIntent(パターン)作成済みのDialogflowにPOSTする。原文から読み取った文章の意味をクラウドのNode-REDに返し、ユーザーへの返信やデバイスへのリクエストなどを行う。

              • injectノードで、3時、12時、9時になったときにデバイスにコマンドを送り、その結果をもとにメッセージをLINEにPOSTする。

              ちなみに、セリフを打つのが一番しんどかったです...

            • DialogflowのIntent作り

              0
              Thumb img 2188
              DialogflowではIntentとよばれるメッセージのパターンを追加していくことで、いろいろなメッセージに対応させる。普段Google AssistantなどでDialogflowを使うとき、このIntentResponses(返答)を入れるのだが、センサーの値やボットの性格など、返答を変動させる要素がこのプロジェクトではいくつかあるため、Responsesの代わりにActions and parameteresDialogflowに送られたメッセージの意味のパラメータのみをNode-REDに返し、そのパラメータに基づいてユーザーにメッセージを送る流れにした。
              Small            97
            • Dialogflowを賢くする。

              0
              Thumb img 2188
              ユーザーが送るLINEのパターンは単語の組み合わせで無限になり、これを一つずつIntent発動のトリガーとして設定するのは非常に効率が悪い。トリガーの設定の手間を最小限にするために、Dialogflowの機能の一つであるEntitiesを使った。Entitiesとはいわば単語辞書のようなもので、いくつかの単語を一つにまとめることができる。上にある画像のように、Intentのトリガーとなるパターンを入力すると自動的にEntitiesに登録されている単語をタグ付けし、Entitiesで同じ登録されている単語の数だけIntentの発動条件を増やせる。ハイライトされている単語がタグ付け済みの単語。
              • Small            98
              • Small            99
            • 完成 具体的な機能紹介

              0
              Thumb img 2188
              • 毎日 6,12,9時にセンサーの状態をユーザに通知。挨拶もしてくれる。
              • ユーザが「土はどう」などと話しかけると該当するセンサーから値を取得、ユーザに通知。
              • 水をやると感謝メッセージを送る。
              • 名前を呼ぶと返事をする。
              • BOTは性格を変えられる(普通、真面目、ツンデレ)。
          • 3Dデータを作る

            0
            Thumb img 2188
            システムは完成した。
            一応はこのままでも使えなくはないが、センサーのモジュールや配線がブレッドボード上でむき出しになっているのはさすがに見るに堪えないし、植木に設置する都合上、水がかかってショートする恐れがあり、実用性にも問題がある
            そのため、これらをショートなどの危険から守り、かつセンサーのモジュールや配線が極力みえない入れ物を作ることにした。
            • どんなものを作ろうか

              0
              Thumb img 2188
              DHT11SKU:SEN0193はそれぞれ植木鉢上になければならないので、センサーを格納するものは植木鉢上にあっても違和感のないものを考えた。
              →形と色が植物であれば違和感がないはず!

              形の案として、双葉とサボテンを考えた。
              どちらの案をとるかを決めるため、2つともとりあえず3Dデータを作ることにした。

              • Small flower seichou2
              • Small plant cactus
            • 仮3Dモデルの作成

              0
              Thumb img 2188
              まずは、3Dプリントすることを考慮せずに簡単に作ってみた。

              一応センサーをはめることは考慮して、SKU:SEN0193の直径、2.35cm以上の直径を持つように設計した。

              作ってみてわかったのが、双葉は構造的に難しい点があるということだ。
              センサーを格納する都合上、物はある程度太さが必要なのだが、双葉の場合はデザイン的に茎を細くしたかったため、デザイン的にも構造的にも中途半端な出来になってしまった。
              その点、サボテンの場合はデザイン的に太さを確保しやすく、センサーを格納するのに十分な空間を内部に取れそうだった。

              この結果より、実際にプリントするものはサボテンにする方針に決めた。


              • Small            101
              • Small            102
            • モデルの基本構造

              0
              Thumb img 2188
              構造を説明する。
              まず、センサーとモジュールは、それらを固定できる最小限の大きさの筒(土台)に入れる。
              その筒からは、vcc、gnd、dht11のアウトプット、SKU:SEN0193のアウトプットの配線4本が出ており、Raspberry Piと接続してある(SKU:SEN0193のみRaspberryPiのカバーに固定したmcp3002につなげる)。
              最終的にこの土台に、サボテンのカバーをかぶせる。

              この構造になった理由として、
              • センサーを固定する作業が簡単になる。
              • サボテンの種類を複数作りたかったため、カバーを変えられるようにしたかった。

              Small      2018 10 16 21 11 13
            • 土台の下部の作成

              0
              Thumb img 2188
              まず、どうやって土台にセンサーを固定するかだが(特に、地面に刺すタイプのSKU:SEN0193)、SKU:SEN0193をよく見てみると、ここで固定してくださいと言わんばかりの凹みがあることに気が付いた。これに着目した私は、土台にツメを設けてここに引っ掛けるようにして縦方向に固定することに決めた。
              また、センサーが土台内で回転して取れることがないよう、横方向の回転は土台の底で固定する。





              • Small      2018 10 16 21 30 50
              • Small            103
              • Small            104
            • 土台下部をプリント 組み立て

              0
              Thumb img 2188
              実際にプリントしてみたところ、採寸ミスや3Dデータのミスで、何回も印刷しなおす羽目になってしまった。
              特に、前述のツメの作成では、採寸を定規一つでやっていたため、採寸ミスが頻発し、そのパーツを4回も再設計して印刷することとなった。
              印刷しなおすのは非常に時間がかかるため、正しい採寸の大切さを身に染みて感じた。

              なお、部品の組み立てはこの順で
              1. SKU:SEN0193に底を白い線まで取り付ける。
              2. 土台下部をSKU:SEN0193の上から差し込む。
              3. 土台下部を90°回す。そうするとSKU:SEN0193が土台内で固定される。
              4. 底と土台下部を接着剤で固定。
              Small      2018 10 16 22 01 13
            • 土台下部組み立ての動画

              0
              Thumb img 2188
              1. SKU:SEN0193に底を白い線まで取り付ける。
              2. 土台下部をSKU:SEN0193の上から差し込む。
              3. 土台下部を90°回す。そうするとSKU:SEN0193が土台内で固定される。
              4. 底と土台下部を接着剤で固定。
              5. センサーが完全に固定される。
            • 土台の完成

              0
              Thumb img 2188
              土台の下部と上部を取り付けた。
              あとはここにカバーを取り付けるだけだ。

              Small      2018 10 16 23 03 35
            • カバーの作成

              0
              Thumb img 2188
              まずは、最初に作ったサボテンをカバーにするために改造していく。
              試作時からの変更点として、
              • 土台のスペース確保のために中央を土台の直径より1mm太くくりぬいた
              • 配線を通すための隙間を設けた
              • 三角面を全部ふさいでやった
              がある。

              Blenderのアドオンの3D Print  Toolboxで出た、手作業で修正しきれなかったエラーは
              Autodesk Netfabb PremiumAuto Repair機能で修復した。

              Small            107
            • カバーをプリントしてみる

              0
              Thumb img 2188
              よりサボテン感を出すため、ネオングリーンカラーのフィラメントでプリントした。

              印刷してみた感想として、出来栄えには非常に満足している。
              デフォルメして作ったサボテンとネオングリーンの色が合わさって、カートゥーン感を醸し出しており、非常にかわいらしくなった。

              土台の装着も一発でできた。
              • Small      2018 10 17 19 50 38
              • Small      2018 10 17 20 04 27
            • カバーをもう一つ作ってみる。

              0
              Thumb img 2188
              せっかく土台のカバーを付け替えられる方式にしたので、サボテンのカバーをもう一つ作る。
              先のサボテンを印刷してみて、ある程度ローポリでも問題がないことがわかったので、作業短縮のために思い切ってかなりローポリで仕上げた(モデルが曲線で構成されている都合上、一つずつしか面張りできないため)。もう少しスマートに3Dモデルを作れるようになりたい...

              「サボテン 丸」で画像検索して、それをもとにして作ったつもり。
              もちろん、前回同様土台と配線のスペースは確保した。



              • Small            109
              • Small            86
              • Small            87
            • プリントした。

              0
              Thumb img 2188
              プリントする際、先のサボテンカバーと変わり、今度はリアルなサボテンに近づけるため、より深い色のクリアグリーンでプリントした。クリアというだけあり、若干光沢と透明感があるが、Davinci Mini用のフィラメントの色の種類がそもそも少ないので仕方ない(XYZさん...色のバリエーションを増やしてくれ...)。
              それでも、期待した通りのリアル感は感じたので満足だ(実際に植木に置いてみるとすごく馴染む)。

              前回同様、土台はピッタリハマった。
              • Small      2018 10 17 21 12 25
              • Small      2018 10 17 21 19 36
              • Small      2018 10 17 21 35 16
            • プリント中を撮ってみた

              0
              Thumb img 2188
              プリントしているところを早送りで見れたら面白いと思って、タイムラプス動画(印刷時間は4時間弱)をとってみた。
              改めて、3Dプリンターのすごさを感じました。
          • いざ、実践

            0
            Thumb img 2188
            システム、土台、カバーのそれぞれが完成した。
            これらをすべてつなぐ。
            • おじいちゃんが使ってみた

              0
              Thumb img 2188
              今回、テスターとして、一人暮らしをしている
              僕のおじいちゃんが試してくれることに。

              おじいちゃんが植物を「みどりちゃん」と命名
              (ちょっと昭和っぽいのにウケた)。

              おじいちゃんに文字をタイプしてもらうのは難しそうだったので、音声入力で文字を入力してもらったのだが、
              まるで本当に植物に話しかけているようだった

              おじいちゃんが笑ってくれました( ´∀` )
            • 動画のLINEのログ

              0
              Thumb img 2188
              動画でLINEのメッセージが見れなかった方のために貼っておきます。
              • Small clip now 20181017 234534
              • Small clip now 20181017 234556
          • 最後に

            0
            Thumb img 2188


            • Node-REDの素晴らしさ

              0
              Thumb img 2188
              今回、IoTでいろいろするにあたって、Node-REDに物凄く頼っている気がした。
              Node-REDはNode-RED同士の交信が非常に得意だ。
              事実、Node-REDを活用することで、プログラム作成(特に外部機器、サービスとの接続)の時間を多くカットできた。
              Node-REDがIBM Cloudの標準OSSであり、Raspberry Piでもつかえることから、
              Raspberry PiでIoT化をしていくならIBM Cloudで初めるのが最も易しいだろう(決して回し者ではない)。

            • Blenderの素晴らしさ

              0
              Thumb img 2188
              Blenderはすごい。
              何がすごいかっていうと、その汎用性だ。
              普段はゲーム用の3Dモデル作成などにつかっていたBlenderが3D CADソフトに様変わりしたのだ。
              それに加えてなんと無料(回し者ではない。大事なことなのd)。

              このBlenderの素晴らしさのおかげでSteamでのBlenderプレイ時間が最近ぐんぐんのぼっていたことに、友達にヒカれた。
            • 今後の展望

              0
              Thumb img 2188
              まだLINE BOTが対応している会話のパターンが少なく、ユーザーがBOTと遊べるほど賢くはないので、どんどん会話パターンを作り、本当に植物と話せるようになりたい。
              AI技術をDialogflowにとどまらず、いろいろなサービスを他にも活用していけばもっと発展できるのではないかと考えている。
          Add Card Order

          References

            Usages

              Convert State

               to Annotation.

              Select the numebr of the state to annotate.

              OK
              cancel
              Loading

              facebook

              , data-width="400", data-show-faces="true" data-send="true"
              , data-width="400", data-order-by="reverse_time"