小鳥にtweetして頂く
最近,twitterとかいうもので,人間ばかりがtweet(さえずる)しているので,
ここは本場の小鳥であるクルッポー(本名:Finko)にtweetして頂きました.
センサを使ってクルッポー(Finko)さんの状態からTweetします.
材料:
- 鳥
- センサ(シャープ測距センサ[GP2Y0A21YK])
- Arduino
- USB A-Bケーブル
- ネットワークにつながったPC
参考:
id:iwkn さんのponyoV3 (@ponyoV3) | Twitterを参考にさせていただきました!
rubyのrequireでは,id:takahiroxさんのtwitter4r を使用した twitter client for ruby - やる気のないはてだ(A boring diary)を参考にしました!
ありがとうございます.
装置: Arduino + センサ
今回,センサは,シャープ測距センサ[GP2Y0A21YK]を使いました.
10~80cmの対象物の位置を検出することができます.
電源とグラウンドとAnalog Outputだけの簡単接続です.
Arduinoさんの5V電源とGNDとANALOG INの0番に接続します.
これで,籠の中のどの位置にいるかわかる!!
便利〜.
スイッチサイエンスでケーブルつきのものが売っていたのですが,
完売中なので,秋月でモジュールを購入して個別にコネクタケーブルを購入するのがお勧めです.
400円~980円では購入できます.
Arduinoは,電気電子系が苦手な人でも簡単に扱える基盤とソフトウェアとのシステムです.
基盤自体は,スイッチサイエンスやAmazonで購入できます.USB A-Bケーブルを使ってサーバ(PC)に接続します.
ソフトウェア開発は,ProcessingベースのArduino IDEとrubyを使ってます.
プログラム: Arduino IDE + Ruby (twitter4r, serialport)
Arduinoさんに,USB経由でシリアル通信するためのプログラムです.
twiSendData/twiSendData.pde /* Cyber Finko in Arduino IDE 0017 published by hoimei and CyberFinko!, 2009.09.10 http://d.hatena.ne.jp/hoimei http://twitter.com/cyberFinko Background Material: http://d.hatena.ne.jp/iwkn/20090322 */ int val;//送信データ用の変数を用意 void setup(){ Serial.begin(9600); } void loop(){ val = analogRead(0); Serial.println(val); }
|
---|
Teet.rb # Cyber Finko # published by hoimei and CyberFinko!, 2009.09.10 # http://d.hatena.ne.jp/hoimei # http://twitter.com/cyberFinko # Background Materials: # http://d.hatena.ne.jp/iwkn/20090322 # http://d.hatena.ne.jp/takahirox/20090505/1241525041 #!/usr/bin/ruby require 'rubygems' gem( 'twitter4r', '>=0.3.1' ) require 'twitter' require 'serialport' def generateMessage messages = ["ピョ・・", "ピョ・・", "モフッ.", "ピョ!ピョピョッ!", "外に出たいなぁ."] msg = messages[rand(messages.size)] return msg end #シリアルポートを指定 port = "/dev/tty.usbserial-A6004cl0" #Arduinoさんで指定したポート $ls /dev/tty.*で探せます. sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE) #sp.puts "a" #read serial values #p sp.gets #10個の値の平均をとる $val = 0 for i in 0..9 $val = $val + sp.gets.to_i # $val = $val + sp.read.to_i # p $val end $val = $val/10 #p $val #つぶやき #距離が近いと,Analog Inの値が大きくなります. if($val > 500) $message = "センサーが気になる." elsif($val > 400) $message = "羽繕いしているよ." elsif($val > 300) $message = "休憩中・・・zzZZZ" elsif($val > 200) $message = "お水のんでいます." elsif(50>$val) $message = "ご飯食べてます.豆おいしいです." else $message = generateMessage end p $message begin #ログインIDとパスワードを忘れずに・・・ client = Twitter::Client.new(:login=>"name", :password=> "**") client.status(:post, $message) rescue end
|
---|