差分

提供: fukudat.net
ナビゲーションに移動検索に移動
11,168 バイト追加 、 2020年5月24日 (日) 15:29
ページの作成:「[http://www.blackcatsystems.com/GM/products/GM10GeigerCounter.html GM-10]は[http://www.blackcatsystems.com/ Black Cat Systems]が販売しているwiki-ja:ガイガー...」
[http://www.blackcatsystems.com/GM/products/GM10GeigerCounter.html GM-10]は[http://www.blackcatsystems.com/ Black Cat Systems]が販売している[[wiki-ja:ガイガーミュラーカウンタ|ガイガーミュラーカウンタ]].[[Category:How-To]]

計測結果は60分ごとに[http://twitter.com/mita_rad Twitter bot]が呟き中.<strike>また[http://www.fukudat.com/gm10/realtime リアルタイムデータ]と[http://www.fukudat.com/gm10/history 履歴データ]それぞれをグラフとして[http://www.fukudat.net/gm10 公開中].</strike>

== オーダーから入手まで ==

* [[Diary/2011/5/4|2011年5月4日]]: 製品ページの"Buy Now"ボタンを押してオーダーを試みると,在庫切れの表示.入荷待ちしたい人はメールしろというので,メールしてみる.すぐに backorder list に入れたという返事が来る.
* [[Diary/2011/5/18|2011年5月18日]]: メールで若干の在庫があるからオーダーできるという連絡が届く.メールに添付されていたURLからUSBモデルのGM-10をオーダー.PayPal決済で本体価格 $249.00,送料が $39.13.
* [[Diary/2011/5/20|2011年5月20日]]: 出荷したとのメールが届く.
* [[Diary/2011/5/25|2011年5月25日]]: 航空郵便で物が届く.関税 500円と通関手数料200円を郵便配達員に支払って受け取る.

== Install ==
ハードウェアの設定は本体にシリアル-USB変換ケーブルを取り付け,USBをPCにつなぐだけ.今回はLinux (Ubuntu Server 10.04.4) に接続. 2個目のシリアルデバイスなので,/dev/ttyUSB1 として認識される.

稼働確認のため[[ckermit|kermit]]でつないでみる.
<pre>
$ kermit
C-Kermit> set line /dev/ttyUSB1
C-Kermit> set speed 57600
C-Kermit> set stop-bits 1
C-Kermit> connect
</pre>
すると画面に読めない文字が表示される.動作しているようだ.

もしつながらなかったら /dev/ttyUSB1のパーミッションを調べる.

=== 準備 ===
GM-10を読むデーモンを動かすUnixユーザを作成する.
<pre>
$ sudo adduser --system gm10
</pre>

=== デバイス ===

デバイスがttyUSB0になるかttyUSB1になるかはタイミング依存で,ブートするたびに変わってしまう可能性がある.
それでは不便なので,[[udev]]を使って固有の名前がアサインされるようにすべき.

/etc/udev/rules.d に 80-ttyUSB.rules というファイルを作り,そこにルールを記述する.ルールの書き方は[http://www.reactivated.net/writing_udev_rules.html ここ]を参照し,ルールに使える条件は以下のコマンドで調べる.
<pre>
$ udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB1) | less
</pre>
ここで /dev/ttyUSB1 は調べたいデバイスの名前.

あくまで例だが,USB物理ポート番号で識別する場合は以下のようになる.
<pre>
SUBSYSTEM=="tty",KERNELS=="4-2",SUBSYSTEMS=="usb",SYMLINK+="nas04-console"
SUBSYSTEM=="tty",KERNELS=="7-2",SUBSYSTEMS=="usb",SYMLINK+="gm10-1",OWNER="gm10",MODE="0660"
</pre>
ここで
* 1行目は(GM-10とは関係ない)シリアルデバイス.ポート4-2につながっているデバイスを選択して,
** /dev/nas04-consoleというシンボリックリンクを作っている.
* 2行目がGM-10のシリアルデバイス.ポート7-2につながっているデバイスを選択して,
** /dev/gm10-1というシンボリックリンクを作り,
** オーナーを"gm10"というユーザに変更し,
** パーミッションを 0660 (-rw-rw----) に設定している.

物理アドレスだとUSBの配線に依存するので,ATTRS{modalias}とかを使って選択すべきかもしれない.

実は "/dev/gm10-1" というようなお尻が数字で終わるネーミングは重要.下で設定するドライバがそういう名前でないとだめなようにできているから.

=== Linux Driver ===
Linuxサーバーにつないで使うので,Linux用ドライバを準備.

必要そうな前提ソフトをゲット
<pre>
$ sudo apt-get install mysql-client libmysql++-dev
</pre>

* http://mathias.bavay.free.fr/software/gm4lin/ から最新版のtarballをゲット
* 適当なディレクトリで展開
* バイナリが同梱されていてそのまま動くが,MySQLサポートがdisableされているので,Makefileに以下のパッチを当てる
<pre>
*** Makefile.orig 2011-04-14 18:07:12.000000000 +0900
--- Makefile 2011-05-26 02:30:51.000000000 +0900
***************
*** 23,33 ****
#LIB_GETTEXT=-lintl

#comment the following 5 lines to disable my_sql support
! #MYSQL_LIBS= -lmysqlclient -lz
! #MYSQL_CFG=/usr/bin/mysql_config
! #MYSQL_LIBS=-L'/usr/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm
! #MYSQL_INCLUDES=-I'/usr/include/mysql'
! #SQL_DECLARE=-D SQL_LIBS

#for "buggy" implementations of sigaction
#BUGGY_SIGACTION=-DBUGGY_SIGACTION
--- 23,33 ----
#LIB_GETTEXT=-lintl

#comment the following 5 lines to disable my_sql support
! MYSQL_LIBS= -lmysqlclient -lz
! MYSQL_CFG=/usr/bin/mysql_config
! MYSQL_LIBS=-L'/usr/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm
! MYSQL_INCLUDES=-I'/usr/include/mysql'
! SQL_DECLARE=-D SQL_LIBS

#for "buggy" implementations of sigaction
#BUGGY_SIGACTION=-DBUGGY_SIGACTION
***************
*** 44,50 ****
OPT_OK=-ffast-math -fomit-frame-pointer -finline-functions -fexpensive-optimizations
OPTIMISATIONS=$(OPT_OK) $(OPT_TEST)
#available architectures
! INTEL_PENTIUM=-march=i586 -maccumulate-outgoing-args -DCPU=586 -malign-double #this is for pentium
ULTRA_SPARC=-mcpu=v8 -fdelayed-branch -m32 #-m64 #this is for Ultra Sparc
POWERPC_G4=-mcpu=powerpc -mtune=7400 -maltivec -mabi=altivec
ARM_XSCALE=-mcpu=xscale
--- 44,50 ----
OPT_OK=-ffast-math -fomit-frame-pointer -finline-functions -fexpensive-optimizations
OPTIMISATIONS=$(OPT_OK) $(OPT_TEST)
#available architectures
! INTEL_PENTIUM=-maccumulate-outgoing-args #this is for pentium
ULTRA_SPARC=-mcpu=v8 -fdelayed-branch -m32 #-m64 #this is for Ultra Sparc
POWERPC_G4=-mcpu=powerpc -mtune=7400 -maltivec -mabi=altivec
ARM_XSCALE=-mcpu=xscale
</pre>

* コマンドラインで mysql のパスワードを渡すことになるのだが,それが ps コマンドや /proc から丸見えになる.それを避けるために initializations.c にパッチを当てる.
<pre>
*** initializations.c.orig 2011-04-14 18:08:06.000000000 +0900
--- initializations.c 2017-01-29 12:26:00.768340144 +0900
***************
*** 278,283 ****
--- 278,286 ----
return EXIT_FAILURE;
}
sscanf(argv[i],"%s",settings->sql_password);
+ /* destroy password in argv[i] */
+ for (char *p = argv[i]; *p; p++)
+ *p = 'x';
continue;
}
#endif
</pre>

* ビルドする
<pre>
$ make clean
$ make
</pre>

* /usr/local/bin にコピーする
<pre>
$ sudo cp -p gm4lin /usr/local/bin
</pre>

=== MySQLの設定 ===
* mysqlにexperimentデータベースを作成する
<pre>
$ mysqladmin -u root -p create experiment
</pre>

* mysqlのexperimentデータベースにradiationテーブルを作成する
<pre>
$ mysql -u root -p experiment
mysql> create table radiation (device tinyint, dose double, data double, dataunits varchar(3), stamp timestamp);
</pre>

* mysqlにアクセスするユーザを作る
<pre>
$ mysql -u root -p experiment
mysql> grant all privileges on *.* to 'USER'@'localhost' identified by 'PASSWORD';
</pre>
USER と PASSWORD は適当に指定.後で使う.

=== ドライバのデーモン化 ===

* ディレクトリ /etc/gm4lin を作る.
* /etc/gm4lin/gm4lindを以下の内容で作る.必要に応じて変数定義や起動オプションを変更する.
<pre>
#!/bin/bash
### BEGIN INIT INFO
# Provides: gm4lind
# Required-Start: $remote_fs $syslog $all
# Required-Stop:
# Should-Start: mysqld
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Run gm for linux (gm4lin) as a daemin
### END INIT INFO
. /lib/lsb/init-functions

RETVAL=0
DRIVER=/usr/local/bin/gm4lin
DAEMON_UID=120 # gm10のUID

MYSQL_HOST=localhost
MYSQL_USER=`cat /etc/gm4lin/mysql.user`
MYSQL_PASS=`cat /etc/gm4lin/mysql.password`
MYSQL_DATA=$MYSQL_USER@localhost:experiment:radiation

case "$1" in
start)
log_daemon_msg "Starting $DRIVER radiation detectors driver"
$DRIVER --device /dev/gm10- \
--number 1 --start 1 --no-file-log \
--mysql $MYSQL_DATA --passwd $MYSQL_PASS \
--uid $DAEMON_UID \
--daemon --syslog
RETVAL=$?
;;

stop)
log_daemon_msg "Stopping $DRIVER radiation detectors driver"
kill -TERM `pidofproc $DRIVER`
RETVAL=$?
;;

restart)
$0 stop
$0 start
RETVAL=$?
;;

status)
pidofproc $DRIVER >/dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
log_success_msg "$DRIVER is runnning"
else
log_failure_msg "$DRIVER is not running"
fi
;;

*)
printf "Usage: $DRIVER {start|stop|restart|status}\n"
exit 1
esac

exit $RETVAL
</pre>

* /etc/gm4lin/mysql.user と /etc/gm4lin/mysql.password に上で決めたMySQLのユーザ名とそのパスワードを書いてセーブする.他人に読めないようにする.
<pre>
$ sudo chown root.root mysql.user mysql.password
$ sudo chmod 600 mysql.user mysql.password
</pre>

* /etc/gm4lin/gm4lind へ /etc/init.d からシンボリックリンクを張る
<pre>
$ cd /etc/init.d
$ sudo ln -s /etc/gm4lin/gm4lind .
</pre>

* 最後に gm4lind をアクティブにする.
<pre>
$ sudo sysv-rc-conf gm4lind on
</pre>

ちゃんと動いたかどうか /var/log/daemon.log で確認.

== Graph化 ==
数値はCPM (count per minute) なので,Sv/hに変換したい.Cs137でキャリブレーションされた値が http://www.blackcatsystems.com/GM/converting_CPM_mRhr.html にある.要するに CPM を 120 で割れば μSv/h になる.

<strike>
直近の24時間分をgnuplotを使って[http://www.fukudat.com/gm10/recent-graph.png グラフ化]. Twitter botが呟くタイミングでperl scriptを使ってグラフ生成している.

dojo toolkit を使って[http://www.fukudat.com/gm10/realtime/ リアルタイムグラフ]と[http://www.fukudat.com/gm10/history/ 履歴グラフ]を作成.
</strike>

== Twitter bot化 ==
[[PerlによるTwitter botの作り方]]に従って,<strike>30分ごとに放射線量を呟く [http://twitter.com/#!/machida_rad twitter bot @machida_rad]を作成.</strike>
その後,管理人の引越しに伴い,[http://twitter.com/mita_rad @mita_rad]に移動.

呟き方は[http://twitter.com/#!/nihonbashi_rad @nihonbashi_rad]を真似っこ。

== 参考文献 ==
* [http://www.blackcatsystems.com/ Black Cat Systems] | [http://www.blackcatsystems.com/GM/products/GM10GeigerCounter.html GM-10]
* [http://www.fukudat.net/gm10 計測結果のグラフ]
* [http://twitter.com/#!/mita_rad ツイッターbotの呟き]

案内メニュー