自宅の照明をアイドルの家の光量に連動させる装置

#概要
アイドルグループの[・・・・・・・・・](https://twitter.com/dotstokyo
)は「自宅の照明をアイドルの家の光量に連動させる装置 SheareHouse/SheareRoom」を製作しました。

SheareHouse/SheareRoomは、アイドルの家の光量に連動して、ユーザーの家の照明が点いたり消えたりする装置です。

夜、眠りにつくアイドルが明かりを消すと、ユーザーの家の照明も消えます。
朝になり、アイドルの家に窓から光が差し込むと、ユーザーの家の照明が点きます。

このようにアイドルとユーザーの家を連動させることで、「まるでアイドルと一緒に住んでいる」「アイドルが幽霊のように、そばにいる」感覚が味わえます。

合わせて「アイドルの家の光量に連動して背景色が変わるWebサイト」もつくりました。こちらは、アイドルの家の光量に連動して、背景色が変わります。

[アイドルの家の光量に連動して背景色が変わるWebサイト](https://dots.tokyo/SheareHouse/SheareRoom)
[https://dots.tokyo/SheareHouse/SheareRoom](https://dots.tokyo/SheareHouse/SheareRoom)

![shearehouse.gif](https://qiita-image-store.s3.amazonaws.com/0/133133/bca8054a-f7ed-b833-9877-ee19b245dae8.gif)

![DH03l37VwAIVqoy.jpg-large.jpeg](https://qiita-image-store.s3.amazonaws.com/0/133133/0d9b24e1-ce50-0922-3091-4e0a8cbae386.jpeg)

<blockquote class="twitter-tweet" data-cards="hidden" data-lang="ja"><p lang="ja" dir="ltr">・ちゃんの家の光量に連動し、あなたの家の照明が点滅する装置 SheareHouse/SheareRoomを製作しました！<br><br>例えば・ちゃんの家に朝日が差し込むと、あなたの家の明かりが点く🔆<br><br>装置の仕組みはこちらで解説しています。<a href="https://t.co/qBY6BBQBZE">https://t.co/qBY6BBQBZE</a> <a href="https://t.co/yLEueSLYGq">pic.twitter.com/yLEueSLYGq</a></p>&mdash; ・・・・・・・・・ (@dotstokyo) <a href="https://twitter.com/dotstokyo/status/925348117372837888?ref_src=twsrc%5Etfw">2017年10月31日</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

#仕組み
![shearehouse.001.jpeg](https://qiita-image-store.s3.amazonaws.com/0/133133/7118173e-23c4-64b5-1c28-891ed8aadb3d.jpeg)

アイドルの家の装置
1.光量センサーで、アイドルの家の光量を取得する。
2.光量をデータベースに記録する

ユーザーの家の装置
3.光量をデータベースから取得
4.光量に応じて、照明を操作する

#アイドルの家の装置(光量センシング~発信)
![S__8699915.jpg](https://qiita-image-store.s3.amazonaws.com/0/133133/a4a465a5-6340-241c-e57f-ea2a9071f0d4.jpeg)

Raspberry Pi 3 Model Bに光量センサーを挿して光量を採取。
Soracom Airで通信を確立。
30秒ごとにFirebase Realtime Databaseにデータを送っています。

光量センサーはGrovePi+の[Digital Light Sensor](http://wiki.seeed.cc/Grove-Digital_Light_Sensor/)を使用。こちらの記事を参考に実装しました。
[はんだ付けできなくても大丈夫！ラズベリーパイとGrovePi+で現実世界の情報を読み取ろう【センサー編】](https://liginc.co.jp/309311)

Soracom Airについてはこちらの記事を参考にしました。
[第52回「ラズベリーパイとSORACOM Airでインターネット接続！(1)登録編」](http://deviceplus.jp/hobby/raspberrypi_entry_052/)

PythonからFirebaseを利用するにあたって、ライブラリのPython Firebaseを使用。
[Python Firebase](https://ozgur.github.io/python-firebase/)

##コード
GrovePi+が提供しているソースコードを改変。
[DexterInd/GrovePi grove_i2c_digital_light_sensor.py - Github](https://github.com/DexterInd/GrovePi/blob/master/Software/Python/grove_i2c_digital_light_sensor/grove_i2c_digital_light_sensor.py)

```python:light_value.py
from time import sleep                              
import smbus                                        
from Adafruit_I2C import Adafruit_I2C               
import RPi.GPIO as GPIO                             
from smbus import SMBus                             
import datetime                                     
import serial                                       
from firebase.firebase import FirebaseApplication   
from firebase.firebase import FirebaseAuthentication

app = FirebaseApplication('https://app-id.firebaseio.com', authentication=None)
authentication = FirebaseAuthentication('secret', 'mail@example.com', extra={'id': 123})
app.authentication = authentication

(中略)

def main():
	init()
        
        while (True):
                print("Lux: %i [Vis+IR=%i, IR=%i @ Gain=%ix, Timing=%.1fms]" % (readVisibleLux(), channel0, channel1, gain_m, timing_ms))
		
		        data = [{
                   'timestamp': int(datetime.datetime.now().strftime('%s')), #現在時刻
                    'light': readVisibleLux() #光量
                    }]

                try:
                    result = app.post('/light', data) #光量と現在時刻をFirebase Realtime Databaseに送信。
                except:
                    print('Error')
                
                sleep(30) #30秒ごとに繰り返し実行
```

#ユーザーの家の装置(受信~照明の操作)
Raspberry Pi 3 Model B
Soracom Airで通信
自作APIを通して、データベースから最新の光量を取得
irMagicianで照明を操作

##照明の操作
家電製品のリモコンの赤外線を記憶し再生できる、赤外線リモコンのirMagicianを使用。

[irMagician – 高機能／低価格 赤外線リモコン](http://www.omiya-giken.com/?page_id=837)
[小型赤外線（IR）リモコン irMagician ファースト・インプレッション](http://netbuffalo.doorblog.jp/archives/4872290.html)

##コード

```python:lighting_operation.py

from urllib2 import urlopen
import json
import time
import subprocess

url = 'https://api.com/light' #自作APIのURL

while True:
    try:
        #自作APIを通して、データベースから最新の光量を取得
        response = urlopen(url).read()
        data = json.loads(response.decode('utf-8'))
        light_value = int(data['light'])

        if light_value > 100: #光量が101以上なら照明を点け、100以下なら照明を消す。
            path = 'ON.json'
        else:
            path = 'OFF.json'

        subprocess.call(['python', 'irm.py', '-p', '-f', '%s' % path])

        time.sleep(30) #30秒に1度、光量チェック→消点灯のプロセスを実行する。

    except:
        print("Error")
```

#Webサイト
受信機が無いユーザー向けに、**アイドルの家の光量に連動して背景色が変わるWebサイト**をつくりました。

[アイドルの家の光量に連動して背景色が変わるWebサイト](https://dots.tokyo/SheareHouse/SheareRoom)
[https://dots.tokyo/SheareHouse/SheareRoom](https://dots.tokyo/SheareHouse/SheareRoom)

眠るとき、VRゴーグルのようにこのサイトを表示したスマホを掛ければ、アイドルと寝起きを共にできます。

![shearehouse.002.jpeg](https://qiita-image-store.s3.amazonaws.com/0/133133/280d4d1b-712a-7057-ba3c-e2c259a19991.jpeg)

##仕組み

データベースから取得した最新の光量に応じて、Chroma.jsで背景色を変化させています。

[色の処理に特化した軽量ライブラリ「Chroma.js」](http://blog.asial.co.jp/1466
)

```html:index.html
<html>
<head>
    <meta charset="UTF-8">
    <script src="https://www.gstatic.com/firebasejs/4.3.0/firebase.js"></script>
    <script src="https://cdn.firebase.com/js/client/2.3.2/firebase.js"></script>
    <script src="https://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/chroma-js/1.3.4/chroma.min.js"></script>
　　 <script src="socket.io.js"></script>
<head>
<body>
  <script>
    //自作APIを通してデータベースから最新の光量を取得
    function getLatestLightValue() {
    var hostUrl= 'https://api.com/light';
        $.ajax({
            url: hostUrl,
            type:'GET',
            dataType: 'json',
            timeout:10000,
        }).done(function(data) {
          changeBackgroundColor(data['light']);
        }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
          console.log("error");
        });
    }

    //光量に応じて、背景色を変える。
    function changeBackgroundColor(latestLightValue) {
        var whiteBlack = (400 - latestLightValue) / 400;
       if (whiteBlack > 1){
         whiteBlack = 1;
       }else if (0 > whiteBlack){
         whiteBlack = 0;
       }

       var f = chroma.scale();

       document.body.style.background = f(whiteBlack);
     }

     getLatestLightValue() //初回

　　　//二回目以降はSocket.ioで光量を取得。10秒ごとに取得→背景色変化が繰り返し実行される。
     var socket = io('https://socketio.api.com/');
     socket.on('connect', function(){});
     socket.on('light', function(data){
       changeBackgroundColor(data['light']);
     });
  </script>
</body>
<html>
```

#コンセプト
・・・・・・・・・は**常に纏えるアイドル**をコンセプトとして、アイドルの生体情報を使ったアプリケーションを製作してきました。

##HeartSync
アイドルのリアルタイム心拍に合わせて、スマートフォンが震えるアプリ「HeaetSync」

iPhone版はこちらからダウンロード
[https://itunes.apple.com/jp/app/heartsync/id1005443024](https://itunes.apple.com/jp/app/heartsync/id1005443024)

Android版はこちらからダウンロード
[https://play.google.com/store/apps/details?id=com.awakiman.hbclient](https://play.google.com/store/apps/details?id=com.awakiman.hbclient)

![](http://i.imgur.com/uHJnYCs.png)

##ねむりオブジェ
アイドルの睡眠データを3Dプリンタでオブジェ化した、「ねむりオブジェ」

[アイドルの睡眠データを3Dプリンタでオブジェ化して日本武道館で展示する](http://qiita.com/a-r-i/items/908fbe2ced42734335f3)

![ねる前の・ちゃん](http://i.imgur.com/b3mYfyo.png)

![折れ線グラフになった睡眠データ](http://i.imgur.com/hBWNvxI.png)

![](http://i.imgur.com/17LKhNW.jpg)

##SheareHouse/SheareRoom

SheareHouse/SheareRoomではアイドルの肉体から半歩離れて、彼女が住んでいる家の光量という「生活環境」をユーザーに届けます。

目的は、**アイドルそのものから、アイドルが暮らしている日常へと、ユーザーの愛着の対象をスライドさせること**です。
「アイドルを好きでいたら、いつの間にか彼女が生きている世界すらも愛するようになっていた」というような。

そのために、「ステージに立っている時間よりも、それ以外の時間のほうが長い」という当たり前の前提から出発し、それ以外の時間、つまり、**アイドルの人生そのものを同期することにしました。**

劇場でしか会えないライブアイドルから、24時間身にまとえるライフアイドルへ。
振りコピから、生き方のコピーへ。

[アイドルの家の光量に連動して背景色が変わるWebサイト](https://dots.tokyo/SheareHouse/SheareRoom)
[https://dots.tokyo/SheareHouse/SheareRoom](https://dots.tokyo/SheareHouse/SheareRoom)