2009-12-02[n年前へ]
■Ruby版 Thinkpad 加速度センサ類取得クラスを書きました
Lenovo(旧IBM)のノートPC ThinkPad にはハードディスク保護を目的として、加速度センサが付いています。SSDを搭載している機種でも、(その他のハードウェアは共通化されているからだろうと思いますが)やはり加速度センサが付いているということです。
以前、C++でThinkpad加速度センサ類取得クラスを作りましたが(このC++コードを眺めてみると、不要な部分が残っていたので、その点については後で修正します)、今回はRubyでそのクラスを組んでみました。作成したRubyソースは、ここに置きました(accelerometer.rb)。ソース最下部には、使用方法もコメントアウトした上で付けておきました。また、このバージョンはC++バージョン同様、最近のThinkpadでも動く実装になっています。
読みやすさのために改行を適当に入れたソースは、下記のようになります。
# jun hirabayashi jun@hirax.net 2009.12.02
class Accelerometer
require 'Win32API'
attr_accessor :x
attr_accessor :y
attr_accessor :temperature
attr_accessor :presentState
def initialize
begin
@sensorFunctionAPI=Win32API.new("Sensor",
"ShockproofGetAccelerometerData", ['P'], 'V')
@buffer=' '*17
if @sensorFunctionAPI.Call(@buffer)
parse(@buffer)
@offsetX=-@latestRawAccelDataX.to_i;
@offsetY=-@latestRawAccelDataY.to_i;
end
rescue
'We have some problem.'
exit!
end
end
def parse(result)
@presentState,@latestRawAccelDataX,@latestRawAccelDataY,
@latestAccelDataX,@atestAccelDataY,@temperature,
@atestZeroG_X,@atestZeroG_Y=result.unpack("iSSSSCSS")
end
def getAccelerometerData
@sensorFunctionAPI.Call(@buffer)
parse(@buffer)
@x=@latestRawAccelDataX.to_i+@offsetX.to_i;
@y=@latestRawAccelDataY.to_i+@offsetY.to_i;
return [@x,@y]
end
end
このRubyクラスを使った加速度取得スクリプト例は、下記のようになります。ちなみに、Xが(ノートPCに向かって)左右方向で、Yが奥行方向になります。これで、1秒おきにThinkpadの傾斜をコンソール出力します。
require 'accelerometer' accelerometer=Accelerometer.new 10.times{ |i| puts accelerometer.getAccelerometerData.join(',') sleep 1 }
MA5授賞式で面白いものを作っている開発者を見たせいか、何か色々作ってみたくなります。4年ほど前には、この加速度センサテクニックを使って「「未来の立体ディスプレイ」を作る」とか色々作ったような覚えがありますが、まだまだ色々な応用がありそうな気がしてきました。というわけで、まずは準備のために、今日はRuby版 Thinkpad 加速度センサ類取得クラスを書いてみました。
2015-11-07[n年前へ]
■「クレジットカード約款」や「インク変更」とか「傾斜マンション」とか
クレジットカード手続き書類の重要項目欄が極小文字で印刷されてる。高さで0.7ミリくらい、ホチキスの針の先より少し大きい程度。20cmの距離から眺めたとすると、計算すると、(文字を24×24で表現すると)視力2.0が必須という計算に。
3:09 PM - 8 Nov 2015
横浜の傾斜マンションは10~12階建てで、建物間で2cmができたという。段差ができたのが高さ20〜30メートルくらいの地点とすると、建物の傾斜は2度強というところだろうか。…あれ?ピサの斜塔が4度くらいというのと比べると結構大きい?
6:22 PM - 3 Nov 2015
不思議なことが起きている。ボールペン、パイロット ハイテックCコレトの黒インクが切り替わりつつある。ここ1・2ヶ月前に買ったものは赤外線を吸収するのだけど、ここ1〜2週間中に買ったものは透けて見える。カーボンブラックを使わなくなった?
6:07 PM - 2 Nov 2015
手持ちペンで調べて見ると、Zebraのハイマッキーは赤外線を通さなくて、マッキーは赤外線を通す。…けれど、手持ちのハイマッキーはずいぶん古いから、これも最近のモデルでは違ったりするのかも…。
6:21 PM - 2 Nov 2015
引き出しに入ってたゼブラ、ハイマッキーは赤外線に不透明だけど、マッキーは赤外線に透明。時期が違うせいかと思いローソン100に買いに行ってみたら、今売っているものも同様だった。ということは、太くて「ハイ」が付くか否かで耐光性がずいぶんと違っていたりするのかも。
7:38 PM - 2 Nov 2015