OpenGeigerのGM-01AからUSB経由で値を得る
Open Geiger ProjectのガイガーカウンターGM-01AはUSBでコンピューターに繋がります。
ファームウェアがver1.2以降ならば、プログラム側からUSBでデータを取得できます。
GM-01Aをベースにした以下の機種(ファームウェアはver1.2以上)でも使えると思います(未確認)
Rubyから値を得ることが出来るようになったので、手順を残しておきます。
1. libusbとruby-usbをインストールする
Macの場合は、ruby-usbにちょっとしたパッチを当てないと入らないと思う。
参考 : http://www.jedi.be/blog/2009/11/11/ruby-usb-libusb/
2. rubyからlibusb経由でGM-01AのCPM値を得る
基本的には以下のようなRubyプログラムになります。USB_CONTROL_MSGで「0x01」を送るとCPM値を、「0x03」を送ると生のインターバルカウント値が得られます。
(GM-01A以外の互換機は idVendor == 0x20A0 とか idProduct == 0x4176 の部分が違うかも)
どのような値を送れば、どんなデータが返ってくるかは、OpenGeigerのファームウェアコード
の opengeigerfirmware1.20/common/usbprotocol/usbrequest.h のあたりに書いてあります。
3. 「0x01」を送ってGM-01A側で移動平均処理をしたCPM値を得る
require "usb"
# USBデバイスをオープンする
@device ||= USB.devices.select {|d| d.idVendor == 0x20A0 && d.idProduct == 0x4176 }.first
@handle ||= @device.usb_open
# GM01-A側で移動平均処理をしたCPM値を得るメソッド
def readcpm
data = "\0" * 2
ret = @handle.usb_control_msg(
USB::USB_TYPE_VENDOR | USB::USB_RECIP_DEVICE | USB::USB_ENDPOINT_IN,
0x01,
0,
0,
data,
5000
)
puts data.unpack('c')
end
# 10秒ごとに実行する
loop do
readcpm
sleep 10
end4.「0x03」を送って生インターバルカウント値を得る。
require "usb"
# USBデバイスをオープンする
@device ||= USB.devices.select {|d| d.idVendor == 0x20A0 && d.idProduct == 0x4176 }.first
@handle ||= @device.usb_open
# GM01-A側で移動平均処理をしないインターバルカウント値を得るメソッド
def readcps
data = "\0" * 2
ret = @handle.usb_control_msg(
USB::USB_TYPE_VENDOR | USB::USB_RECIP_DEVICE | USB::USB_ENDPOINT_IN,
0x03,
0,
0,
data,
5000
)
puts data.unpack('c')
end
# 1秒インターバルで値を得る
# 60秒で実行すれば移動平均処理をしない生のCPM値が得られる
loop do
readcps
sleep 1
end
仙台Ruby会議(Ruby親方会議)
仙台Ruby会議02に参加してきました。

仙台Ruby会議01に続いて今回もスタッフとしての参加、Ust中継を担当しました。
会場は仙台駅の近く、アエルの28F。高層階だからなのか、イーモバが不調でうまく映像と音声が流れていなかったかも。
次回は音声を綺麗に撮るためのマイクが必要そうですが、今回のように会場の音がたくさん入るのも楽しいかも。
テーマは「Rubyとビジネス」
私はRubyでプロダクツを作って大々的にリリースしたりはしてないですが、Webサイトに埋め込むCGIも、クライアントに使ってもらう便利グッズも、ほとんどRubyで作ります。私がやっているビジネスにはRubyの扱いやすさが丁度良いです。
後半のRuby親方会議のパネリストにも声をかけていただいていたのですが、今回はUstに専念。
すずりょってビジネス何してるの?謎の人と言われることも多いですが、私の組成としては半分が親方、半分が先生の成分で出来ています。
スタッフとして動くと、じっくり話を聞けなかったりするのですが、多くのRubyistの話を聞いて、さらにRubyが好きになりました。
Tenjinテンプレートエンジンで快適Web制作4
IWDD41で発表したTenjinテンプレートエンジンで快適Web制作3の続きエントリーです。
画像ファイルが沢山あるページの場合、srcやaltをそのままhtmlの中に書いても良いですが、yamlファイルで管理したりすると便利かも。
Tenjinテンプレートエンジンで快適Web制作3
IWDD41で発表したTenjinテンプレートエンジンで快適Web制作2の続きエントリーです。
Webサイトの原稿をもらうときに、ワードだったり、エクセルだったりすることがあるかと思いますが(><)、今回はエクセルファイルから直接ページを作ってみます。
まず、エクセルでこんなシートを作ります。シート名は「page1」、ファイル名は「data.xls」にしておきます。これがページの原稿になります。
data.xls
RubyのSpreadSheetライブラリを使って、エクセルのデータを直接読み込んでテンプレートの中に展開します。
Tenjinテンプレートエンジンで快適Web制作2
IWDD41で発表したTenjinテンプレートエンジンで快適Web制作の続きエントリーです。
TenjinをCGIから使う基本的な環境が出来たら、「header.html/body.html/footer.html」のパーツごとに分けてみます。
分割されたテンプレートファイルを読み込むには
<?rb import 'filename' ?>
を使います。
Tenjinテンプレートエンジンで快適Web制作
IWDD41で「Tenjinテンプレートエンジンで快適Web制作」として発表してきました。
VGAアダプタを忘れてプロジェクタに映せなかったので(><)、blogにコードを貼ってみます。
素のHTMLを何ページも手書きしたくない、CMSを入れる程でもない、DreamWeaverテンプレートでは物足りない。 デザイナーでもテンプレートエンジンを使いこなしたい。Rubyを使いたい。そんな人にお勧めです。
今年はもっとRubyを勉強しようと思っているので、Ruby用のrbTenjinを使ってデモを書きました。
IWDDで発表した内容は
- 基本的なTenjinの使い方
- ヘッダ、本文、フッタの3ファイルに分ける方法
- エクセルファイルからデータを読み込んでHTMLページ生成
- YAMLファイルからデータを読み込んでHTMLページ生成
- CGIのパラメータを受け取ってページの内容を変える
基本的なTenjinの使い方
テンプレートファイルの中で
- ${...}と書けばrubyの式を評価した結果が入る(HTMLエスケープ有り)
- #{...}と書けばrubyの式を評価した結果が入る(HTMLエスケープ無し)
- <?rb ... ?>でrubyの文を埋め込める
仙台Ruby会議01
仙台Ruby会議に参加してきました!私も一応実行委員としてUstreamでの生中継の担当をしていました。
当日の様子はUstreamで生中継され、録画映像は公開されています。ピークで最大同時接続数40人くらいがUstを見ていただいていたようです。
また、Ustとは別にバックアップ用に撮影しておいたHDVの編集が終わりましたので、こちらもUPしておきます。.mp4形式のファイルでサイズが大きいです。ローカルにダウンロードしてお楽しみ下さい。
GAINERと加速度センサとFunnelでKeynoteのスライドをめくる
1000speakers:7@仙台#1ではコミュニティー枠で東北のコミュニティーの紹介を話したんですが、それだけでは技術的な話がないので、GAINERと加速度センサとFunnelとRubyで、Keynote.appのスライドをめくるというのをデモしました。
GAINERのボタンを押すときに、加速度センサが載っているブレッドボードを
- 向こうに傾けると:スライドがスタート
- 手前に傾けると :スライドがストップ
- 右に傾けると :スライドが次へ
- 左に傾けると :スライドが戻る
という仕組みです。