プログラム: Arduino IDE + Ruby (twitter4r, serialport)

Arduino IDE 0017】

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);
}


センサからの情報を垂れ流しにしている様に見えますが, そこはArduinoさんが,きちんと制御していて, PC(サーバ)側からの受信信号が来たときにしかAnalogInの情報を送信してこないです. ArduinoIDEのメニューバーの Tool>Board Tool>Serial Port で,Arduino基盤とシリアルポートの指定ができます. クロスコンパイル(⌘R)して,USB経由でArduinoさんに送って(⌘U)おきます. Ruby with rubygems, twitter4r and serialport】 Mac OS X 10.5.7上で動かしています. 以下の3つを使って,Arduinoさんからの信号を投稿します. インストール $ sudo port install rb-rubygems $ sudo gem install twitter4r $ sudo gem install ruby-serialport プログラムはこんな感じ.

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