電子工作

加速度センサーを触る

GPSを使って、GoogleMAPにて自分の移動したポイントを表示するアプリケーションを作っている友人の話に触発されて、加速度センサーを試してみる。

加速度センサーキットは、秋月で売っている。 picが載っていて、シリアルでコマンドを送ると、x軸y軸で、2バイトずつ計4バイトのデータを返してくれる。 作ってみた。 adxl202e.jpg

加速度センサー付属のソフトで見てみる。

作ったキットが、ちゃんと動くのか付属のソフトで試してみる。 こうなる。 adxldemo.jpg

Pythonで制御してみる

Pythonには、PySerialというライブラリがある。Windowsで使うには、window extensionが必要になる。 使い方は簡単で、シリアルをオープンして、'G'(0x47h)を書き込むと、4バイトデータが帰って来るというのも、最初に'G'を送った時、初期化のため少し時間がかかるが、その後は、連続して'G'を送り、連続して値を受け取る。 プログラムはこんな感じ。50回連続で、加速度を読む。

import serial,time
ser=serial.Serial(0)
print ser.portstr
ser.timeout=2
ser.write('G')
recv=ser.read(4)
for i in range(50):
    t1=time.time()
    ser.write('G')
    recv=ser.read(4)
    if len(recv)!=4:
        continue
    x=255*ord(recv[0])+ord(recv[1])
    y=255*ord(recv[2])+ord(recv[3])
    x=x/10000.0
    y=y/10000.0
    xg=(x-0.5)/0.125
    yg=(y-0.5)/0.125
    t1=(time.time()-t1)*1000
    print 'time=%d xg=%f yg=%f' % (t1,xg,yg)
    time.sleep(0.025)
ser.close()

結果は、

 time=9 ms xg=-0.440000 yg=0.066400
 time=9 ms xg=-0.458400 yg=0.029600
 time=9 ms xg=-0.468800 yg=0.075200
 time=9 ms xg=-0.422400 yg=0.066400
 time=9 ms xg=-0.468800 yg=0.039200
 time=9 ms xg=-0.440000 yg=0.066400

みたいな感じになる。 変換の部分は、

x=255*ord(recv[0])+ord(recv[1])
y=255*ord(recv[2])+ord(recv[3])
x=x/10000.0
y=y/10000.0
xg=(x-0.5)/0.125
yg=(y-0.5)/0.125

こんな感じで書けば良い。

pygameを使って見る。

pygameを使って作ってみると、こうなる。 pygameのstarsをベースとした。

adxldemo2.jpg

filestars.py


添付ファイル: fileadxldemo2.jpg 9281件 [詳細] filestars.py 10365件 [詳細] fileadxl202e.jpg 8982件 [詳細] fileadxldemo.jpg 9152件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-02-01 (日) 14:38:24 (3364d)