ウォシュレット実況bot

access_time create folder生活・趣味
ウォシュレット実況bot

今回はKeiさんのブログ『Eleclog.』からご寄稿いただきました。
※すべての画像が表示されない場合は、https://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.』からご寄稿いただきました。

  1. HOME
  2. 生活・趣味
  3. ウォシュレット実況bot
access_time create folder生活・趣味

寄稿

ガジェット通信はデジタルガジェット情報・ライフスタイル提案等を提供するウェブ媒体です。シリアスさを排除し、ジョークを交えながら肩の力を抜いて楽しんでいただけるやわらかニュースサイトを目指しています。 こちらのアカウントから記事の寄稿依頼をさせていただいております。

TwitterID: getnews_kiko

  • ガジェット通信編集部への情報提供はこちら
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。