[[電子工作]]
**加速度センサーを触る [#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);