[[電子工作]]

**加速度センサーを触る [#z541618d]

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

[[加速度センサーキットは、秋月で売っている。:http://akizukidenshi.com/catalog/items2.php?q=%B2%C3%C2%AE%C5%D9&s=score&p=1&r=1&page=#K-00104]]
picが載っていて、シリアルでコマンドを送ると、x軸y軸で、2バイトずつ計4バイトのデータを返してくれる。
作ってみた。
&ref(./adxl202e.jpg,50%);
**加速度センサー付属のソフトで見てみる。 [#wc4cf95b]
作ったキットが、ちゃんと動くのか付属のソフトで試してみる。
こうなる。
&ref(./adxldemo.jpg,30%);
**Pythonで制御してみる [#u3761e78]
Pythonには、[[PySerial:http://pyserial.sourceforge.net/]]というライブラリがある。Windowsで使うには、[[window extension:http://starship.python.net/crew/mhammond/win32/]]が必要になる。
使い方は簡単で、シリアルをオープンして、'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を使って見る。 [#q2e52aac]
[[pygame:http://www.pygame.org/news.html]]を使って作ってみると、こうなる。
pygameのstarsをベースとした。

#ref(./adxldemo2.jpg,20%);

&ref(./stars.py);

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS