植木鉢をtwitter bot化するハック
超ほしかった
植物と話せるPlant Twitterキット - Engadget 日本版
これを買えば植木鉢がtwitter botになる!ほしい!
しかしThinkGeekで$99.99... いくら円高とはいえ、ちょっと気が引けるお値段。
というわけで作ってみた。
Water me!とThank you!しか言わない元祖に比べたらなんと愛らしいことよ。
ちなみに元祖ページはこちら。
Botanicalls » Kits
Arduino使ってるので実は回路もコードも公開されてるのです。XPortでLAN直結する感じですね。
でも今回は研究室常駐のポニョ(デンマークカクタス)をtwitさせるのが目的なので、遊んでいたMac miniを使うことにします。
- 植木鉢の抵抗値読む
- 抵抗値が大きい(つまり水が少ないと)
- "Water me!"
ちなみに席替えにより窓際から離れてしまったので、XBeeで無線化してやりました。
XBeeも誰にも使われずに研究室で眠っていたのを活用。これぞ技術の無駄遣い?
Mac miniにXBee
XBee便利。ふつうにシリアル叩けば無線になっている。
Arduino側のコード
int val;//受信データ用の変数を用意 int com; //コマンド用変数 void setup(){ Serial.begin(9600); } void loop(){ if(Serial.available()>0){ //データが来たら com = Serial.read(); //シリアルを読む if(com==97){ // 'a'コマンドが来たときだけ10回抵抗値を読んで返す for(int i=0;i<10;i++){ val = analogRead(0); Serial.println(val); } } } }
Mac mini側
Rubyでやってます。
twitter4rとruby-serialportが必要。
require 'rubygems' require 'twitter' require 'serialport' def generateMessage messages = ["ぽにょ、あまいのがすきー", "キラッ☆", "ポニョ、光合成するー", "足っていいな かけちゃお!", "あの子がだーいすーきー", "ニモっていいな食べちゃお", "セガール,爆破,すきー", "ポニョ、@iwkn すきー", "ずっとポニョのターン!"] msg = messages[rand(messages.size)] return msg end #シリアルポートを指定 port = "/dev/tty.usbserial-******" sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE) sp.putc "a" #read serial values #10個の値の平均をとる $val = 0 for i in 0..9 $val = $val + sp.gets.to_i end $val = $val/10 #p $val #つぶやき if($val > 500) $message = "Water me!" else $message = generateMessage end #p $message begin client = Twitter::Client.new(:login => "name", :password => "password") client.status(:post, $message) rescue end
あとはこいつをcronで定期的に実行する。実世界botもわりと簡単ですね。