ということで、ジャンパピンがでっぱってケースに入らないことがあるので、
2008年5月12日月曜日
2008年4月28日月曜日
PSoC書き込み器またまたあらわる


2008年4月12日土曜日
100ccで100g (転載というか移動)
2008年4月11日金曜日
Power Gainer (またまたGainer 互換機)


Gainerとrubyとtwitter (あるいはタンジブルなtwitter)


#!/usr/bin/ruby
#
# Twitter Button
#
require 'rubygems'
gem 'twitter'
require 'twitter'
gem 'gainer'
require 'gainer'
## setting for User account
id = "UserName"
pass = "password"
tc0 = Time.now - 80
tc1 = tc0
tc2 = tc0
tc3 = tc0
tcb = tc0
twit = Twitter::Base.new(id,pass)
gainer = Gainer::Serial.new(ARGV.shift)
puts "Ready.\n waiting buttun..."
gainer.on_pressed = proc do
puts 'Button pressed'
if (Time.now - tcb > 60 ) then
tcb = Time.now
fri = twit.followers()
fnum = fri.size
friend = fri[rand(fnum)].screen_name
puts "#{friend} SUGOI..."
twit.update("@#{friend} スゲー!w by XXX ")
end
end
loop do
sleep(0.1)
gainer.peek_digital_input
case gainer.digital_input[0]
when 1
puts "GET 1"
if (Time.now - tc0 > 60 ) then
tc0 = Time.now
puts "Give me COFFEE..."
twit.update("珈琲プリーズ だれかプリーズ")
end
when 2
puts "GET 2"
if (Time.now - tc1 > 60 ) then
tc1 = Time.now
# fri = twit.friends()
fri = twit.followers()
fnum = fri.size
friend = fri[rand(fnum)].screen_name
puts "#{friend} SUGOI..."
twit.update("@#{friend} スゲーョ!")
end
when 4
puts "GET 3"
if (Time.now - tc2 > 60 ) then
tc2 = Time.now
puts "I'm Sleepy..."
twit.update("ねむい中")
end
when 8
puts "GET 4"
if (Time.now - tc3 > 60 ) then
tc3 = Time.now
puts "Give me FOOODDDD..."
twit.update("はらへり、ヘリハラ")
end
else
## puts "NODATA"
end
end
2008年3月31日月曜日
gainer clone (互換機)でサーボを動かす
LEDばかりでは面白くないのでgainer を使ってラジコン用のサーボを動かしてみることにした。このサーボモータはもともとはラジコン自動車、飛行機などでつかわれていたが、最近ではロボコンブームのおかげでその基幹パーツとして多種大量に供給されるようになってきている。
一般的なラジコン用サーボモータはアナログのPWM信号によって移動角を制御している。基準として 1msecから2msecのパルス幅を投入すると、その幅に応じた角度にサーボモータの軸が回転する。これを周期的に与えてやることでその角度を維持したり、動作角度を変更したりすることが出来る。ロボットの場合には、この周期をどこまで早められるか、応答速度や、トルクといったメカトロてきな要素が非常に重要になるのだが、インタラクションデザインのためのサーボにはそこまでの精度は要求されないのが一般的だ。今回はgainerのアナログ出力が実際には電圧変化ではなく、PWM信号を用いていることを利用し、サーボモータの駆動を試してみることとする。
アナログサーボには個体差があるので、両端のぎりぎりの部分を使うためには、それぞれのサーボに応じたパルス幅を調べる必要がある。Aout(0) にサーボの信号線を繋ぎ込んで利用する前提で作成したコードは以下のとおり。
コントロールなしのダイアモンドカーソルでサーボの稼働角を調整できる。 E/X で 5ステップづつS/D で1ステップずつの稼働となっている。
コンソールに現在の数字が出るので幅を記録していこう。一般的な安いサーボモータは最大と最小で180度前後の回転角を得ることができる。Analogoutが最大で8ch までとることが出来るので、8個のサーボなら同時に動かすことが出来るはずだ。ただしその場合には、電力が足りなくなると思われるので、サーボ駆動の電源を別途用意する必要があるだろう。
手元のサーボで試し
たところパルス幅が 8から30程度ということで 180度を20分割程度にはできるようだ。回転角がシビアな用途でない、見せるための作品であれば十分に実用的な範囲だと考えられる。
import processing.gainer.*;
Gainer gainer ;
int i ;
void setup() {
gainer = new Gainer(this) ;
frameRate(5) ;
i = 20 ;
}
void keyPressed() {
switch(key) {
case 'x':
i -=5 ;
break ;
case 'e':
i +=5 ;
break ;
case 's':
i -- ;
break ;
case 'd':
i ++ ;
break ;
default:
}
}
void draw() {
gainer.analogOutput(0,i) ;
println("NOW: " + i + "..." ) ;
}
ラベル: gainer, Processing, 作ってみた
2008年3月12日水曜日
Gainer Clone でwebcamを操作する
前回はハードウェアをブレッドボード上にならべて満足したので次は簡単な実装としてgainer備え付けのボタンを押すとシャッターが切れてwebcamから写真がとれる、というものをつくってみた。基本的にはボタンだけでは面白くないがこのボタンを光電センサやドアの開け閉めに連動させればパソコンのキーボードを押してwebcamを操るのとは違うことができるはずだ。単純にボタンだけであっても長いUSBケーブルさえ用意すれば、レリーズのように遠隔でシャッターをおすことも可能だ。玄関のドアやブースの外側といったところにカメラをむけてセンサーをおけば、監視カメラとしての役割くらいは十分にこなせる。
コードは非常に簡単で写真を撮るためのcaptureオブジェクトの read をボタンが押されたときのハンドラに登録し画面に表示するだけだ。ほとんど何の処理もしていないが、サンプルコードは以下に示す。撮られた画像は画面に表示するだけなので、セーブが必要ならばそのようなルーチンを書き足す必要がある。
動作確認は OSX10.5 で内蔵の isight をつかって行った。カメラとgainerがうごけばwindowsでも動作するだろう。
この発展であるセンサーのアナログ値を使ったカメラの駆動はまた後ほどということで。
/*
capture by button
*/
import processing.gainer.*;
import processing.video.*;
Gainer gainer ;
Capture cam ;
void setup() {
size(320,240) ;
frameRate(24) ;
background(0) ;
cam = new Capture(this,320,240) ;
gainer = new Gainer(this) ;
delay(100) ;
cam.read() ;
}
void draw() {
if ( gainer.buttonPressed ) {
cam.read() ;
}
image(cam,0,0) ;
}