エレクトロニクス関係


ここでは主に電子工作(ハンダゴテを使用して組み立てるもの)について取り上げます。

■目次

■はじめに

最初に作ったのは、小学生のころの夏休み、エレキットの「うそ発見器」だったように思います。この製品は現在も形を変え残っているようです。

まことくん(うそ発見器)
エレキット(イーケイジャパン)
http://www.elekit.co.jp/material/japanese_product_html/TK-724.php

他にも、効果音の出る基板のキットを組み立てて厚紙で作った鉄砲に組み込んだり、FMトランスミッタを蒲鉾板に貼り付けて放送局ごっこをして遊んでいました。
(こちらも当時とは随分変わっているものの現在も販売されているようです)

8色バトルサウンド
エレキット(イーケイジャパン)
http://www.elekit.co.jp/material/japanese_product_html/NT-18.php

FMミニワイヤレスマイク
エレキット(イーケイジャパン)
http://www.elekit.co.jp/material/japanese_product_html/NT-7.php

その後はそういう遊びからも離れ、中学生のとき技術家庭科(当時は男女別修でした。年がばれますね。)の授業でラジオを組み立てたのを最後にハンダゴテを使うこともありませんでした。


FMトランスミッタ。青いリード線がアンテナになっている。コイルのつまみをねじ回しで回すことで発信周波数を変えられる。
今思えば、これがここの放送機材1号機ということになるわけです

しかし、この10年でマイコンの急激な高性能・低価格化によって、当時とは比べ物にならないほど高度なことが出来るキットが安価に入手できるようになっていることに気が付きました。そうして再び電子工作を楽しむことになったのです。

↑目次に戻る

■電波時計キット Ver.2

販売 秋月電子通商
http://akizukidenshi.com/catalog/items2.php?p=1&q=K-00559

製造 トライステート
http://www.tristate.ne.jp/

雑誌に、PCに接続できる電波時計自作キットなるものが紹介されていたので、早速買ってきて作ってみました。

Ver.2になって本体部とアンテナ部の基板が分離できるようになり、設置の自由度が増しました。本体部とアンテナ部の接続にLANで使われるケーブルを使用していますが、LAN(イーサネット)機器ではないので、間違ってもPCやハブにつないではいけません。

回路としてはアンテナで受信した電波をPICマイコンでデコードして時刻を求めるようになっています。

実際に動かしてみると、動作はするものの肝心の電波を全然受信できないようです。

インジゲータを見ると、ノイズをいっぱい受信してしまい本来の信号を見つけられないようです。

元々持っていた普通の電波時計は問題なく電波を受信できているのに…。

組み立て方が悪くてうまく受信できないのか、本当に電波状態が悪いのか分からないので困ってしまいます。

アンテナの角度によっては受信ランプが点灯することもあるので回路自体は正常のようですが…。しばらく様子見です。


電波時計 表示部
電波時計 アンテナ部

その後アンテナの置き場所を工夫することで電波を受信し、時刻を合わせることができました。

ただこのキットはケースが無く、基板むき出しなので、設置に困る面があるのも事実。そこで、このキットをケースに入れることを考えてみました。

当初は市販されているケースに取り付ければよいと思っていたのですが、このキットはコネクタ(電源・アンテナ延長・RS-232C)・スイッチが基板に直付けになっているため、ケースに取り付けようとするとかなり難しいことが分かりました。

で、結局行き着いたのが透明なアクリル版で挟むだけ、というシンプルな方法でした。 こうすれば基板に直付けになっているスイッチも押すことができるので便利です。

完成したものはこんな感じ。

このケース付きバージョンは、当時電波時計を欲していた両親にプレゼントし、私は再び基板むき出しの状態で使用しています。基板の四隅の穴にリングを付け、サーバーラックに吊り下げています。

このキットはRS-232Cポートが搭載されていてPCからモデムを使うのと同じ要領でアクセスし、時刻情報を取得できるようになっています。

そこで、このページを送出しているサーバーに接続し、山本道成さんのClock Keeperをインストールして自動的に時刻を合わせるようにしました。

下に表示されているのが、電波時計キットVer.2によって補正されたサーバーの現在時刻です。

Clock Keeper
http://nap.dip.jp/~michi/soft/ClockKeeper/

↑目次に戻る

■映像(ビデオ)分配キット

秋月電子通商
http://akizukidenshi.com/catalog/items2.php?p=1&q=K-00019

もともと市販の映像・音声分配器を使用していたのですが、キットなら安く上がるということで試しに組み立ててみました。

このキットの特徴としては組み立て時に配線を変えることでコンポジット4分配とS映像2分配に作り分けられることです。この仕様のためか、コネクタ類はACアダプタのものも含めてすべて別売りになっています。また、基板にはこれらを取り付ける穴は開いていないため、事実上ケースへの組み付けが必須となっています。


ケースへの取り付けは、まずスペーサを接着剤でケースに貼り付け、そこに基板をねじ止めした。

また音声の分配機能はありません。私の場合、AV機器の映像と音声はまったく別に配線しているためかえって都合のよい仕様でしたが、音声の分配が出来ないことが不便に感じられる場合の方が多いかもしれません。

↑目次に戻る

■ピックネットワークインターフェイスカードキット(PICNIC Ver.2)

販売 秋月電子通商
http://akizukidenshi.com/catalog/items2.php?p=1&q=K-00102

製造 トライステート
http://www.tristate.ne.jp/

このキットはどのように使うかを自分で考えることも1つの楽しみなのですが、基本的には汎用I/OポートをLAN経由で使用するためのボードです。PICNICにセンサーを接続してそれをLAN越しに読み出したり、逆にLAN越しにコマンドを送ってPICNICに接続した機器を操作するわけです。

製造元のトライステートよりPICNICを制御するためのPC用のライブラリが配布されていて、それを自分のプログラムに組み込むことで簡単にPICNICを制御できるようになっています。

そこで、PICNICの液晶ディスプレイに指定した文字列を表示するプログラムを独自に開発し、サーバーにメールが着信するたびに時刻と送信元アドレスをPICNICの液晶ディスプレイに表示するようにしています。

↑目次に戻る

■グラフィックLCD開発セット
■グラフィックLCD組み込みキット秋月電子通商
http://akizukidenshi.com/catalog/items2.php?p=1&q=K-00719
http://akizukidenshi.com/catalog/items2.php?p=1&q=K-00768電波時計キットやPICNICに搭載されている液晶ディスプレイ(LCD)がキャラクタ型と呼ばれ、文字コードを送ることで文字が表示されるのに対し、このグラフィックLCDは任意のドットパターンを表示できるものです。

そのかわり、フォントは内蔵されておらず、文字も絵として表示させる必要があります。

しかし、このキットではボード上のPICマイコンとEEPROMによってソフトウェア的にフォントの機能が実現されており、付属するCD-ROMに収録されているソフトを使ってキャラクタLCDのように使えるほか、EEPROMに50枚までのドットパターンを記録させておき、それらのパターンを好きな順序で表示させられるようになっています。

グラフィックLCD開発セットとグラフィックLCD組み込みキットはハードウェアには同じものですが、前者にはユニバーサル基板部分があり、自作の回路を載せられるようになっているのに対し、後者は全体がLCDより一回り大きい程度のサイズに収まっており、文字通り組み込みに適したキットになっています。


グラフィックLCD開発セット
グラフィックLCD組み込みキット

このキットもどう使うかはユーザー次第なのですが、MSX 2 の起動画面をEEPROMに書き込み、「似非1チップMSX」というネタにしてみました。その映像はこちら

↑目次に戻る

■AKI-PIC877ベーシック開発セット

秋月電子通商
http://akizukidenshi.com/catalog/items2.php?p=1&q=K-00169

BASICインタプリタが書き込まれたPICマイコンとそれを駆動させるためのマザーボード、さらにPC上でBASICプログラムを開発するためのツール一式がセットになっています。

バックライトなしの16×2キャラクタLCDが付属していますが、20×4キャラクタLCD(バックライトあり・なし)も使用可能できるようになっています。16×2と20×4のLCDは電源のピン配置が異なるため、通常は共用できないのですが、このマザーボードはジャンパを挿し変えることでピン配置を換えられるようになっています。

秋月の他のキットと違い、四隅に穴がなく、そのかわりに両面テープで貼り付けるゴム足が付属しています。しかし、そのゴム足を貼り付けるスペースも基板上には十分に確保されておらず、パターンの空いているところを見つけて貼り付けるしかなく、結果的にかなり変則的な位置に貼り付けることになります。

そこで、ヒロセテクニカルで買ってきた汎用の円形ゴム足を4つに切って、それを基板の四隅に貼り付けてみました。

標準添付のゴム足と比べると高さは半分以下ですが、基板上のピンが設置面に接触しない程度の高さはあるため、問題ありませんでした。

ヒロセテクニカル
http://www.hi-k.co.jp/

実際のプログラミング作業はすべてWindows上で行い、シリアルケーブルでボード側に送り込んで実行させます。

このBASICは独自のもので、microEngineering Labs(MEL)社の同名のPICBASICとはまったく別物です。

microEngineering Labs, Inc.
PICBASICTM Complier
http://microengineeringlabs.com/products/pbc.htm

プログラミング言語しては、旧式の行番号BASICと構造化BASICの中間的な感じです。BASIC言語の経験がある人なら当時の勘が生きるかもしれませんが、初めてのプログラミング言語にはあまり向かないかもしれません。

特にBASICならあって当たり前の文字列型変数がない(文字列リテラルは使用できる)ため、文字列を文字コードの配列として表現するというC言語のようなプログラミングが要求されるのが難点と言えます。

今回わざわざ20×4キャラクタLCDを取り付けたのは、メール発信元表示装置として使用しているPICNICの機能強化版として使おうとしたからです。

PICNICでは16×2のLCDしか使えないため、1行目にYYYY/MM/DD hh:mm形式で時刻を表示してしまうと、メールアドレスは16文字しか表示できません。

しかし、20×4なら時刻をYYYY/MM/DD hh:mm:ss形式で表示した上に、メールアドレスを60文字(末尾5文字分をカウンタ表示に充てるため実際には最大55文字)まで表示できます。

PICNICの時に作ったのと同じようなプログラムを開発し、サーバーにメールが届くたびにその時刻と発信元アドレス、さらに今回は前回カウンタをリセットしてから何通目の着信かを表すカウンタも表示するようにしました。

時刻とメールアドレスを含む文字列はPC側で生成してシリアルポート経由でボードに送り、カウンタはボード側で保持するようにしています。

PC側から文字列が送られてくるたびにカウンタを増やしていき、ボード上のタクトスイッチを押されると0に戻すようになっています。

今回作成したPIC-BASICのプログラムは次のようなものです。


Dim text(80) As Byte
Dim rcv As Byte
Dim idx As Byte
Dim TERM As Byte
Dim LCD_LEN As Byte
Dim LCD_X_LEN As Byte
Dim LCD_Y_LEN As Byte
Dim SPACER As Byte
Dim cnt As Word ' 回数
Dim len As Byte ' cntの桁数

TERM=1 ' ターミネータ

LCD_LEN=80
LCD_X_LEN=20
LCD_Y_LEN=4
'LCD_LEN=32
'LCD_X_LEN=16
'LCD_Y_LEN=2

SPACER=&H20
cnt=0

' 初期化
Initlcd  ' LCD初期化
Serclear ' シリアル入力初期化
tris_rd=0

main:
 Gosub waitSerIn
 Serclear ' シリアル入力クリア
 Clearlcd ' LCDクリア
 Homelcd  ' カーソル復帰
 For idx=0 To LCD_LEN-1
  Setpos idx Mod LCD_X_LEN,idx/LCD_X_LEN
  Putlcd chr$(text(idx))
 Next idx
 Gosub putCount
 Goto main

waitSerIn:
 For idx=0 To LCD_LEN-1
  text(idx)=SPACER
 Next idx
 idx=0

 loop:
  ' ボタンが押されていたらカウンタをリセット
  If rb.Bit0=0 Then
   Gosub calcLen
   For idx=0 To len-1
    Setpos LCD_X_LEN-1-idx,LCD_Y_LEN-1
    Putlcd " "
   Next idx
   idx=0
   cnt=0
   Gosub putCount
  Endif
  rcv=0
  Serin pb9600,1000,rcv
  rd=255-rcv
  If rcv<>0 And idxTERM Then
     text(idx)=rcv
     idx=idx+1
   Endif
  Endif
  If rcv<>TERM Then Goto loop
  ' カウンタを増やす
  If cnt>=65535 Then cnt=0 ' オーバーフロー防止
  cnt=cnt+1
 ' LED全消灯
 rd=&B11111111
 Return

calcLen:
 ' cntの桁数を求める
 '  If ~ Thenの行と、条件成立時の命令の行と、
 '  Endifの行は別の行にしないといけないようである。
 '  マルチステートメントという考え方がないようだ。
 len=1
 If cnt>=10 Then
  len=2
 Endif
 If cnt>=100 Then
  len=3
 Endif
 If cnt>=1000 Then
  len=4
 Endif
 If cnt>=10000 Then
  len=5
 Endif
 Return

putCount:
 Gosub calcLen
 ' LCDの右下にcntの値を表示
 Setpos LCD_X_LEN-len,LCD_Y_LEN-1
 Putlcd cnt
 ' カーソルを右下に移動
 Setpos LCD_X_LEN-1,LCD_Y_LEN-1
 Return

LCDには次のように表示されます。

2005/06/05 12:34:56 
very-very-long-maila
ddress@non-exist-exa
mple-domain.com   12

標準添付のバックライトなし16×2キャラクタLCDではなく、20×4キャラクタLCD(バックライトあり)を取り付けた状態。LEDが隠れてしまっている。
基板裏側。標準添付のゴム足ではなく、汎用の円形ゴム足を4分割して四隅に貼り付け。
ゴム足部分アップ。シリアルコネクタはねじで固定。


ゴム足部分側面。ゴム足は基板上のピンが設置面に接触しない程度の高さが必要。

↑目次に戻る

■T&D ProDigio開発セット

秋月電子通商
http://akizukidenshi.com/catalog/items2.php?p=1&q=K-00939

ProDigioとは、T&Dから発売されているネットワーク機能モジュールで、これを製品に組み込むことでその製品にネットワーク機能をもたせることができるものです。

このモジュール単体で、HTTPサーバー、FTPサーバー、FTPクライアント、PPPクライアントとして動作するほか、USBメモリを外部記憶装置として使用したり、CF型のPHSカードや無線LANカードを使用することもできるなど、多機能な製品です。

T&D
http://www.tandd.co.jp/
ProDigio
http://www.prodigio.jp/

このキットはProDigioに秋月オリジナルのマザーボードをセットにしたものです。

このマザーボードはT&D純正のトレーニングキットのサブセットのようなもので、純正のボードに比べ、一部のインターフェースが省かれています。

トレーニングキット WSC31-T
http://www.prodigio.jp/product/wsc31t/wsc31t_outline.asp

例えば、純正のトレーニングキットではUSBポートが2つあり、一方にUSBメモリを接続して外部記憶装置として使うことができ、もう一方のUSBポートをPCを接続するとProDigioをPCの外部記憶装置として使うことができるようになっていますが、このボードでは前者の機能しかありません。また、純正ボードでは2つあるCFスロットが1つしかありません。

ProDigioの最大の特徴は強力なスクリプト言語を備えていることです。言語仕様としてはJavaScriptにかなり近く、サーバーサイドJavaScriptといった感じです。ProDigioでプログラミングするにはこのスクリプトを使うほかなく、その分このスクリプトでProDigioが持つすべての機能を使用できるようになっています。

このスクリプトはProDigioが持つインタプリタによって実行されるため、テキストエディタでスクリプトを記述して、ProDigioのストレージ(内蔵フラッシュメモリか、USBメモリ、CFカードのいずれか)上に配置し、ウェブブラウザから呼び出すだけで実行できます。

ProDigioそのものやスクリプト言語の仕様はT&Dのウェブサイトで配布されているので、興味のある人は読んでみてください。

ProDigioの技術資料など
http://www.prodigio.jp/service_support/download/download_top.asp

ただし、非常に強力な機能を持っている分、不用意に外部からのアクセスを許すと、超巨大セキュリティホールとなってしまいますので、注意が必要です。


CFカード、USBメモリ、LANケーブルを接続した状態。

↑目次に戻る

■USB温度・湿度測定モジュール

ストロベリー・リナックス
http://www2.strawberry-linux.com/products/usbrh/

PCとUSBで接続することによりPCから温度と湿度を読み出せるモジュールの組み立てキット。Sensirion社の温度・湿度センサSHT-11はピン間隔が狭く、ハンダ付けがやや難しい ですがそれを除けば簡単に組み立てられます。

PCから制御するためのライブラリ(DLLファイル)が提供されており、自分のプログラムに組み込んで使用できます。このライブラリはVC++/VB用ということになっていますが、私は現在プログラミングにはBorland社のDelphi 6 Personalを使用しているのでDelphiでも使えないものかと試してみました。

当初、ストロベリー・リナックスのサイトにある関数リファレンス(VB向けに書かれている)を元に定義を記述してみたのですがうまくいきません。

試行錯誤した結果分かったのは、VBのソースで戻り値の型が「String」となっている場合、Delphiでは「String」ではなく「PChar」としなければならないということです。DelphiにもString型が存在するためハマってしまいました。ただし、String型の変数にPChar型の値を代入することはできるため、定義さえPChar型にしておけば、使うときはStringを返すものとして使えるのでPCharであることを気にする必要はありません。

Delphiではソース(PASファイル)に以下のように記述すればライブラリが持つ関数をDelphiからfunctionとして使用できるようになります。

(略)

implementation

{$R *.dfm}

// ファームウェアバージョンの取得
function GetVers(dev: String): PChar; // StringではなくPCharとする
 stdcall; external 'USBMeter.dll' name '_GetVers@4';

// モジュールの検索
function FindUSB(var index: LongInt): PChar; // StringではなくPCharとする
 stdcall; external 'USBMeter.dll' name '_FindUSB@4';

// 温度・湿度の取得
function GetTempHumid(dev: String; var temp: Double; var humid: Double): LongInt;
 stdcall; external 'USBMeter.dll' name '_GetTempHumid@12';

// LEDの制御
function ControlIO(dev: String; port: LongInt; val: LongInt): LongInt;
 stdcall; external 'USBMeter.dll' name '_ControlIO@12';

// ヒーターの制御
function SetHeater(dev: String; ByVal: LongInt): LongInt;
 stdcall; external 'USBMeter.dll' name '_SetHeater@8';

(以下、フォームのイベントハンドラなど)

一番右にあるのが温度・湿度センサー

■USBウェザーボード (2008.5.25)

ストロベリー・リナックス
http://strawberry-linux.com/catalog/items?code=18059

PCとUSBで接続することによりPCから温度と湿度と気圧を読み出せるボード。組み立てキットではなく完成品の形で売られています。また、ケースも別売で用意されています。USB温度・湿度測定モジュールにも搭載されているSensirion社の温度・湿度センサSHT-11の後継機種とみられるSHT-15と気圧センサSCP1000が搭載されています。SCP1000にも温度センサ機能があり、その計測値も取得できるようになっています。

USB温度・湿度測定モジュールとは違い、ドライバやライブラリなどは添付されず、PCに接続するとシリアルマウスとして認識されます。デバイスマネージャ上では「!」マークが付いた状態になりますが、問題ないようです。

このボードはアプリケーションからはモデムのようなものとして見えるようになっており、Windows付属の「ハイパーターミナル」(パソコン通信ソフト)でこのボードに割り当てられたCOMポート(どのポートかはデバイスマネージャで調べます)に接続すると1秒ごとに、温度・湿度・気圧・ボードが動き始めてからの秒数などを固定長テキストで返されるようになっています。

このため、モデムにアクセスするのと同じ要領で測定値を読み出すことができます。Visual Basicであれば、MSCommコントロールを使えば簡単にできます。MSCommが使えない開発環境でもWindowsAPIが使用できれば、CreateFile→ReadFile→CloseHandleの順にAPIを呼び出せば測定値を取得できます。

USBウェザーボード
中央よりやや左上にある丸い部品がSCP1000、右下のあるのが温度・湿度センサSHT-15【追記】このボードに明るさセンサーを追加した、バージョン2が販売されている。

↑目次に戻る

GPS世界時計キット(2011.7.31)

【販売】秋月電子通商
http://akizukidenshi.com/catalog/g/gK-04705/

【製造】トライステート
http://www.tristate.ne.jp/gps_clock/gps_clock.htm

電波時計キットの製造元でもあるトライステートによるキット。時刻源として標準電波(JJY)ではなくGPSの電波を使用します。そのため、JJYが上手く受信できない環境でも空が見える窓辺に同梱されているアンテナを置けば時刻を表示させることができます。

電波時計キットと異なり、PCとのインターフェースがRS-232CではなくUSBになっており、PCからはCOMポートに見えるようになっています。そのためソフトウェアからはRS-232Cに接続しているのと同じように扱えます。

1秒ごとにNMEA規格のセンテンスがテキストで出力されるようになっています。しかし、USBによるRS-232Cのエミュレーションとなるため、ボードから出力されるパルスとUSBで受信したセンテンスにはタイミングにずれが生じ、PCの時刻合わせに使うにはアプリケーション側で補正してやる必要があります。筆者の個体ではひとまとまりのセンテンスの出力が終わるタイミングとUTC(協定世界時)の秒の立ち上がりのタイミングが連動するようです。

ボート上のジャンパピンからRS-232Cの信号が出力されているものの、ドライバICは搭載されていないため、PCのRS-232Cポートに接続するためには駆動回路を自作する必要があります。

トライステートのこれまでのキットでは液晶ディスプレイの右端が宙に浮く構造になっていましたが、このキットでは右側もジャンパコネクタで固定されるようになり、設置方法が広がりました。

GPS世界時計キット
GPS世界時計キット。液晶ディスプレイが青地に白抜き文字タイプになっている。
四隅のビスは筆者が用意したもので、キットには含まれません。
GPSClockGPSClock 2011.7.31版
ダウンロードGPS世界時計キットを使ってPCの時刻を合わせるプログラムです。
Windows2000/XPで動作を確認しています。Delphi6で開発しているため、Windows98でも動作すると思います。
GPSClockGPSClock コマンドレスポンスモード用 2011.8.27版
ダウンロードGPS世界時計キットを使ってPCの時刻を合わせるプログラムです。こちらの方が先日公開したNMEAモード版より高精度が得られます。
コマンドレスポンスモードで動作します。GPS世界時計キットを起動後F3ボタンを押してコマンドレスポンスモードに切り替えてください。
Windows2000/XPで動作を確認しています。Delphi6で開発しているため、Windows98でも動作すると思います。

↑目次に戻る

USBガイガーカウンタキット(2011.9.9)

ストロベリーリナックス
http://strawberry-linux.com/catalog/items?code=53001

ガイガー・ミュラー管を搭載し、放射線(α線・β線・γ線)を検出できる、いわゆるガイガーカウンターのキットです。2007年から販売されていますが、2011年の福島第1原子力発電所の事故以降、品薄状態が続いているようです。

このガイガー・ミュラー管は雲母窓型と呼ばれるもので、雲母(マイカ)窓があることで透過力が弱いα線も検出することができますが、雲母窓は大変壊れやすく、取り扱いに注意が必要です。そこでキットとともに販売されている専用のケースに組み付けています。これにより、α線は検出することができなくなりますが、空間線量を測る場合はγ線のみを測定することになっているのでこれでも問題ありません。

むしろ、この状態ではβ線も検出しまうので、空間線量を測定する場合にはβ線も遮蔽する必要があります。β線は厚さ3mmのアルミ板か厚さ10mmのアクリル板で遮蔽できるとされますが、アルミ板でキットを覆った場合、液晶ディスプレイの表示が見えなくなってしまうので、アクリル板で覆ってβ線を遮蔽しています。

観測データはボード上の液晶ディスプレイで確認できるほか、USBでPCから読み取ることもできます。そこで、USB温度・湿度測定モジュールのときと同様にDelphi6でデータを読み取り、結果をファイルに出力するプログラムを作ってみました。

GUIを持たないコンソールアプリケーションとして作成したので、.pasファイルではなく、.dprファイル(プロジェクトファイル)に直接記述します。

USBGeigerCmd.dpr

program USBGeigerCmd;

{$APPTYPE CONSOLE}

uses
  SysUtils;

 // GMカウンタの検索
 // GMカウンタのデバイス名を返します。デバイスが見つからない場合は""を返します。
 function FindUSB(var index: LongInt): PChar;
  stdcall; external 'gmlib.dll' name '_FindUSB@4';
  
 // カウント値・時間の取得
 // カウント値と時間を取得します。このカウント値は液晶にされるものと同じです。
 // 時間は液晶に表示されている時間ですが、単位は秒で返します。例)10分は600という数値を返します。
 // 一番目の引き数はFundUSBで返したものを渡します。
 function GetCountTime(dev: String; var count: LongInt; var time: LongInt): LongInt;
  stdcall; external 'gmlib.dll' name '_GetCountTime@12';

 // カウント値・時間のクリア
 // GMカウンタのカウント値と時間を0にします。
 // クリアと同時にGMキットの液晶表示も0になります
 // 一番目の引き数はFundUSBで返したものを渡します。
 function Clear (dev: String): LongInt;
  stdcall; external 'gmlib.dll' name '_Clear@4';

 //
 //
 //  バージョン取得
 // GMカウンタの内部バージョンを返します。バージョンはYY/MM/DDの日付形式になっています。
 // 一番目の引き数はFundUSBで返したものを渡します。
 function GetVers(dev: String): PChar;
  stdcall; external 'gmlib.dll' name '_GetVers@4';

var
 device: PChar;
 idx: LongInt;
 count: LongInt;
 strCount: String;
 time: LongInt;
 CPM: Double;
 strCPM: String;
 dir: String;
 F: TextFile;
begin
 idx:=1;
 device:=FindUSB(idx);
 if length(device)>0 then
 begin
  GetCountTime(device,count,time);
  Clear(device);
  CPM:=count/time*60;
 end
 else
 begin
  count:=0;
  CPM:=0;
 end;

 strCount:=IntToStr(count);
 strCPM:=FloatToStr(CPM);
 strCPM:=Copy(strCPM,1,Pos('.',strCPM)+2);

 if (ParamCount>0) and (length(ParamStr(1))>0) then
 begin
  dir:=ParamStr(1);
 end
 else
 begin
  dir:='';
 end;

 AssignFile(F,dir+'USBGeiger_'+FormatDateTime('yyyymmdd',now)+'.csv');

 try
  Append(F);
 except
  Rewrite(F);
 end;

 Writeln(F,
  FormatDateTime('yyyy/mm/dd hh:nn',now)+','
 +strCount+','
 +strCPM
 );

 CloseFile(F);

end.

さらに次のようなバッチファイルを作成し、Windowsの「タスク」機能で5分ごとに実行するように設定します。

.\USBGeigerCmd
copy .\USBGeiger_%date:~-10,4%%date:~-5,2%%date:~-2,2%.csv <コピー先>
copy .\USBGeiger_%date:~-10,4%%date:~-5,2%%date:~-2,2%.csv <コピー先>\USBGeiger.csv

Delphiプログラムの方は実行されるたびに、同じディレクトリの「USBGeiger_YYYYMMDD.csv」というファイルに日時とカウント数と1分あたりのカウント数(CPM)を出力(追記)するので、それを次のバッチファイルで「USBGeiger.csv」と「USBGeiger_YYYYMMDD.csv」にコピーします。こうすることで、当日分が「USBGeiger.csv」、前日以前の分が「USBGeiger_YYYYMMDD.csv」として蓄積されていきます。

さらに、このCSVファイルを読み込んでグラフ表示するプログラムをFlashで開発しました。次にように表示されます。

2011年9月2日~2012年12月31日までのデータがあります。詳細はこちら

USBガイガーカウンタキット USBガイガーカウンタキット+アクリル板
USBガイガーカウンタキット。
写真(左)は純正のケース(http://strawberry-linux.com/catalog/items?code=53070)に取り付けた状態。
写真(右)はさらに自作のアクリルケース(アクリル板を張り合わせたもの)に入れてβ線を遮蔽した状態

↑目次に戻る

■秋月キット全般

●基板そのものの設置
秋月電子通商のキットでは、一部のものを除いて基板を固定するためのケースやスペーサーなどは付属しません。ケースに組み付けずに基板むき出しの状態で使用するにはスペーサーやゴム足を取り付けて設置面でのショートを防ぐ必要があります。

●シリアルコネクタ
秋月電子通商のキットでは、RS-232Cコネクタはピンがハンダ付けされているのみで、ケーブル着脱時にぐらつくので、秋月電子の近くにあるヒロセテクニカルの地下部品売り場で幅3mm×高さ10mmのサラねじとそれに合うナットを買ってきて、基板に取り付けて補強しています。

ヒロセテクニカル
http://www.hi-k.co.jp/

サラねじ
ねじ回しのあたる部分が平らになっているねじ。ねじ回しのあたる部分の裏側は斜めになっており、基板の穴に食い込むように固定することができる。逆に、ねじ回しのあたる部分が膨らんだ形になっており、その裏側が平らになっているねじをナベねじという。

●LCDモジュール
秋月電子通商で売られているLCDモジュールは基板左端にのみコネクタがあり、右側には何もないのでバランスが悪い状態で使用することになります。キットによっては、LCDモジュールの右端がシリアルコネクタの上に乗るようになっているものもありますが、そうでないものはスペーサーをつけるなどの工夫が必要です。

↑目次に戻る