アットウィキロゴ

MacOSXからシリアル制御


実験で、シリンジポンプ(KD scientific 社KD270)を外部から制御する必要がでてきた。とりあえず後ろ側を見るとRS-232Cらしきコネクタがついているので、こいつにテキストを流し込むことにする。で、なるべくMacOSXからやりたいので、対応している機器を探す。すると、アイ・オーデータの商品を発見。



こいつを注文して、ラボに転がっていたRS-232Cケーブルを繋いでいろいろいじってみるが全然つながらない。何かと思ったら、dsub9ピンの方は実はTTL信号の受け口で、シリアルポートはモジュラージャックの方だった。何じゃこりゃ。とりあえずケーブルをあさって電話線を確保し、さらに寺町に走ってdsubのコネクタを買ってきて10年ぶりぐらいにハンダ付けをする。で、つなげてから


この辺を参考にして、

/dev/cu i-o data...

というところをscreenで開いてテキストを送り込んでみたら、動いた!あとは目的に応じてスクリプトを書けばいいか。

玄人指向でシリアル制御のテスト


シリアル制御の練習として、赤外線リモコンの制御を試してみる.まずドライバ等をインストールし、

screen /dev/tty.usbserial-00000e57 115200 cs8

としてからrを入力すると"s"が出てきて止まる。この状態でリモコンを向けて信号を送ると、

S.........E
というテキストが出てきて止まる.これはこれで動いているようだ.再試行するにはいったんUSBを抜いて差し直したら行けた。

さて、これだとテキストしか出力してくれないので、この信号を何とかバイナリで保存するやり方を考えないと行けない.適当に探して、Pythonで何とかならないかやってみる.pySerialというモジュールを


で配っていて、MacOSXでも動く。これをインストールしてから

python

でpythonに入り、

>>> import serial
>>> ser = serial.Serial('/dev/tty.usbserial-00000e57', 115200, timeout=1)
>>> ser.write("r")
>>> x=ser.read(1)
>>> print x}
 
とすると"Y"が出力される.入出力はうまく行っているようだ.次に

>>> ser.write("r")
 
としてからリモコンの信号をセンサに当てて、
>>> line = ser.readline()
>>> print line
 

とすると、

YS????????????????????????????????????????????E


という文字列が出力されるので、受信も行けている.こいつをバイナリで保存したらリモコン信号の抽出はできそう.


できたプログラムがこんな感じ.

import serial
import time
 
ser = serial.Serial('/dev/tty.usbserial-00000e57', 115200, timeout=1)
raw_input("Press return key and input remote control signal")
ser.write("r")
time.sleep(10)
line = ser.readline()
print line
print("¥nDetected signal:")
print line
 
line2=line[2:-1]
print line2
 
f=open('signal.dat', 'wb')
f.write(line2)
 

import serial
import time
 
ser = serial.Serial('/dev/tty.usbserial-00000e57', 115200, timeout=1)
raw_input("Press return key to start sending signal")
f=open('signal.dat', 'rb')
ser.write("t")
reply = ser.read(1)
 
if reply == "Y" :
	raw_input("Device ready: press return key")
	ser.flushInput()
	ser.write("1")
	reply = ser.read(1)
 
	if reply == "Y" :
		raw_input("LED 1 ready: press return key")
		sig = f.read()
		print sig
		raw_input("Stored Data: press return to send this signal")
		ser.write(sig)
		reply = ser.read(1)
		print reply
		print("Message sent")
 
f.close()
ser.close()
 




cwgwinでシリアル制御


ぜんぜんMacではないが、その場にある機械で何とか制御をしないといけなくなったので試してみる。

まずcygwinをインストール時に、オプションでPythonを入れる。次にpyserialをダウンロードしてきてインストール。

次に、USB-RSAQ5のドライバをインストールして、コントロールパネル>システム>デバイスドライバで接続をチェック。最初うまくインストールされていなかったようなので、もう一度ドライバをインストールしなおす。するとCOM3のポートに割り当てられたそうなので、Pythonに入って以下のコードを打つ。

import serial
ser=serial.Serial(2)
ser.write('0 run\r\n')
ser.write('0 stop\r\n')
 

これで動いた!!あとはスクリプトを書いたらおしまいだ!!

タグ:

+ タグ編集
  • タグ:
最終更新:2008年05月07日 17:22