UniboとIFTTTで簡単にIoTしてみる

IFTTTは(イフト)TwitterやFacebook、SlackなどのWebサービス同士を組み合わせて簡単に連携できるサービスです。

今回はそのIFTTTとUniboをつなげてUniboからSlackやTwitterなどにメッセージを送信する仕組みについて説明します。

#全体図

[{"id":"1a22c6251f.020e3a","type":"tab","label":"IFTTT"},{"id":"1ad734c9dd.af1808","type":"http request","z":"1a22c6251f.020e3a","name":"IFTTTにアクセス","method":"GET","ret":"txt","url":"","tls":"","x":586,"y":440,"wires":[["1a70e6eb3f.c26754"]]},{"id":"1ad02e9d78.efebc","type":"speech","z":"1a22c6251f.020e3a","word":"","subtitle":"","name":"","edit":false,"language":"jp","voice":"yuuto","version":1,"x":987,"y":440,"wires":[[]]},{"id":"1a70e6eb3f.c26754","type":"function","z":"1a22c6251f.020e3a","name":"発話のためにコピー","edit":"","func":"msg.word = msg.subtitle = msg.payload;\nreturn msg;","outputs":1,"dummy":"1","noerr":0,"x":805,"y":440,"wires":[["1ad02e9d78.efebc"]]},{"id":"1a8a30f02a.12783","type":"inject","z":"1a22c6251f.020e3a","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":390,"y":440,"wires":[["1ad734c9dd.af1808"]]}]

#手順

IFTTTの登録についてはこちらの記事をご覧ください。

Webサービス同士を連携できる「IFTTT」と自作IoTデバイスを繋いで生活を便利にしてみた

登録ができたところで、実際に連携させてみようと思います。

IFTTTでシナリオを作成してみる

IFTTTでUniboとLineをつなげるレシピと呼ばれるシナリオを作成していきます。 上のリンクをクリックして作成していきましょう。

まずはMakerWebhooksをトリガーにするため”make”と検索欄に入力します。 MakerWebhooksがあればそれをクリックします。

MakerWebhooksはEvent単位でトリガーがかかります。今回はEventNameに"Unibo"と入力し”Create trigger”をクリックし作成していきます。 今入力したEventNameはあとでUniboに入力するのでSecretKeyと合わせて覚えておきましょう。

次にトリガーが起こった時にしたい動作を選択します。 IFTTTの検索欄でLineを検索し、連携させていきます。 ちなみに、このときにTwitterやGmailなどを選択するとそれと連携させることが出来ます。

Recipientと書かれた欄にメッセージを送るLineのグループを選択します。 Messageと書かれた欄に送信するメッセージを入力を入力します。Value1、Value2などがありプログラムから値を渡すことができます。これを使えば温度センサや明るさセンサーの値をプログラムから渡しメッセージに組み込むことが可能です。 オプションですが写真のURLさえあれば、Lineに写真を投稿することができます。

Create actionをクリックしてメッセージを保存します。

最後にFinishを押し、作成を完了します。

こちらのリンクをクリックしDocumentationのリンクをクリックします。

クリックするとこのような画面に移動します。

このときに表示される赤枠のURLをUniboにコピーします。

Uniboの準備をする

Uniboのスキルクリエイターに移動し、全体図の章で見せたJSONの文字列をスキルクリエイターにインポートしてください。

インポートが終わったら先ほどIFTTTで取得したURLを張り付けていきます。 http request Nodeをクリックし、赤枠の入力欄に先ほどのURLを貼り付けていきます。この時にURL中央部にある{event}は先ほどIFTTTに登録したイベント名に変えておきましょう。 記事の通りに作成している場合はUniboになります。

入力できたら完了を押し作成を完了します。

これでDeployを押し、タイムスタンプのボタンを押せばLineにメッセージが飛ぶような仕組みが完成しました!

余談ですが、functionNodeでhttp request Nodeの応答をUniboでしゃべらすためにメッセージ内容をコピーする処理をいれることでレスポンスをしゃべらすことができるようになります。

UniboでAzure IoTHubと連携させてみる

AzureIoTHubでメッセージを送受信してみる。

Azure IoTHubとUniboのメッセージをやりとりしてみましょう。

##全体図

[{"id":"1a885986dc.5c17f8","type":"tab","label":"iothub"},{"id":"1adc54aae1.2cb078","type":"inject","z":"1a885986dc.5c17f8","name":"開始","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":320,"y":324.888916015625,"wires":[["1a50458b29.daf934"]]},{"id":"1a5b568748.b15d28","type":"azureiothub","z":"1a885986dc.5c17f8","name":"Azure IoT Hub","protocol":"mqtt","x":958.1041870117188,"y":325,"wires":[["1a452ce6f4.4d1838"]]},{"id":"1a6872e007.3f029","type":"template","z":"1a885986dc.5c17f8","name":"Azure IoTHubに接続情報","field":"payload","fieldType":"msg","format":"json","syntax":"mustache","template":"{\n \"deviceId\": \"unibo\",\n \"key\": \"SharedAccessKey=以下のものを貼る\",\n \"protocol\": \"mqtt\",\n \"data\": \"{value1: 0, value2: \\\"test\\\"}\"\n}","x":718.1041870117188,"y":325,"wires":[["1a5b568748.b15d28"]]},{"id":"1ad307ac75.70343","type":"motion","z":"1a885986dc.5c17f8","name":"","target":"other","motion":"happy","x":1042.1041870117188,"y":561,"wires":[[]]},{"id":"1a9501606e.fe849","type":"debug","z":"1a885986dc.5c17f8","name":"","active":true,"console":"false","complete":"payload","x":747.1041870117188,"y":432,"wires":[]},{"id":"1a50458b29.daf934","type":"led","z":"1a885986dc.5c17f8","name":"","color":"black","version":1,"x":499.10418701171875,"y":325,"wires":[["1a6872e007.3f029"]]},{"id":"1a452ce6f4.4d1838","type":"function","z":"1a885986dc.5c17f8","name":"データ整形","edit":"","func":"msg.payload = msg.payload.toString();\nreturn msg;","outputs":1,"dummy":"1","noerr":0,"x":336.10418701171875,"y":485,"wires":[["1a513c662f.d3f0a8"]]},{"id":"1a513c662f.d3f0a8","type":"switch","z":"1a885986dc.5c17f8","name":"送受信分岐","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"Message sent.","vt":"str"},{"t":"neq","v":"Message sent.","vt":"str"}],"checkall":"true","outputs":2,"x":521.1041870117188,"y":485,"wires":[["1a9501606e.fe849"],["1a14de07ea.ded998"]]},{"id":"1a14de07ea.ded998","type":"delay","z":"1a885986dc.5c17f8","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"30","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":764.1041870117188,"y":526,"wires":[["1ad307ac75.70343"]]},{"id":"1a7c821ed2.91754","type":"delay","z":"1a885986dc.5c17f8","name":"","pauseType":"timed","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"30","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":771.1041870117188,"y":621,"wires":[["1ad307ac75.70343"]]},{"id":"1a289d2a8d.919826","type":"comment","z":"1a885986dc.5c17f8","name":"AzureIoTHubで必要となる情報を入力します。","info":"","x":736.1041870117188,"y":275,"wires":[]},{"id":"1af14fac81.3eab5","type":"comment","z":"1a885986dc.5c17f8","name":"30秒毎に順番に処理をします","info":"","x":774.1041870117188,"y":485,"wires":[]},{"id":"1a63ab930e.7d0b8c","type":"comment","z":"1a885986dc.5c17f8","name":"30秒の間に届いた最新のメッセージの処理をします","info":"","x":767.1041870117188,"y":672,"wires":[]}]

2017-05-10_16h22_40.png

前提条件

  • Azureに登録できていること

手順

AzureのIoTHubに登録するところから説明していきます。

##Azure IoTHubの設定 それでは、AzureにログインしてIoTHubを実際に作っていきましょう!

Azure ポータルを開いていきます。

新規からモノのインターネット(IoT)をクリックして、IoTHubをクリックします。これから必要な設定を行っていきます。 qiita (1).png

無事にIoTHubが開かれると複数の入力欄が出るので写真を参考に入力欄を埋めていきましょう。 それでは、必須項目であるIoTHubの名前を入力してください。この名前はドメインでも使われますので他の方と重複するとエラーが出ます。入力欄の右端が緑のチェックが入れば大丈夫です。 次に、価格とスケールティアを変更していきます。この際にFreeを必ず選んでください。Standardを選んだまま作成してしまうと、後からFreeに変更することができず、再度作り直すことになります。

Freeを選択したらクリックして反映させてください。

qiita (2).png

リソースグループは既存ものがあれば、それを使って頂いてもかまいませんが、今回は初めてだという前提で、新規作成で好きなグループ名を入力してください。

Azureサーバーがある場所を指定することができます。東日本、西日本と選べますのでお好みでどうぞ。

ここまで問題なくできていれば、作成ボタンをクリックしてIoTHubをデプロイしていきます。 qiita (3).png

数分かかりますのでしばしお待ちを… qiita (4).png

無事にIoTHubのデプロイが終わるとこのような画面が表示されます。 この画面では先ほど設定した内容が見れるほか、IoTHubの使用状態を確認することができます。

qiita (5).png

デバイスを繋げるために必要な設定を行っていきます。 共有アクセスポリシーからiothubownerをクリックし、プライマリキーをコピーします。 このとき写真で示してある部分をクリックすると簡単にキーをコピーすることができます。

このプライマリキーは次の作業で使用します。 qiita (6).png

この作業からDevice Explorerというツールを使っていきます。 このツールはWindows専用になります。MacやLinuxの場合iothub-explorerを使うようですが、今回は取り扱いません。

###Device Explorerのダウンロード こちらのリンクからダウンロードしてインストールをよろしくお願いします。

インストールが終わったところでDevice Explorerを使っていこうと思います。

このツールでIoTHubに接続できる端末の登録、削除、ほかにはデバイスからIoTHubへの通信モニターになったり、IoTHubからデバイスにデータを送ることができるなどIoTHubに必須のものとなっております。

説明が長くなりましたが、それではこのDevice Explorerに先ほどのプライマリキーを入力してUpdateをクリックしてください。 qiita (7).png

プライマリキーが合っていれば、このような表示がされます。この表示がでれば先ほど作ったIoTHubと連携ができるようになります。 qiita (8).png これからIoTHubに接続できるデバイスの設定をしていこうと思います。

この作業はデバイスごとにIDを割り振る作業になります。 ManagementからCreateをクリックします。 qiita (9).png Createをクリックするとこのような画面が出ますので、Device IDに接続するデバイス名を入力してください。

入力が終わったらCreateをクリックしてください。 qiita (10).png

無事にデバイスが作れると先ほどのDevice IDを持ったものが増えているはずです。 qiita (11).png

無事に作成できていれば、次はデバイスに必要な情報をコピーしておきましょう。 今回作成したDevice IDをクリックすると青色の欄が移動しますので、選択された状態で右クリックするとCopy connection string for selected deviceを選んでクリックしてください。

そうすると必要な情報がコピーされますので、その情報をUniboに登録していきます。 qiita (12).png

スキルクリエイターの設定をしよう

前もって、スキルクリエイターにログインし、全体図の章に書いてあるjsonファイルをスキルクリエイターにインポートします。

インポートができたらAzure IoTHubに接続するために必要な情報を入力していきます。

今回はテンプレートNodeに必要な情報を入力します。動的に切り替えて接続先を変更することなども可能ですが今回はシンプルに作成します。

タイトル入力内容
deviceIdDevice Explorerでデバイス登録時に入力したDeviceID
keyDevice Explorerで取得したCopy connection string for selected deviceをkeyと書かれた欄に貼り付けします。一例ですがHostName=unibo.azure-devices.net;DeviceId=unibo;SharedAccessKey=tIrfnS6csQ=このように貼り付けされます。今回必要となるのはSharedAccessKeyの部分となります。上の例であればtIrfnS6csQ=となります。それ以外は削除してください。
protocolhttp,mqtt,AMQPから選択
dataAzure IoTHubに送信したいデータ

2017-05-10_17h01_08.png

次にAzure IoTHub Nodeを設定していきます。 設定項目としては、Hostnameに必要な情報を入力します。 先ほども使ったDevice Explorerで取得したCopy connection string for selected deviceをHostnameに貼り付けします。 一例ですがHostName=unibo.azure-devices.net;DeviceId=unibo;SharedAccessKey=tIrfnS6csQ=このように貼り付けされます。 今回必要となるのはHostNameの部分となります。上の例であればunibo.azure-devices.netとなります。 それ以外は削除してください。

2017-05-10_17h26_20.png

Azure IoTHubとしての設定はこれまでのもので完了です。 あとはAzure IoTHubからのデータを受信したときにどのような動作をするのかこれから順に説明していきます。

2017-05-10_17h47_03.png

###データ整形

Azure IoTHub Nodeでは送信時と受信時にNodeを通ります。送信時にも下のNodeにイベントが行くので注意が必要となります。

受信時にイベントが発火する場合、データがHEXデータでくるので文字列として活用したい場合は関数Nodeで変換してください。

msg.payload = msg.payload.toString();
return msg;

このように変換することで文字列として扱えるようになりました。

その後、送信なのか受信なのかを判定しています。その際の判定はMessage sent.という言葉がメッセージに含まれているかで判定することができます。 これにより、受信時のみUniboを動かすことができるようになりました。

受信時の処理

受信時にも注意が必要となります。 Azure IoTHubから別々のデータがネットワークなどの影響でまとめて届く場合があります。

この時に対策を取っていないと、Nodeが続々と発火する可能性があります。例としては、Uniboの動作が完了せずに終了することやUniboの発話が完了せずに終了するなど予期しない動作をする可能性があります。

対策としては、delay Nodeにて「レートの制限」や「時限リリースキュー」などがあります。もしくはグローバル変数などを用いフラグ管理するなどで対応することが可能です。

#まとめ

UniboとAzure IoTHubを使うことで外部との連携が簡単にできるようになります。 Azure IoTHubを使うことでハードウエアはもちろん、Webとの連携もできるのでぜひ試してみてください。

回路図 説明資料

回路図とは、電子部品同士をどのように繋ぐのか図解したものです。

回路図があることで自分が見たときはもちろん、他の人に伝える時に間違えることなく電子回路を組み立てることができます。

回路図をみてみよう

回路図にもいろいろと種類があり、線と簡単な図形で描かれたものが一般的です。

このような回路図を読むことが出来るとインターネットにある様々な回路を組むことができます。 しかし、この様な回路図を初めて見るような方には難易度が高いです。 上の様な回路図を読みたい場合、他に説明してくれるサイトもありますのでそちらをご覧ください。

今回は、『Frizing』と呼ばれる回路図作成ソフトの回路図を見てみようと思います。 このソフトで描かれた回路図の特徴は、電子部品をイラストで表してくれるところです。

ボタンを押すとLEDが光る回路を組んでみました。

実は上のシンプルな図形の回路図とこのFrizingで書いた回路図は同じ意味をもっています。 多くの場合はシンプルな図形の方で表記されるため理解できるとよいとは思いますがこの図形ってなんだっけ?と思うことがあれば検索するようにすればよいと思います。

回路図でよくみる図

名称回路図記号説明
電源電池やUSBなどから供給される電気の供給源です。プラスとマイナスがあり、回路図では横に2本線があるうちの長い方がプラス、短い方がマイナスとなります。
コンデンサコンデンサは電気を蓄えたり放出したりする電子部品です。プラスマイナスの極性が決まっているものもあるので注意が必要です。
抵抗電流の流れを抑えることができます。LEDと一緒に使うことでLEDが焼けることを保護するこことができます。
スイッチオン、オフを切り替えすることができるものです。スイッチは様々なものがあり、どのようなことがしたいかでスイッチを変えるとよいです。
LED小さい電力で操作でき、光らせることができます。明るいものやマトリックス状になったものなどがあります。

デジタル、アナログ 説明資料

アナログ、デジタルと聞いて何が思い浮かぶでしょうか?

テレビもありますが、今回は電気的にデジタル、アナログの違いについて説明していきます。

アナログデジタルの違いって?

一番の違いはグラフにしたときに分かります。 これは電圧の変化のことを指します。

デジタルはある(1)ない(0)のどちらかでの表現のためシンプルなデータになっています。 これによってあるかないかはハッキリと見て分かるのですがもともとの値がどれくらい大きかったのか、小さかったのかは分からなくなってしまいました。

アナログであればどれだけ大きい、小さいのかは分かるのですがデータとしては大きいという状態になります。

マイコンでみるアナログ、デジタル

アナログ、デジタルがどの様なものか分かったところで、マイコン(Arduinoなど)でその値を取得する方法を説明します。

マイコンの種類により詳細な手順は変わるので注意してください。

アナログ、デジタルの入出力については、指定されたピンでやりとりします。

今回のプログラムについての説明は全てArduino Unoを対象にさせていただきます。

デジタル

入力

Arduino Unoで例えるとdigitalRead関数により、ある(HIGH)ない(LOW)を取得できます。 このときに注意しないといけないのが閾値の値です。

Arduino Unoの場合、閾値は2.5v以上になるとHIGHになり、それ以下はLOWとなります。この閾値はマイコンより異なるので注意が必要です。

スイッチなどを付けて、押された押されてないという状態を取得する場合、ノイズによって押していないのに押したと誤検知することがあります。 その時にはプルアップという方法をすることで誤検知を減らすことができます。

出力

Arduino Unoで例えるとdigitalWrite関数により、ある(HIGH)ない(LOW)を出力できます。

Arduino UnoではHIGHのとき5vが出力され、LOWのとき0vが出力されます。

アナログ

入力

Arduino Unoで例えるとanalogRead関数により、0(0v)-1023(5v)の1024段階で値を取得できます。

入力する電圧が5vを超える場合、抵抗で分圧をすることで入力することができます。

分圧については、検索していただくと計算してくれるサイトなどあるので参考にしてください。

出力

Arduino Unoではアナログ出力はできません。 しかしPWMと呼ばれる方式により、擬似的にアナログ出力をすることができます。 

PWMの出力方法はanalogWrite関数により可能となります。0(0v)-255(5v)の256段階で指定することが可能です。

それによりLEDをふんわり付けたりすることが可能です。

Grove 説明資料

Groveとは

Groveとは、seeed studioが開発している統一された端子で扱えるセンサーなどがあるモジュールのことです。

どのモジュールも端子に凹凸があるため初心者でも向きを間違えることなく扱えるメリットや手軽に差し替えることが出来るのでプロトタイピングするときにピッタリのものとなっております。

どんなものがあるの?

2017/2/1現在100以上もの周りの環境を取得するためのセンサ、サーボやファンなど動きのあるアクチュエータなどがあります。

今回はその中からどのようなセンサやアクチュエータなどがあるのか解説していこうと思います。

センサ(I2C)

I2C デジタル光センサ

GROVEシステムのI2C接続デジタル光センサです。

このセンサーの特徴は明るさを照度の単位であるlux(ルクス)でとれるところです。

アナログのセンサーでも明るさを取得する事はできますが、こちらは明確に数値として取得出来るので机の上が適切な明るさかアドバイスすることができたり、植物にちゃんと光があたっているかなど見ることができます。

TSL2561を搭載し、光強度をデジタル信号に変換します。 検出する光のスペクトラムを、赤外線,フルスペクトラム,人間の可視光の3つのモードから選択できます。

  • 検出モード選択可能
  • 高分解能16bitデジタル出力 400KHz I2Cファストモード
  • ダイナミックレンジ 0.1~40,000LUX
  • プログラム可能な割り込み機能(ユーザー設定可能な上下閾値)

I2C カラーセンサ

GROVEシステムのI2C接続カラーセンサです。

このセンサーの特徴は色を取得することが出来ることです。

色を識別して、果物を見分ける仕組みを作ってみたり、色によって処理を分けたりするものを作成する事ができます。

2行8列のフィルターされたフォトダイオードと16bitのADコンバータを内蔵しています。

  • 16bitデジタル出力 I2C 400KHz
  • SYNC拡張ピンによる外部光源とのシンクロ可能
    • プログラム可能な割り込み機能(ユーザー設定可能な上下閾値)

I2C 三軸加速度センサ

GROVEシステムの三軸加速度センサです。 ADXL345搭載。

通信方式はI2Cです。 特徴

  • 電源電圧:3V~5V DC
    • 高感度三軸加速度センサ
    • スタンバイモード時消費電力:0.1μA

センサ(アナログ)

水分センサ

GROVEシステムの水分センサです。 水分量による土中の抵抗値変化に応じてアナログ電圧を出力します。

※増幅回路やケーブルコネクタ部などがむき出しになっています。

使用される際は、センサ部分以外が濡れないようにご注意下さい

特徴

  • 電源電圧:3.3V~5V

音センサ

GROVEシステムの音センサーです。 マイクで拾った音声をオペアンプで増幅して出力します。

特徴

  • 電源電圧:4V~12V(標準5V)
  • 低自己消費電流:4mA(電源5V時)
  • ゲイン調整可能

センサ(デジタル)

PIRモーションセンサ

GROVEシステムのPIRモーションセンサです。 検出範囲内で動きがあると、SIGピンがHIGHになります。

  • 電源電圧:3~5V
  • 検出角度:120度
  • 検出距離:最大6m
  • 検出距離、ホールド時間調整可能

アクチュエータ

I2C OLEDディスプレイ128×64

これはOLEDと呼ばれる仕組みで作られたディスプレイです。 特徴としては明るく見やすいディスプレイとなっており、文字だけでなく図形などの表示も可能です。 通信方式はI2Cです。

##ジョイスティック

これはゲームなどでよく見られるジョイスティック型のセンサです。 前後、左右はもちろんクリックにも対応しており、ゲームのコントローラーとしてはもちろん、ラジコンやロボットの 制御の入力として扱うことができます。

X軸、Y軸がそれぞれの位置に応じたアナログ電圧で出力されます。 ステックを押し込んだ(ボタンが押された)場合、X軸に電源電圧が出力されます。 その間、X軸の位置は不明になります。

赤外線送受信

これは赤外線を制御できるものです。

今使われているテレビやエアコンなどのリモコンは赤外線で操作するため、赤外線を制御できるこれを使えば自分好みの学習リモコンを作成することができます。

受信

こちらで赤外線の信号を受けることができます。

送信

こちらで赤外線の信号を送信することができます。

MP3

これは、mp3の音楽を再生できるものです。

電子工作で音楽を流すのはひと手間かかるのですがこれは手軽に音楽を流せるため、普通の音楽はもちろん、警告音や説明音声を流すことができます。

なにと繋げられるの?

seeed studioから様々な変換基板が販売されており、変換基板を介して接続する時ことができます。

接続できるモノの一例です。

  • Arduino
  • Raspberry pi
  • mbed
  • Nefry
  • wio node
  • konashi

多くの基板が変換基板を介してではあるものの接続することができます。

センサー 説明資料

センサについて

センサとは、人の目や耳などの代わりに機械が周りの状況を取得するために使われる部品です。 音量を取得するものや明るさを取得するものなどその種類は多種多様で人が感じられるものはもちろん、人の感知することのできない微弱な信号を取得することができます。

1.どんなものを取得することができるのか

先ほど例に挙げた音量や明るさなどはもちろん、手のジェスチャーを取得するものやモノの色を取得するものなど本当に多種多様です。 センサによっては簡単に入手できないものもありしますので、今回はネットや秋葉原で電子部品を販売している秋月電子通商さんで扱っているものを基準にリストにまとめてみました。

  • 音量センサ
  • 距離センサ
  • 方位センサ
  • アルコールセンサ
  • 角度センサ
  • 圧力センサ
  • 放射線センサ
  • 加速度センサ
  • カラーセンサ
  • 明るさセンサ
  • 温度センサ
  • 湿度センサ
  • ジェスチャセンサ

秋月電子通商で扱っているセンサはこれだけではありませんが、目立ったセンサだけでもこれだけあります。 一般的にはこれらのセンサからの入力を使って他のモノを制御します。

2.センサの選び方

次にセンサの選び方について簡単に説明します。

例として 『大体100cm以内に人やモノが来たことを発見したい』 という前提で説明していきます。

まずはどのようなことを取得したいかをはっきりとさせ、目的の種類のセンサを探します。 今回は距離を測る目的のため今回は距離センサのページを開きます。 距離センサといっても複数の種類があります。 80cmまでしかはかれないものや5.5mまではかれるものなど様々です。 この中から今回の目的に向いたものを選んでみましょう。

この時に見るのがデータシートと呼ばれるセンサの性能が記載されている書類です。

それを読むのが一番詳しいことが書いてありよいのですが、とても詳しく書かれており、その内容を理解するのはなかなか難しいです。

もちろんデータシートを読めるようになるのは大切ですが、初心者の方にオススメする方法は秋月電子通商さんのセンサーごとのページに書かれている概要を読み、このセンサーで出来そうなモノにおおざっぱに目星を付け、センサの名前(例えば ○○) + 使いたいボード(例えばArduino)で検索をかけることをお勧めします。

そのような検索でサンプルプログラムや回路図が記載されているブログなどのサイトが見つかると思うのでその内容を読み問題なく使えそうであればよいと思われます。 全く見つからない場合はプログラムを1から作らないといけないので、そのようなものはなかなか扱えるようにするまでが大変ですのでオススメできません。 見つからない場合は、先ほどのデータシートをよく読みプログラムや回路を作成することで扱えるようになるのですが、少し難易度は上がりますので興味があれば試してみるのも面白いと思います。

先ほどの選び方で秋月電子通商で扱っている距離センサの中から、シャープ製のGP2Y0A02YKという型番のセンサをえらんでみました。

距離も0.2mから1.5mまで読めますし、検索すると複数のサイトが見つかりますので問題なく作成出来るでしょう。

他にもありますがこのセンサは距離の精度やお値段も安いのでこれでいいでしょう。

距離に精度が必要であれば別のセンサを使えばいいと思います。

3.センサーとマイコンのつなぎ方

センサを選んだあと、普通はセンサとマイコン(センサのデータを処理するところ)を繋げてプログラムを書き、他のモノと連携させていきます。

その繋げるということですが、どんな風に繋げることができるのか簡単に紹介していきます。

そもそもマイコンがなぜ必要かと言うと、様々なセンサで取得した値は電気信号であるので何らかの形で私たちが分かるようにしないと扱うことができません。 センサの値を受け取るのにお勧めなのはArduinoとよばれるマイコンボードが本やインターネットの情報が多くて困ったときに助かるので良いです。

先ほどセンサから電気信号で出ているといいましたが、アナログの値で出力されているものやある規則に沿って通信するものもあるので順に説明していきます。

アナログ

これはシンプルな圧力センサや明るさセンサでよくみられるものです。 電圧が徐々に変化するためこの情報を取得するのには多くは指定されたアナログ入力ピンに接続するのが前提になります。

##デジタル

これはHIGH or LOWの2つの状態を持つセンサです。 スイッチや人感センサなどで見られます。この情報はデジタル入力ピンで取得することができます。

I2C,SPIなど

これは特定の規格で通信できるセンサで、規格によっては複数のセンサを少ない制御線で制御出来たり、アナログのセンサなどに比べて明確な数値でセンサの値を入力出来るなどメリットがあります。 しかしプログラムが少し複雑になるためセンサごとにライブラリーが出回っていることが多いです。

USB 説明資料

USBはUSBメモリやスマートフォンの接続など様々なところで使われています。 その便利さゆえ電子工作でも多く使われています。

規格としてのusb

USBにはいろいろと規格があります。その中からよく使われるものを軽く説明していきます。

USB2.0

現在よく使われている規格です。 今後はUSB3.0などの次の規格が普及すると思いますが、電子工作でつかわれるとしては当分USB2.0になると思います。 USB3.0とは通信速度や供給電流などが異なります。

USB Type C

最近のスマートフォンやmacなどで採用され、普及しています。 裏表を気にすることなく扱える点が特徴です。

USB micro B

スマートフォンでよく見られる端子です。 注意点として充電専用のケーブルなどが出回っており、通信が出来ないことがあります。

USB B

プリンターやスキャナーでよく見られる端子です。 他の端子と比べ、大きいのが特徴です。

電子工作としてのusb

電子工作でUSBを扱う理由としては、主にpcなどの外部端末と通信するためです。 どのように扱うのか注意点を併せて説明していきます。

シリアル通信する

Arduinoなどで使われてるマイクロコンピューター(マイコン)でUSBを通じてプログラムの書き換えやデバッグなどの理由で通信する際には、マイコンがUSBと直接通信できる機能を持っていないことが大半です。

なので、USBとマイコンの間を取り持つモノが必要となります。 メジャーなのはFT232Cと呼ばれるICで通信することでPCからプログラムを書き込みが出来るようになります。

このあたりの詳しい内容はシリアル通信のページをご覧ください。

電源として使う

USBは5Vの電圧で動いており、モバイルバッテリーなどで1Aの電流を供給することが出来ます。 しかし、PCなどと接続する際には注意が必要になります。 なぜなら、PCなどのUSBでは最大500mAの電流までしか規格上対応しておらず、過電流などの万が一の場合にはPCに対して深刻な影響を与える可能性があるので気をつけて使用してください。

CocoaBitというオリジナルBitを作った話

CocoaBitというlittleBits拡張モジュールを作ってみて気がついたことを書き連ねておきます。

CocoaBitとは

まずはカンタンにCocoaBitについて説明していこうと思います。

CocoaBitとは、cloudBitと呼ばれるインターネットと通信ができるモジュールが日本では技適のため使えないため、開発された拡張モジュール(拡張Bit)です。

私が作成しているNefryをベースとしており、NefryのメリットであるWiFiやモジュールの設定を簡単に出来る点を引き継ぎ、littleBits向けにさらにカスタマイズしています。

(CocoaBitはまだ販売されてませんが、反響があれば…

CocoaBitのサイトはこちら

cocoaBit

カンタンにCloudBitがどのようなものか分かったところで作ってみて気が付いたメリットデメリットについて話してみようと思います。

メリット

手軽に試せる

なんといってもこれが一番のlittleBitsと繋げられるメリットだと思います!

普通の電子工作であると半田付けが必要だったり、ブレッドボードにピンを何本も刺さないといけなかったりするのが、littleBitsなら繋ぐだけでいけます!磁石で繋がるので間違えることもない!

子どもでもあそべる

向きを間違えないため、こどもに任せてしまっても問題なく作ることができます!

子どもももちろんですが大人でもロジックBitなどもあるので充分に遊ぶことが出来ます!

デメリット

とりあえずお高い 

littleBits自体セットで販売などもされているため若干安くなったりしますが、それでもお高い…

これは特に多数のBitがあるとより楽しめるのですが、揃えるまでが…

ときどき接触がわるいときがある

磁石で接続しているため仕方無いのですがカンタンにとれてしまいます。それはlittleBitsの手軽に繋げられるとこと関わるので難しいところです…

(Bitを留められるボードもあるのでそれで解決するところですが…

bitの形に制限がある

これもlittleBitsの世界なので仕方無いところですが、公式からこのようなサイズで作るといいよ、という情報が出ています。

(これも無視して作ることも出来ますが、littleBits同士キレイに揃うといいので出来るだけ合わせましょう。

オリジナルのBitをつくるまで!

私の備忘録を兼ねて今回のCocoaBitを作成した流れを説明していこうと思います。

まずは、どんなものを作るのか検討しよう。

どんなものを作るのか検討すれば、必要な部品数が判明すると思われます。その部品から必要となるであろうサイズを割り出します。

そのサイズからその部品が収まるBitのサイズを選びます。

こちらのサイト内にあるHDK manualのリンクをクリックします。

よりプロフェッショナルなTIPSについてはHDK manual やTips & Tricks もチェックして下さい。

ファイルがダウンロードされるのを待って、Design\Design Manual\PDFsの中にあるUser Interface Considerations for littleBits Module Design.pdfを開き部品が収まるサイズを探します。

無事に見つかったら図の下にある英語の文字を覚えておきましょう。

さくっと回路を起こしていこう

eagleのテンプレートファイルがGitHubで公開されているのでそれをベースに作成するのがお勧めです。

私はKicadの方が好きなので、採寸をまねて作成しました。 こんな感じにできれば、問題ありません。

回路ができれば、SeeedStudioさんやElecrowさんを作成してもらいましょう!

## 部品をそろえよう

まずは、littleBitsの公式サイトからBITSNAPSというlittleBitsの両端を購入しましょう。

もしくは、littleBitsのHardware Development Kitを日本の代理店であるKORGさんから購入することもできます。

あとはほかに必要な部品を購入していてください。

組み立てよう!

BITSNAPSともろもろの部品をつければ、無事にオリジナルの拡張Bitが出来上がりました!

このあたりもSeeedStudioさんやElecrowさんの部品実装サービス使うと大変便利です。 CocoaBitも作成していただいています。

#まとめ

そもそも、littleBitsの拡張することができるなんて思いませんでした。 BitSnaps自体がちょっと高価ではありますが、自分好みのものをつくれるメリットは大きいと思います。

回路を作成するなど難易度は高めですが、完成度も高いので是非お勧めします! よいlittleBitsライフを!

Arduino勉強会資料

ArduinoIDEをダウンロードする

https://www.arduino.cc/

こちらからダウンロードしましょう

早速Lチカしてみよう

ハードウエア入門しよう

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

LEDを繋いでみよう

向きを間違えないように!

本当はちゃんと抵抗を入れましょう。 LED 制限抵抗 で検索!

プログラムの解説 setup

起動したときやリセットを押した時に一度だけ呼び出されるのがsetup()の内容

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}

プログラムの解説 loop

電源が入ってる時に何度も呼び出されるのがloop()の内容

// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

プログラムの解説 digitalWrite

digitalWrite関数は、ピンの出力をHIGH or LOWに変更することができます。

digitalWrite(13, HIGH);

delay関数は、次のコードまで待つことができます。時間の単位はミリ秒です。 1000ミリ秒=1秒

delay(1000);

pinMode関数は、そのピンを入力ピンか出力ピンに指定することができます。

pinMode(13, OUTPUT);

for文を使ってみよう!

for文とは何度か繰り返したい処理をするプログラムを作成する時に便利なものです!

for(int i=1;i<=5;i++){繰り返したい処理}
for(初期値;継続条件;繰り返すたびに変化させたい値){繰り返したい処理}

ほかにもwhile文やdo~while文などが繰り返しさせることができます。

プログラム

実際に試してみようと思います。

for(初期値;継続条件;繰り返すたびに変化させたい値){繰り返したい処理}

リセットしたときにLEDを20回点滅させるプログラム

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
for (int i = 1; i <= 20; i++) {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(100);
}
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

if文を使ってみよう!

if文とは、Arduinoに指定した条件になったときだけある処理をしたいといった分岐したいときに使うものです。

if(条件式){実行したいもの}

プログラムはif文やfor文などの組み合わせでできています。 言語が違うもののスマホのアプリなども同じようにしてできています。

プログラム

スイッチが押されたときだけLEDが点滅するものをつくってみよう

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
pinMode(8, INPUT_PULLUP);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
if (digitalRead(8) == LOW) {
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
}
}

サーボを動かしてみる

サーボとは角度を指定して回すことができるモータです。 線にそれぞれ意味があるのでArduinoと接続を間違えないように!

プログラム

ArduinoIDEにプログラムを書いてみましょう

#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}

RGBLEDを動かしてみよう!

前もって、ライブラリをインストールしておきましょう!

プログラム

#include <Adafruit_NeoPixel.h>
// RGBLEDに出力するピン番号
#define RGBLED_OUTPIN 2
// Arduinoにぶら下がっているRGBLEDの個数
#define NUMRGBLED 1
// RGBLEDのライブラリを生成する(色指定はRGBの並びで行う、LEDの速度は800KHzとする)
Adafruit_NeoPixel RGBLED = Adafruit_NeoPixel(NUMRGBLED, RGBLED_OUTPIN, NEO_RGB + NEO_KHZ800);
void setup()
{
RGBLED.begin() ; // RGBLEDのライブラリを初期化する
RGBLED.setBrightness(50) ; // 明るさの指定(0-255)を行う
RGBLED.setPixelColor(0, 0,150,0) ; // 適度に明るい緑の色。(R=0,G=150,B=0)
RGBLED.show() ; // LEDにデータを送り出す
}
void loop()
{
}