ガイガカウンタ・簡易モニタリングポスト製作日記(3)

ArduinoIDE Serial Monitor を表示させたところ

ArduinoIDE Serial Monitor を表示させたところ

  • LinuxPCとの通信

開発環境が整ったところで、さっそくガイガーカウンタとPCとの通信実験に移ります。ArduinoとホストPCはUSB経由でシリアル通信ができるみたいです。Takumi Funadaさんが翻訳された 日本語リファレンスを参考にさせていただきました。感謝です!

シリアル通信の項目を見ると。どうやら

void setup() {
・・・・
・・・・
Serial.begin(ボーレイト);
}

void loop() {
・・・・
・・・・
Serial.print(送りたいデータ); // 改行なし
Serial.println(送りたいデータ);//改行有り
}

このようなステートメントを元のスケッチに追加すれば良いみたいです。構文もよくわかりませんが、スケッチを舐めるように見渡して、LCDに値を表示するステートメントを見つけました。その直後にCPM等の数値をそのままSerial.printするように改変しました。ボーレイトは9600bpsが例文として多くあげられていますが、送信側と受信側が合っていれば他の値でも良いみたいです。

さて、改変したスケッチをアップロードし、これからPC側で受け取れるか確認です。ArduinoIDEにはシリアルモニタという機能があって、Arduinoから送られてきたデータを表示することができます。

Selial Monitorを開いて待つこと数秒間、Geigerduinoからデータが送られてきました。やりました!見事成功です。10秒間隔で計測した値を読み取ることができます。

さて、WindowsPCとは通信できましたが、LinuxPCとはどうでしょうか。ちなみに我が家のLinuxマシンですが、ハードはAtom330+ION、RAM 2GByte HardDisk 1TByteの構成です。OSはDebian squeezeでkernelのバージョンは2.6.32-5、Web,MailさらにはPT2録画サーバとして動いています。購入してからしばらく経ちますが、文句も言わず1日24時間働いてくれる、かわいい相棒です。

WindousPCにはデバイスドライバを入れましたが、LinuxPCでは特にその必要はないようです。prolificのサイトに以下の記述があります。

 NOTE: No need to install drivers for following:
 Linux Kernel 2.4.31 and above already includes built-in drivers for PL-2303H, PL-2303XA/HXA and PL-2303HXD.
 NOTE: Google Android OS is also based on Linux kernel so it also supports PL2303.

Kernel 2.4.31以降ではドライバが最初から入っているんですね。アンドロイドOSでも同様みたいです。

さて、USBケーブルをLinuxPCに差し込んでみます。LinuxPCのターミナルからdmsgをタイプしてログを表示します。

 [1108887.812042] usb 4-2: new full speed USB device using ohci_hcd and address 9
 [1108888.024976] usb 4-2: New USB device found, idVendor=067b, idProduct=2303
 [1108888.024983] usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
 [1108888.024989] usb 4-2: Product: USB-Serial Controller
 [1108888.024994] usb 4-2: Manufacturer: Prolific Technology Inc.
 [1108888.025231] usb 4-2: configuration #1 chosen from 1 choice
 [1108888.028226] pl2303 4-2:1.0: pl2303 converter detected
 [1108888.061238] usb 4-2: pl2303 converter now attached to ttyUSB0

上記を見ると/dev/ttyUSB0というデバイスファイルとして扱えば良いみたいです。root権限でさっそく見てみましょう。

 $ sudo cat /dev/ttyUSB0

 0,21,18,478

 18,19,18,479

 24,22,18,480

 ・・・

OK!! ちゃんと10秒ごとに、CPM値(10秒計測×6),直前一分間のCPM値,起動してからのCPM平均値,起動してからの時間(10秒単位)が送られてきました。誠に良い調子ですLinuxPCでも通信することができました。

/dev/ttyUSB0の所有者名とグループ名を見てみますと

$ ls -la /dev/ttyUSB0
crw-rw—- 1 root dialout 188, 0 2011-12-23 11:37 /dev/ttyUSB0

グループ名がdialoutになっています。スクリプトを実行するユーザの補助グループにdialoutを追加します。

$ sudo usermod -G dialout user名

これでroot権限なしでアクセスすることができるようになりました。