- 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権限なしでアクセスすることができるようになりました。