横恋慕無月に隠す男かな 佐藤俊夫 #kigo #jhaiku #haiku #saezuriha (季語は「月」)
— 佐藤俊夫 (@SatoToshio) September 25, 2015
タグ: Twitter
月
さえずり季題【251】旧暦の八月ですから、「月」を詠みましょう。今日は旧十四日で「待宵」、明日は「名月」、あさっては「十六夜」です。今秋から来週にかけて、月ばかり詠めますよ。 やはらかき身を月光の中に容れ 桂信子 #saezuriha_odai #saezuriha #kigo
— 佐藤俊夫 (@SatoToshio) September 25, 2015
松茸
「https://twitter.com/hashtag/saezuriha_odai?s=09」の検索結果をチェックしよう
鶏頭
@jackjijiさんのツイート(https://twitter.com/jackjiji/status/639741499740065792?s=09)をチェック
ヘこき虫
さえずり季題【247】 ヘこき虫 傍題に亀虫。ホソクビゴミムシ科の甲虫。体長二.五センチほど。黒地に黄色の紋がある。身を守る為、危難にあうと悪臭を放つ。 「御仏の鼻の先にて屁ひり虫」 一茶 #saezuriha #saezuriha_odai
— 萬屋万吉 (@mankichiyorozuy) August 28, 2015
サルビア
さえずり季題【246】サルビア 傍題に緋衣草。花壇を彩るブラジル原産のポピュラーな花、 和名の緋衣草は花を衣に見立てたものです。 さあご一緒に♪いつもいつも思ってたサルビアの花を~ 青春にサルビアの朱ほどの悔い 岩岡中正 #saezuriha #saezuriha_odai
— さとう みちこはん (@burukosan) August 21, 2015
暑熱をばひとつ
黙々と呟き続ける我が作品、「ネット便器」である。いや、便器そのものを作ったのは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); }
こうして、液晶ディスプレイに気温が表示できるようになった。
よっしゃ便所の
……何しろ暑いので、思いついて、今度はサーミスタを取り付け、便所の温度をも便器に報告させることにした。
俺は佐藤宅の便器だ。今フタが閉まった。 便所の気温は 27.88 ℃だ。 1627489451
— 佐藤家の物 (@SatoGoods) August 8, 2015
回路図は今度もごく簡単である。
現在のスケッチは下のとおりだ。
// // つぶやき便所 tweetToilet2.ino // 27.08.08(土) 1900~ // 佐藤俊夫 // チルトスイッチで便所のふたの動きを検出し、呟かせる。 // 温度を定期的に報告させるよう機能追加。 // #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("取得したトークンをここに書く。"); // トークン const int TILTSW = 9; const int THERMISTOR = 1; const unsigned long int TEMPINTERVAL = 1000 * 60 * 5; // ミリ秒単位で5分 // void setup() { pinMode(TILTSW, INPUT); pinMode(THERMISTOR, 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){ 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", // "俺は佐藤宅の便器だ。今フタが閉まった。" tempMsg1[] = "%e4%be%bf%e6%89%80%e3%81%ae%e6%b0%97%e6%b8%a9%e3%81%af", // "便所の気温は" tempMsg2[] = "%e2%84%83%e3%81%a0%e3%80%82"; // "℃だ。" char tweetStr[512], *openCloseMsg = "", tempStr[16]; if(tiltStatus == HIGH){ openCloseMsg = openMsg; }else{ openCloseMsg = closeMsg; } dtostrf(tempMesure(), 5, 2, tempStr); sprintf(tweetStr, "%s \r\n %s %s %s\r\n%ld", openCloseMsg, tempMsg1, tempStr, tempMsg2, millis()); // Twitterは同じ文字列を繰り返し書き続けられないので、起動時間を付けて書き、重複を防ぐ。 TWITTER.post(tweetStr); TWITTER.wait(); } // 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); }
立秋
さえずり季題【244】は「立秋」です。二十四節気の一つで、旧暦七月の初め、現在の新暦で言うと8月8日前後。暦の上では秋となり手紙も「暑中御見舞」から「残暑御見舞」に。「秋たつや川瀬にまじる風の音」(飯田蛇笏)皆様ご自愛ご健吟。 #saezuriha #saezuriha_odai
— June,born in Apr. (@no_ra_co) August 8, 2015
ネット便器
時代は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