The jonki

呼ばれて飛び出てじょじょじょじょーんき

ちょっと未来のティッシュケースを考えてみた

この記事はおうちハックアドベントカレンダー22日目の記事です。


家にある身近なモノをハックしてみようと思い、ちょうど手頃なティッシュケースをハックしてみました。ティッシュを取るという行為が分かれば、いろいろと面白い使い方ができるのではないかと思った次第です。今回は作った1例として、ティッシュが1枚ずつしか取れないエコなティッシュケースを紹介してみます。「何を言ってるんだお前?」と思うかもしれませんが、まずは動画を御覧ください。
f:id:jonki:20141217004601j:plain


動機

最近いろんなガジェットが家の中に溢れてハックされるようになっています。ただ、いざ自分の部屋を見るとティッシュ、傘、机、椅子、コンロ、シャワーといったように、特にIT系の進化の恩恵を受けていない"昔ながら"のモノが大半を占めています。下手に新しいガジェットを生み出すよりも、こういった"昔ながら"のモノをハックした方が面白いのではないかと最近はずっと考えていました。
そこで今回おうちハックアドベントカレンダーが開催されることを知り、ネタ無しだったのですが何かできるだろうというノリで申し込みました。

とりあえず身近にあって扱いやすそうなのがティッシュでした。ティッシュにはティッシュを取るという分かりやすい人とのインタラクションがあります。これを検知するために、マイクや測距センサーをティッシュケースの内部に仕込みましたが、そこまで分かりやすいデータは取得できず。。。最終的には、加速度センサーや曲げセンサーを取り付けるのが良さそう、という案がでてきました。そこで手元にあった加速度センサーで簡単に試したところ、いい感じにティッシュが加速度センサーに引っかかり傾き変化からティッシュ取得アクションが取れることが分かりました。今回時間があまりなく、曲げセンサーやもっと小型の加速度センサーを使って小型化できなかったのは課題ですね。曲げセンサをケース内部にしまうのが一番スマートだと思います。
下は加速度センサーで簡単にプロトしたところです。ティッシュを取得すると内部に設置したLED群が綺麗に光ります。

f:id:jonki:20141207170140j:plain

仕様

今回動画で紹介したモノはこんな感じで動いています。

  1. ティッシュを取る
  2. 加速度センサーがティッシュアクションを検知
  3. ケース内部のLEDが点灯
  4. サーボに付いたバーがティッシュケースの開口部に回転し、ティッシュを取れないよう邪魔する
  5. タイマーのLEDが一定時間アニメーション
  6. タイムアウト後にバーが元の位置に戻る

構成と材料

構成はこんな感じです。1つのArduinoで加速度センサ、サーボ、LEDを操作しています。
f:id:jonki:20141217013813p:plain
f:id:jonki:20141217013745p:plain

今回のティッシュ箱は市販のティッシュケースを使って加工してます。また各デバイスには3Dプリンタで作ったケースを装着して見た目を整えています。利用したプリンタはUP Plus2で一般人向けの3Dプリンタでは現時点でおそらく一番よいシロモノでです。会社のベテランのメカ・デザインのエンジニアの方が言っていたので間違いないでしょう(笑)。ちなみに私はただのUIエンジニアなのでCADもメカの知識もゼロでしたが、一応使えてます。


今回作ったデバイスのケースです。上からGY-521のケース、GY-521ケースの蝶番、サーボのケース、サーボに取り付けるバー、リングLEDのケースになります。すべて123D Designで作っていて公開してるので、改変も自由です。





123D DesignはAutodeskが出している完全なフリーソフトのCADです。CADなんて触ったことありませんでしたが、この123D Designは初心者向けに機能をぐっと抑え、わかりやすいインタフェースで提供されています。渡しの場合は下の2つの本で簡単に使い方を覚えて、あとは身近な小さなケースなどを作っていきました。何回も採寸を間違えましたが、3Dプリンタで印刷しつつ何回もデザインを修正していくうちに少しずつ身についてきました。ある程度使い方を覚えたら自分の作りたいモノを作っていくほうが力になる感じがありますね。それぞれのモデルは設定にもよりますが1時間もしない間にプリントできます。

身近なモノの計測としてデジタルのノギスを使っていますが、深さとかも測れるしかなりいいですね。1万ぐらいすると思ってましたが、下のは3千円ぐらいで使い勝手もよく、早く買っておけばよかったと後悔するぐらいです。精度に関しても日曜工作ではまったく問題なさそうです、というのも、そもそもUP Plus2のプリント誤差のほうがでかいと思います。

シンワ デジタルノギス 大文字 15cm ホールド機能付 19975

シンワ デジタルノギス 大文字 15cm ホールド機能付 19975


傾きを取る

加速度センサーを使って回転角を取得します。加速度とジャイロを搭載したMPU-6050のボードがAmazonで安くてに入ったのでこちらを利用します。今回の用途ではジャイロは不要なので、秋月のKXR94という加速度センサーのみを搭載した小型のものを利用したほうが良かったかもです。


MPU-6050はMEMSの加速度センサーとジャイロセンサーを内蔵した6軸センサーで16ビットADCのI2C通信モジュールです。MPU-9150という地磁気センサーを載せた9軸の上位互換もあります。またI2Cの理解が適当だったので別記事でまとめています。

GY-521(MPU6050)
  • VCC: 3V~5Vの電源入力
  • GND: グランド
  • SCL: Serial CLock。I2Cの信号線 =>Arduino UNOではA5ピンに繋ぐ
  • SDA: Serial DAta。I2Cのデータ線 =>Arduino UNOではA4ピンに繋ぐ
  • XCL: eXternal CLock? 外部センサ用のI2C信号線
  • XDA: eXternal DAta? 外部センサ用のI2Cデータ線
  • AD0: Address。何も繋がないとき(内部抵抗を通ってGNDになっている)は0x68、HIGHにすると0x69になる。つまり同時に2個利用可能。それより多くのMPU-6050を使うときはArduino.ccに書いてあるTrickを利用する必要がある。
  • INT: Interrupt。割り込み出力

こちらの使いかたですが、Arduinoの公式のページに幾つかサンプルが載っています。

今回はメインのコードをスッキリさせたいので下記のライブラリを使わせてもらうことにしました。下記を落としてきてArduino\libraries\以下にI2CdevとMPU6050フォルダを丸ごとコピーしてください。

サンプルのMPU6050_raw.inoを参考に角度を求めます。出力される値を見ると値域は-16384〜16383っぽく15bitの符号付き整数として出力されていました(MPU-6050のADCは16bit)。これが分かればあとは角度(度数)に変換すればOKです。今回は比較的簡易な用途なので特にフィルターなどもなしで計算します。この計算式では360度の回転などは取れませんが、今回の用途ではx軸の0度〜90度が取れれば十分です。

f:id:jonki:20141206220301p:plain

#include "Wire.h"

#include "I2Cdev.h"
#include "MPU6050.h"

#define MAX_VAL 13684.0

MPU6050 accelgyro;

int16_t ax, ay, az;
int16_t gx, gy, gz;

float xdeg;
float ydeg;

void setup() {
  Serial.begin(38400);

  accelgyro.initialize();

  Serial.println("Testing device connections...");
  Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}

void loop() {
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);


  xdeg = 90.0 * (ax / MAX_VAL);
  ydeg = 90.0 * (ay / MAX_VAL);
  Serial.print(xdeg); Serial.print("\t"); Serial.println(ydeg);
}

LEDについて

LEDはAdafruitのNeoPixelシリーズを使っています。使い方に関しては下記の記事を参考にしてください。

今回は2箇所にLEDを配置しています。1つはティッシュケース内に仕込んであるLEDです。こちらはティッシュを取得した時にティッシュケース内部を綺麗に照らすように作っています。これは下記の製品を2つ使って(LED30個分)半円としてケース内部に仕込んであります。製品ページの写真では完全な円になっていますが、こちらの製品は1/4の円なので注意です。つまり完全な円が作りたければ4つポチる必要があります。

もう1つはティッシュのリキャストタイムを示すものです。以前の記事でも使ったものですが、16個のLEDがリング上に配置されたものになります。

サーボについて

サーボモーターはSG90という小型で安いモノを使いました。トルクはないですが、今回はバーを動かす程度なのでこれで十分です。サーボの例はArduinoIDEに付属されているので使い方はスキップします。[スケッチの例]→[Servo]→[Sweep]など参考になると思います。電源はArduinoの5Vピンで大丈夫です。

ソースコード

今回作ったモノのArduinoソースコードです。NeoPixelに命令を送るとサーボにノイズが入ってプルプルと動いてしまったため、暫定対処としてLEDとサーボを排他的に動かしています。かなりイケてないです。とりあえず今回はタイムアウトということでソースも期待内ですが、公開します。

課題とまとめ

今回昔ながらのティッシュケースをハックし、ティッシュとのインタラクションを考えてみました。ちょっと作ったモノがネタっぽくなり、見た目もゴツゴツしてしまいましたが、ティッシュケースの題材選択は良かったかなと思います。誰でも使い方が分かる上に絶対に家にありますからね。今回できなかったですが、色々とネタは温めてあります。

  • ティッシュの残枚数を表示する
  • ティッシュが切れそうになったら赤く光って知らせてくれる
  • 家の各部屋に有るティッシュが連動して光る
  • 離れた家に住まう家族のティッシュが連動して光る

などなど、妄想は止まりませんね。冬休みに入って時間もあるのでまた何か作れればと思います。
明日のおうちハックはid:hecomi先生になります。