• このエントリーをはてなブックマークに追加
ウォシュレット実況bot
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

ウォシュレット実況bot

2013-01-11 14:01
    ウォシュレット実況bot

    今回はKeiさんのブログ『Eleclog.』からご寄稿いただきました。

    ※すべての画像が表示されない場合は、http://getnews.jp/archives/282655をごらんください。

    ■ウォシュレット実況bot
    ウォシュレット実況bot
    (画像が見られない方は下記URLからご覧ください)
    http://px1img.getnews.jp/img/archives/toilet_1.jpg

    お家のトイレからプライバシーが吹き飛ぶ日がやってきました。

    事の発端は以下のツイート

    mattn@mattn_jp

    便器からツィートが流れだすまであと少し / “人間とウェブの未来 - mruby-oauthでmrubyからtwitterを操作” htn.to/sXuVQq

    https://twitter.com/mattn_jp/statuses/286111916768763905?tw_i=286111916768763905&tw_e=permalink&tw_p=tweetembed

    2013年1月1日

    きくちゃん@kikuchan98

    トイレ流すリモコンの信号を受信すればすぐ実現出来そう。大小の区別も…。 QT @mattn_jp: 便器からツィートが流れだすまであと少し / “人間とウェブの未来 - mruby-oauthでmrubyからtwitterを操作” htn.to/sXuVQq

    https://twitter.com/kikuchan98/statuses/286113933297844225?tw_i=286113933297844225&tw_e=details&tw_p=tweetembed

    2013年1月1日

    きくちゃん@kikuchan98

    トイレのリモコン、押された時刻や種別が蓄積されてたらヤだな…

    https://twitter.com/kikuchan98/statuses/286116494113390592?tw_i=286116494113390592&tw_e=details&tw_p=tweetembed

    2013年1月1日

    このツイートに触発されて、Arduino + Ethernet Shield + 赤外線リモコン受信モジュールで作ってしまったのが上記写真。

    実際のツイートはこんな感じ。(一部)

    OverClocQ@9GHz

    トイレを流しました(大)

    https://twitter.com/9GHz/statuses/287525034040385536?tw_i=287525034040385536&tw_e=details&tw_p=tweetembed

    2013年1月5日

    OverClocQ@9GHz

    トイレを流しました(小)

    https://twitter.com/9GHz/statuses/287531617243766784?tw_i=287531617243766784&tw_e=details&tw_p=tweetembed

    2013年1月5日

    OverClocQ@9GHz

    おしりやわらか洗浄中(*´ω`*)

    https://twitter.com/9GHz/statuses/287531691034161152?tw_i=287531691034161152&tw_e=details&tw_p=tweetembed

    2013年1月5日

    OverClocQ@9GHz

    おしり洗浄中( ´_ゝ`)

    https://twitter.com/9GHz/statuses/287539945571225600?tw_i=287539945571225600&tw_e=details&tw_p=tweetembed

    2013年1月5日

    という具合。

    我が家のTOTOのウォシュレット、そのリモコンから送信されるコードを赤外線受信モジュールでキャッチし、押されたボタンを判別してツイートします。

    使用したのはArduino UNO、Ethernet Shield、赤外線リモコン受信モジュール (PL-IRM2121)*1の3つ。

    配線を簡略化する為に、5番ピンを赤外線モジュールとの通信、6番ピンをGND、7番ピンをVccにしています。

    *1:「赤外線リモコン受信モジュール PL-IRM2121(38kHz)」 『秋月電子通商』
    http://akizukidenshi.com/catalog/g/gI-01570/

    まずは、リモコンが送信しているコードの取得。

    6.1ミリ秒のON、2.9ミリ秒のOFFに続いて、0.6ミリ秒、0.5ミリ秒間隔でON、OFFを繰り返し、1.5ミリ秒のOFFが間に何回か入ります。

    Excelに起こすとこんな感じ。

    ウォシュレット実況bot

    (画像が見られない方は下記URLからご覧ください)

    http://px1img.getnews.jp/img/archives/toilet_2.jpg

    左上:流す(小)、左下:流す(大)、右上:おしり、右中:やわらか、右下:ビデ

    最初の6.1ms、2.9msはリモコン毎に異なる送信開始の合図リーダ部で、その後がデータ部となっている。

    ここで、ON時間を無視してOFF時間だけ抽出し、1.5ミリ秒以上のOFF時間を1、0.5ミリ秒のOFF時間を0とすると

    010000000001000000000001011000010110000:大

    010000000001000000000001000100010001000:小

    010000000001000001011001000000010101100:おしり

    010000000001000001011001010100010000100:やわらか

    010000000001000001011000100000001101100:ビデ

    010000000001000101010101101101001110000:ストップ

    という風に表すことができる。

    あとはこれを条件分岐し、それぞれにあったツイートをpostさせればOK。

    プログラムは、こちら*2やこちら*3やこちら*4を参考にしつつ、以下のような感じで。

    *2:「NECフォーマットの赤外線リモコン・フォーマット [共通]」 『RENESAS』
    http://japan.renesas.com/support/faqs/faq_results/Q1000000-Q9999999/mpumcu/com/remo_012j.jsp

    *3:「赤外線通信の実験2(赤外線リモコンを送信器にして何か動かす) 」 『きむ茶工房ガレージハウス』
    http://www.geocities.jp/zattouka/GarageHouse/micon/InfraredCOM/InfraredCOM2.htm

    *4:「twitter Library」 『ARDUINO PLAY GROUND』
    http://playground.arduino.cc/Code/TwitterLibra

    #include

    #include

    #include

    #define IR_INPUT 5

    byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //Ethernet ShieldのMACアドレス

    byte ip[] = { 192, 168, 1, 123 }; //IPアドレス

    Twitter twitter("/* 取得したトークン */");

    char msg[256];

    void setup()

    {

    Ethernet.begin(mac, ip);

    Serial.begin(9600);

    pinMode(IR_INPUT,INPUT);

    pinMode(6,OUTPUT);

    pinMode(7,OUTPUT);

    digitalWrite(6,LOW);

    digitalWrite(7,HIGH);

    }

    void loop()

    {

    unsigned long time = 0;

    int i , cnt;

    char buf[64];

    if (digitalRead(IR_INPUT) == LOW) {

    time = micros();

    while (digitalRead(IR_INPUT) == LOW) ;

    time = micros() - time;

    }

    if (time>= 6100) {

    i = 0 ;

    while(digitalRead(IR_INPUT) == HIGH) ;

    while (1) {

    while(digitalRead(IR_INPUT) == LOW) ;

    time = micros() ;

    cnt = 0 ;

    while(digitalRead(IR_INPUT) == HIGH) {

    delayMicroseconds(10) ;

    cnt++ ;

    if (cnt>= 1200) break ;

    }

    time = micros() - time ;

    if (time>= 10000) break ;

    if (time>= 1500) buf[i] = (char)0x31 ;

    else buf[i] = (char)0x30 ;

    i++ ;

    }

    if (i != 0) {

    buf[i] = 0 ;

    checkCode(buf) ;

    }

    }

    }

    void checkCode(String code)

    {

    code = code.substring(15,37);

    Serial.println(code);

    if (code.equals("0000000010110000101100")){

    strcpy(msg,"トイレを流しました(大)");

    postTweet();

    }

    else if (code.equals("0000000010001000100010")){

    strcpy(msg,"トイレを流しました(小)");

    postTweet();

    }

    else if (code.equals("0010110010000000101011")){

    strcpy(msg,"おしり洗浄中( ´_ゝ`)");

    postTweet();

    }

    else if (code.equals("0010110010101000100001")){

    strcpy(msg,"おしりやわらか洗浄中(*´ω`*)");

    postTweet();

    }

    else if (code.equals("1010101011011010011100")){

    strcpy(msg,"洗浄ストップ(`・ω・´)");

    postTweet();

    }

    delay(100);

    }

    void postTweet()

    {

    Serial.println("connecting ...");

    if (twitter.post(msg)) {

    int status = twitter.wait();

    if (status == 200) {

    Serial.println("OK.");

    }

    else {

    Serial.print("failed : code ");

    Serial.println(status);

    }

    }

    else {

    Serial.println("connection failed.");

    }

    }

    使用用途として、お通じの公開処刑記録、おじいちゃん・おばあちゃんの生存確認などが挙げられるようですが、流す度にプライバシーも流れていきます。

    ●追記:噴射時間もツイートするようにしてみた。

    OverClocQ@9GHz

    洗浄ストップ(`・ω・´) 噴射時間10秒

    https://twitter.com/9GHz/statuses/287625369891270656?tw_i=287625369891270656&tw_e=details&tw_p=tweetembed

    2013年1月6日

    unsigned long washTimeを宣言して、

    else if (code.equals("0010110010000000101011")){

    washTime = millis();

    strcpy(msg,"おしり洗浄中( ´_ゝ`)");

    postTweet();

    }

    else if (code.equals("0010110010101000100001")){

    washTime = millis();

    strcpy(msg,"おしりやわらか洗浄中(*´ω`*)");

    postTweet();

    }

    else if (code.equals("1010101011011010011100")){

    washTime = millis() - washTime;

    sprintf(msg,"洗浄ストップ(`・ω・´) 噴射時間%d秒",(int)(washTime/1000));

    postTweet();

    }

    こんな感じで。

    執筆: この記事はKeiさんのブログ『Eleclog.』からご寄稿いただきました。

    ■関連記事

    au 版iPhoneがデータ通信不能に! 「データ通信機能を起動できませんでした」

    【ソフマップ】相武紗季似のグラビアアイドル萌木七海のDVDジャケットとの差が凄い!

    マクドナルド“60秒キャンペーン”について店員が評判や裏技を大胆激白! バイト「やめて」「無理!」の悲鳴

    コミックマーケット83 やっぱりあった『どうぶつの森』のしずえさん同人誌!

    関東JKミスコン 「ローラ越え宣言」の準グランプリの女子高生が新年早々飲酒を暴露

    RSSブログ情報:http://getnews.jp/archives/282655
    チャンネル会員ならもっと楽しめる!
    • 会員限定の新着記事が読み放題!※1
    • 動画や生放送などの追加コンテンツが見放題!※2
      • ※1、入会月以降の記事が対象になります。
      • ※2、チャンネルによって、見放題になるコンテンツは異なります。
    ブログイメージ
    ガジェ通
    更新頻度: 毎日
    最終更新日:
    チャンネル月額: ¥550 (税込)

    チャンネルに入会して購読

    コメントを書く
    コメントをするにはログインして下さい。