ブログからツイッターへの、このクロスポストが、44,444ツイートめである。
注文しといたプリンターが届く https://t.co/m2eLCzOfOY
— 佐藤俊夫 (@SatoToshio) December 28, 2015
実は他に、以前は「ボット」などを作っていたので、その分も多少あるのだが、いやほんと、商売にもカネにもならんことに、労力費やしてるよなあ、俺。
あと11,111ツイートすると、55,555ツイートなワケね。
オッサンは生きている。
ブログからツイッターへの、このクロスポストが、44,444ツイートめである。
注文しといたプリンターが届く https://t.co/m2eLCzOfOY
— 佐藤俊夫 (@SatoToshio) December 28, 2015
実は他に、以前は「ボット」などを作っていたので、その分も多少あるのだが、いやほんと、商売にもカネにもならんことに、労力費やしてるよなあ、俺。
あと11,111ツイートすると、55,555ツイートなワケね。
キリスト教では人はどこまでも人であって、神にぬかづきかしずく弱い存在でしかないが、仏教の菩薩とは、仏たらんとして努力精進中の「人」のことであって、人が仏たらんとすることは仏教ではなんら不自然なことではなく、かつ可能なことである。
— 佐藤俊夫 (@SatoToshio) November 28, 2010
コラコラコラコラコラーッ!お前ら、待てーーッ(笑)。
@AllTrendNewsさんの6 時間前のツイートです。女子高生「天皇誕生日おめでと あんま絡みないけど」 今年もフランクに祝われる な.. – みんなのコメントを見て会話に参加してみましょう。
情報源: ハッシュタグ #天皇クラスタと繋がりたい
@jackjijiさんのツイート(https://twitter.com/jackjiji/status/679265344913956864?s=09)をチェック
さえずり季題【257】は(冬初め)です。明日は立冬、暦の上では早くも冬の到来。あたたかくして参りましょう。例句『冬初め遊覧船のすべる音 長崎桂子』 #saezuriha_odai #saezuriha #jhaiku #kigo pic.twitter.com/Q3t7Wld0DK
— 平坂謙次 (@hedekupauda) November 6, 2015
@Akane_anさんのツイート(https://twitter.com/Akane_an/status/652634709491494913?s=09)をチェック
@jackjijiさんのツイート(https://twitter.com/jackjiji/status/639741499740065792?s=09)をチェック
黙々と呟き続ける我が作品、「ネット便器」である。いや、便器そのものを作ったのはINAX社であるから、私の作品と言うこともあるまいが、まあ、こんな下品かつ無意味なものを作ることができるのもDIY、というかMAKERS精神なればこそ、である。
俺は佐藤宅の便器だ。今フタが閉まった。 便所の気温は 31.35 ℃だ。 5828354
— 佐藤家の物 (@SatoGoods) August 9, 2015
ちなみに、こういう手作りは、数年前からDIYとは言わず、Makersムーブメントと言うようになったのだそうな。DIYとの違いは、ざっくり言えばネットのあるなしである。
それにしても、暑い。暑熱である。秋とは暦ばかり、なんて暑いんだ。
私の家には温度計がないのだが、今日のような折ふし、たまさかには室温が知りたくもなる。知ったところで「うわっ32度だってよ余計に暑くなったゾなんてこったいッ!」などとうわ言のようにうそぶきつつ興奮する以外にないのだが、それでもやっぱり知りたいのである。
エアコンのリモコンに設定温度とは別に温度計がついており、一応それで用は足りているのだが、1℃単位のザックリした温度計なので、不満である。
こんなこともあろうかと、私こと佐藤は常々周到怠りない。我が作品「ネット便器」は、気温をツイートできるのだ!!トイレに行き、便器のフタを開け閉めしてから部屋に戻り、ツイッターを見ると、自宅の気温がだいたいわかるわけである。おお、なんとスンバラシイ。Arduino万歳。とっとと内紛やめて楽しくやろうぜベイベー!!
……。
めんどくさい。
だいたい、気温ぐらいその場でわかるようにすべきではなかったのか。便器のフタを開け閉めしてツイッター見なきゃ気温が分からん家なんて、どうなっとるんだ一体ッ!?。ネット便器の本体に気温を表示すべきだ!!っていうか、なんで便所で気温を測らねばならんのだ!!
というわけで、発作的に自宅を飛び出し、向かったのは八潮の秋月電子である。
「どうして近所の100円ショップで温度計を買わんのだ?」という愚問は禁止の方向でお願いしたい。
秋葉原に行けばよいのだが、自宅からは八潮の秋月電子のほうが近いのである。それに、秋葉原の秋月電子は、人でごった返して足の踏み場がなく、店頭で品定めをする余裕が全くない。八潮の秋月電子は空いているので、店内でのんべんだらりとデータブックを読みながら部品を選ぶことも可能である。
目当ては、日立「HD44780」という液晶ドライバの、互換ICを搭載した液晶ディスプレイである。大概の液晶ディスプレイは、この30年も前に開発された名作IC互換になっているのである。
他に、7セグメントLEDで気温を表示させることも考えたが、実は思いのほか、Arduinoでの表示に限っては液晶ディスプレイのほうがラクなのだ。7セグメントLEDは簡素なだけに意外に奥が深く、多くの桁を表示させるためのダイナミック点灯やその明るさ補償、足りない電流を他の電源から持って来るなど、やることが多い。
さて、秋月電子八潮店である。
店内にはズラリと液晶ディスプレイが並んでいる。手ごろなところで、バックライト付きの液晶ディスプレイ、「SD1602 HUOB-XA」という型番のものを購入した。900円。
他に、後で遊ぶためにアノードコモンの7セグメントLEDを買う。これは例の「TLC5940NT」に接続して遊ぶのである。ひとつ60円。
それから、切らしてしまったQIコネクタのピン端子も買う。シースが見当たらないので、店員さんに「これのシースありませんか」と聞くと、ハウジングのことですか?この端子にはハウジングみたいなものはありませんよ、と答えるではないか。うーん。秋葉原の千石電商なら、左奥の抽斗にザクザク入っているのだが、どうも、八潮の秋月電子にはないらしい。というか、実は八潮の秋月の店員さん、QIコネクタにはシースがあるってことを知らんのではなかろうか。
それはそれとして……。
帰宅して早速とりかかる。
製品はこういうものがビニール袋に封入されているので、付属のピンヘッダを半田付けする必要がある。ちょいちょいちょい、と素早い仕事だ。
ネットで情報を漁る。
あるサイトによると、基盤ウラの「J3」というプリントをショートし、「R9」というプリントに100Ωの抵抗を付けると、基盤の電源でバックライトが光らせられる、とあるので、早速真似をする。
ところが、他の回路とともに作動させてみると、どうも不安定である。バックライトの電流は、データシートによると40mAとある。電流を実回路で測定してみたところ、データシートに記載の値よりは少ないものの、37~38mAくらい流れていることが分かった。Arduinoで安心して流せるのは20mAまでなので、これはどうも過大かもしれない。Arduinoは50mAくらいまで流すことができるが、余裕は十分にあったほうがよいだろう、ということで、R9に取り付けた100Ωのジャンプ抵抗は取り外した。
液晶ディスプレイのみ単体ならば余裕はあるものの、他の回路を接続するのであれば外部電源で点灯した方が良いように思われる。
で、データシートと、Arduino IDEの「サンプルスケッチ」の中にある「LiquidCrystal」のコメントを参考にブレッドボードを結線する。ブレッドボードには「Seeedstudio SIDEKICK BASIC KIT」に入っていたサーミスタを、1kΩの抵抗とともに取り付けてアナログ1番ピンに入れる。
スケッチはこんなふうにゴリゴリと書いて、動けとばかりArduinoに注入し、荒い息を吐く。
// // thermistor2LCD.ino // サーミスタで気温を測り、LCDに表示する。 // 佐藤俊夫 // 27.08.09(日) 1900~ // #include <stdio.h> #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); const int THERMISTOR = 1; void setup() { lcd.begin(16, 2); pinMode(THERMISTOR, INPUT); } void loop() { char tempStr[16], dispStr[32]; lcd.setCursor(0, 0); dtostrf(tempMesure(), 5, 2, tempStr); sprintf(dispStr, "Temp. %s C", tempStr); lcd.print(dispStr); delay(500); } // float tempMesure(){ const float B = 4350.0, Ta = 25.0, Rt0 = 50000.0; // MF11-503Kスペックシート記載 const float K = 273.15; // 熱力学温度の定数 const float v0 = 5.0, r0 = 1000.0; // Arduino +5Vと電流調整抵抗1kΩ const int resolution = 1024; // アナログ入力の分解能 int srcVal = 0; float vt = 0.0, rt = 0.0; srcVal = analogRead(THERMISTOR); vt = srcVal * (v0 / (resolution - 1)); rt = (v0 * r0 - vt * r0) / vt; return(1.0 / (log(rt / Rt0) / B + 1.0 / (Ta + K)) - K); }
こうして、液晶ディスプレイに気温が表示できるようになった。
時代はIoTである。モノをネットに接続することは、もはや正義を通り越して神の啓示であるとすら言えるほどだ(笑)。
やろうやろうと思ってやっていない一事はこのことだ。すなわち、「Arduino」を使用して、直接モノにツイートさせること、これである。モノがツイートするのはきっと面白いに違いない。
「Twitter Arduino」あたりで検索すると、ライブラリが出てくる。今回はこれ(Tweet Library 1.3)をありがたく使わせていただく。
さて、そうと決まれば何をネットに接続するか、である。ここはやはり、自宅の便器をネットに接続するという、これを一度やってみるべきであろう。
やはり、IoT時代であるから、便器もネットにつないでやらなければ面白くないだろう。便器だって平等に扱ってやらねば、他の物品との差別感を覚えてひがむようになり、性格が曲がってしまうかもしれない。このように性格の歪んだ便器は、人間様が用を足すときに局部に噛みついてくるようなことが万に一つはないとも限らない。便器にも時々はインターネットと会話をさせてやるべきだ。
とりあえず、便所のフタの開閉を検知するため、「チルトスイッチ」を使用する。
これは、傾けるとスイッチが入るというもので、Arduinoを買ったときに一緒に買った「Seeedstudio SIDEKICK BASIC KIT」というセットに入っていたものだ。
回路は簡単である。下図のように、行儀よく10kΩほどプルダウンしておけば誤動作は少ない。
スケッチのほうは、ライブラリの導入に多少手間取った。使用させていただいた「Tweet Library」は、「ETHERNET SHIELD」のほうに対応しており、私が持っている「ETHERNET SHIELD 2」にはそのままでは対応していない。
基本的にヘッダファイルのインクルードを「#include <Ethernet.h>」から「#include <Ethernet2.h>」に書き換えるだけでいいのでは、と思ったのだが、どうもうまくいかない。さっぱりお手上げだったのだが、いろいろといじくりまわしているうち、エラーメッセージをよく見てみると、「クラスの2重定義」という意味のエラーが出ていることがわかった。なぜか、「libraries\Ethernet2\srcの下にあるやつと重なっている」みたいなメッセージが出ている。ハテ、とライブラリのあるディレクトリを見てみると、「libraries\Ethernet2\src」の下に、なぜか「Twitter.h」と「Twitter.cpp」がある。
なんだかわかんないけどいいや、消しちゃえ!と、それをぞんざい適当に消したら、うまくコンパイルできるようになった。しかし、そのことで5~6時間ほどハマッてしまった。
ETHERNET SHIELD 2とプロトタイプシールドを、先日買った「継ぎ足しピンヘッダ」を介して積み重ね、次のようにしていつもの100円ショップのアクリル枠にねじ止めする。
手前に緑色のチルトスイッチが取り付けられていることがわかるだろう。
Twitterに専用アカウントをとり、Tweet Libraryの説明にしたがってトークンを取得する。専用アカウントは、その名も「佐藤家の物」である(笑)。
それから、スケッチを次のように書く。
// // つぶやき便所 tweetToilet.ino // 27.08.08(土) 1000~ // 佐藤俊夫 // チルトスイッチで便所のふたの動きを検出し、呟かせる。 // #include <SPI.h> #include <Ethernet2.h> #include <Twitter.h> #include <stdio.h> // byte MAC[] = { 0x90, 0xA2, 0xDA, 0x0F, 0xF6, 0x74 }; IPAddress IP(192, 168, 1, 129); Twitter TWITTER("hogehogehoge-hagehagehagehage......"); // トークン const int TILTSW = 9; // void setup() { pinMode(TILTSW, INPUT); delay(1000); Ethernet.begin(MAC, IP); delay(1000); } void loop() { static int tiltSwStatus = LOW, prevStatus = LOW; int i = 0; tiltSwStatus = tiltSw(); if(tiltSwStatus != prevStatus){ prevStatus = tiltSwStatus; tweetMsg(tiltSwStatus); delay(1000); }else{ ; } } // int tiltSw(){ // チルトスイッチの読み取りを安定させるため、100回連続して同じ値が返るまで読む。 int i = 0, prevStatus = LOW, nowStatus = LOW; prevStatus = digitalRead(TILTSW); do{ nowStatus = digitalRead(TILTSW); if(nowStatus == prevStatus){ i ++; }else{ i = 0; } prevStatus = nowStatus; }while(i < 100); return(nowStatus); } // void tweetMsg(int tiltStatus){ const char openMsg[] = "%e3%82%84%e3%81%82%e3%80%82%e4%bf%ba%e3%81%af%e4%bd%90%e8%97%a4%e5%ae%85%e3%81%ae%e4%be%bf%e5%99%a8%e3%81%a0%e3%80%82%e4%bb%8a%e3%83%95%e3%82%bf%e3%81%8c%e9%96%8b%e3%81%84%e3%81%a6%e3%81%84%e3%82%8b%e3%80%82", // 'やあ。俺は佐藤宅の便器だ。今フタが開いている。' closeMsg[] = "%e4%bf%ba%e3%81%af%e4%bd%90%e8%97%a4%e5%ae%85%e3%81%ae%e4%be%bf%e5%99%a8%e3%81%a0%e3%80%82%e4%bb%8a%e3%83%95%e3%82%bf%e3%81%8c%e9%96%89%e3%81%be%e3%81%a3%e3%81%9f%e3%80%82"; // '俺は佐藤宅の便器だ。今フタが閉まった。' char tweetStr[256]; if(tiltStatus == HIGH){ sprintf(tweetStr, "%s \r\n %ld", openMsg, millis()); // Twitterは同じ文字列を繰り返し書き続けられないので、起動時間を付けて書き、重複を防ぐ。 }else{ sprintf(tweetStr, "%s \r\n %ld", closeMsg, millis()); } TWITTER.post(tweetStr); TWITTER.wait(); }
うまく動くようになったら、ホット・グルーでプロトタイプを便器のフタに取り付ける。
便所にLAN工事を施しておしまいだ。
上記動画のように便器のふたを開け閉めすると、やおら便器が次のように呟きだすのである。
やあ。俺は佐藤宅の便器だ。今フタが開いている。
49360— 佐藤家の物 (@SatoGoods) August 8, 2015
俺は佐藤宅の便器だ。今フタが閉まった。
31517— 佐藤家の物 (@SatoGoods) August 8, 2015
「ETHERNET SHIELD 2」でTwitterに投稿しようとすると、よく知られているライブラリがそのままでは使えないということがわかり、呻吟する。
しかしまあ、所詮ウェブであるから、TCP/IPソケットさえあれば、低いレイヤから積み上げることでツイートはできるだろう。
……それをやる気があるかどうかの問題だな。うーん。どうしよう。