MacでArduinoさん.紫外線がどれくらい降り注いでいるかをTweetさせてみる.

id:hoimeiさまがArduinoRubyを使って簡単にTweetできるとおっしゃっていたのでちょっとやってみました.
ただ,紫外線量の計算がめんどくさかったんだけれども...
それでは作り方.

材料:紫外線センサ(G5842:浜松ホトニクス
   Arduino(ワタシのはArduinoProMiniの3.3vなので,USBをつなげるための)
   USBのケーブル(アタシの場合はミニと普通の)
   ネットワークにつながったPC(ワタシの場合はMacOSXバージョン10.5.6)
   その他G5842さんを使うときに必要な抵抗やらコンデンサやら.今回はブレッドボードさんも.
参考:id:hoimeiさんの「小鳥にtweetしていただく」.ほとんどこれ見て作りました!!ありがとうございます!!
   http://www3.ocn.ne.jp/~kumitate/uvmt.htm の回路図的なものを参考に作りました.

1.紫外線センサをArduinoにつないでみる.

回路はhttp://www3.ocn.ne.jp/~kumitate/uvmt.htm を参考に.
ここの計算がめちゃくちゃ大変でした.って,まあ,ちゃんと理解してない紫外線センサだったもので,どう計算していいかわからなかったってことなんだけれども..とにかく,計算はめんどくさかったので省略.
センサのアノードをanalog0に接続します.
写真とか後でまたアップしておこう.

2.Arduinoのプログラムを書いてみる.
めちゃくちゃ簡単.たったこれだけ!ArduinoさんがUSB経由でシリアル通信します.
プログラムは以下(TweetUV.pde)

//Maki Nakagawa
//read UV for Skincare
//20091017
//AnalogPin
int uvsensorPin = 0;

//value
int uvsensorValue = 0;

void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.println("now, i read UV");
  uvsensorValue = analogRead(uvsensorPin);
  Serial.println(uvsensorValue);
}


3.Rubyで書いてみる.
なぜRubyにしたかというと,ググるといっぱい出てきたから!という単純な感じなのですが...とにかく簡単でした.Rubyで書いている部分自体は.
rb-rubygemsとtwitter4r,ruby-serialportが必要です.
プログラムは以下.(twitter.rb)

シリアルポートはArduinoツールバーのTools>SerialPortで指定してあるのを書いてしまえばOK.

#Maki Nakagawa
#http://d.hatena.ne.jp/hoimei/20090911

require 'rubygems'
gem( 'twitter4r', '>=0.3.1' )
require 'twitter'
require 'serialport'


def generateMessage
messages = ["今日こそ夜更かしはやめましょう.",
			"今は太陽出てないもん.そりゃあ紫外線も出てないよー.",
			"今日もSいお研には人がいっぱいいるよー.@ikisaki_kun は信じちゃダメだよー.",
			"毎日研究室にいると飽きるなぁ..紫外線もなかなか出ないし..",
			"実は紫外線て窓を通ると30パーセントくらい減るんだよ.やっぱ室内がいいよね!",
			"目に入る紫外線が一番肌に悪いんだよー.サングラスが最高の味方だーね☆",
			"秋になったし、美白美容液どれにしようかなぁ..",
			"紫外線は10時から3時が一番強いんだよー.知ってた?",
			"そういえば最近akari-tanみてないなぁ.何してるんだろう.."]
msg = messages[rand(messages.size)]
return msg
end

#シリアルポートを指定
port = "/dev/tty.usbserial-*****" 

sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE)

#10個の値の平均をとる
$val = 0
for i in 0..9
  $val = $val + sp.gets.to_i
end
$val = $val/10

#p $val

#つぶやき
if($val > 38)
	$message = "UVインデックス13以上:今の紫外線量は日本で観測できる紫外線量としては最高レベルです."
elsif($val > 35)
	$message = "UVインデックス12:紫外線考えられないくらい強い!今の紫外線量は日本でまれに見る高さです."
elsif($val > 32)
	$message = "UVインデックス11:紫外線極端に強い!WHOは11以上を危険と言っています."
elsif($val > 23)
	$message = "UVインデックス8〜10:紫外線すーっごく強い!日中の外出はなるべく控えて!"
elsif($val > 17)
	$message = "UVインデックス6〜7:紫外線強め!外に出るならできるだけ日陰を利用してね☆"
elsif($val > 8)
	$message = "UVインデックス3〜5:紫外線は中程度.外に出てもいいけど,紫外線のことも気にかけてね?"
elsif($val > 2)
	$message = "UVインデックス1〜2:紫外線は弱め.安心して外に出ていいよー."
else
  $message = generateMessage
end

p $message

begin #ログインIDとパスワード
client = Twitter::Client.new(:login=>"name", :password=> "***")
client.status(:post, $message)
rescue
end

4.Tweetさせてみる.
実行します.実行.
$ ruby twitter.rb
しゃべってくれます.id:hoimeiさんの言う通り,tweetさせることはとっても簡単でしたー.ははは☆

5.cronして定期的にtweetさせる.
情報弱者のワタシにとって,cronなんて敷居が高すぎてなかなか踏み込めない領域だったのだけど,やってみました.

$ crontab -e

まずはPATHを書き込む.
PATH=/opt/local/bin:/opt/local/sbin/:$PATH
MANPATH=/opt/local/man/:$MANPATH
ワタシの設定が悪いのだろうけれど,ターミナルから実行するときはPATHが通っているようなのだが,cronだと通っていないらしい.ややこしすぎてアタシにはどーしよーもなさそうだったのだけれども,これ書いたらなんとか動きました.

で,繰り返す時間とか設定.
*/30 6-18 * * * ruby Users/admin/Documents/twitter.rb

6.動いています!
(写真はテスト中なのでいっぱいつぶやいていますが,実際はそんなにつぶやきません.)

とっても簡単!でも,Twitterって,1日に何度も同じことつぶやけないんですよね...なので,つぶやかないことが多々あって悲しい..そこらへんをどうにかしないとダメダメですなぁ..
でもまあ,そこはまた今度..