###追記
cloudbitは技適に対応していない、という指摘があったので運用を止めました。知らなかった日本国内の人はお気をつけください。
この記事はlittleBits Advent Calendar 2016の17日の記事です。
#はじめに
毎日家にいるのだが、咳をしても声をかけてくれる人がいないのは寂しい。し、人の目がないとついついだらだらしてしまう。なので、平日は友人数人とビデオチャット(appear.in)でつなぎっぱなしにしています。家が拡張された感じでけっこうよいです。しかし、ずっとPCの前にいるわけでもないので単に壁が映っている時間も結構あり、味気ない。なので、見ている人がネット越しにカメラを動かすことができるようにしました。専用UIを作るよりslackので動かす方が便利だろうということで、slackのbotを入力として使おうと思います。
まぁ普通の家でやるのは気持ち悪いという人が多いと思うんですが、会社にカメラをつないでおいてリモートワーク先の人が様子をわかりやすくする、とかシェアオフィスで誰が飽きているのか見てから行く、とかそういうのにも使えるのではないでしょうか。
#作ったもの
Slackのbotに話しかけるとカメラの角度を変えてくれる。角度は0~100の値をbotに言うと、90°を100として動いてくれます。
https://www.youtube.com/watch?v=LJvZCmJn2qg
Slack->hubot->littlebitsAPI->cloudbits->サーボモーター、という感じで動きます。
IFTTTでの連携もやってみたが、遅延が大きく使いづらかったのでlittlebitsAPIを利用しました。IFTTTでやるだけなら10分の1くらいの手間でできます。
#作り方
##little bitsをセットする
###cloudbitsの設定
http://control.littlebitscloud.cc/ にアクセスして、案内の通りにやっていけば簡単に設定できます。PCのUSBからだと電力が足りなくて設定に失敗するので注意。
設定後、USBアダプタ->電源ユニット->cloudbits->サーボモーター、とlittlebitsをつなぎます。
##hubotとslackと連携させる
http://qiita.com/mochidamochiko/items/29c2d77715d8a1ff062a
上記の記事を参考にさせていただきました。細かいところでつまずきましたが、この辺についてはたくさん記事がある(&自分がよくわからない)ので割愛します。
##hubotとcloudbitを連携させる
http://qiita.com/matsuoshi/items/319d271af7240fb59e8c
上記の記事を参考にさせていただきました。
cloudbitの設定画面からDevice ID と AccessTokenを取得。Heroku のダッシュボード > Settingsから環境変数に登録。
_DEVICE_ID = process.env.DEVICE_ID # 環境変数はherokuに登録したものを呼び出す
_ACCESS_TOKEN = process.env.ACCESS_TOKEN # 環境変数はherokuに登録したものを呼び出す
module.exports = (robot) ->
robot.respond /rotate camera to (.*)/i, (msg) ->
voltageValue = msg.match[1]
data = JSON.stringify
percent: voltageValue # 電圧の高さ。0~100%で指定
duration_ms: -1 # -1で電圧をあげっぱなしにする
robot.http("https://api-http.littlebitscloud.cc/devices/#{_DEVICE_ID}/output")
.header('Authorization', "Bearer #{_ACCESS_TOKEN}")
.header('Accept', 'application/vnd.littlebits.v2+json')
.header('Content-Type', 'application/json')
.post(data) (err, res, body) ->
msg.send 'OK, rotate it to ' + voltageValue # チャットから動かす量を取得。
console.error err
console.log body
これで、@bot名 rotate it to 値(1~100)と話しかけるとその位置にモーターが動くようになりました。
##カメラを付ける
適当にあった重い缶の蓋をカットし、サーボモーターをボルトとナットで固定しました。
カメラはとりあえずガムテープでくっつけただけです。できることがわかったので3Dプリンターでアダプターでも作ろうかなと思っています。
#これから
現状、細かい動き(5だけ動かすとか)ができないのが弱点。あと、エラーのときはbotがちゃんと喋るようにできると良いです。ハード面は、今はガムテープで止めてるのでちゃんとアダプタを作りたいなぁと思っています。
とりあえずしばらく運用してみて様子を見ます。
今回はid:htomineのちからをだいぶん借りました。ありがとう!