昨日はハードウェア編でした。
って単にパイゼロと加速度センサを
つないでチョコベイビーに入れた
だけですけど。
加速度のログを取る
プログラムは 下記になります。
上手く貼り付けられるかな。
6050.py
# -*- coding: utf-8 -*-
#!/usr/bin/python
# import module
import csv
import smbus
import math
from time import sleep
from datetime import datetime
# slave_add
DEV_ADDR = 0x68
# register_add
ACCEL_XOUT = 0x3b
ACCEL_YOUT = 0x3d
ACCEL_ZOUT = 0x3f
TEMP_OUT = 0x41
GYRO_XOUT = 0x43
GYRO_YOUT = 0x45
GYRO_ZOUT = 0x47
PWR_MGMT_1 = 0x6b
PWR_MGMT_2 = 0x6c
AFS_SEL_ADD = 0x1c
AFS_SEL_SET = 0x10 # 0x18:16g, 0x10:8g, 0x08 4g, 0x00 2g
ACCEL_DIV = 4096.0 # 16g:2048.0, 8g:4096.0, 4g:8192.0, 2g:16384.0
bus = smbus.SMBus(1)
# Unlock Sleep
bus.write_byte_data(DEV_ADDR, PWR_MGMT_1, 0)
def read_byte(adr):
return bus.read_byte_data(DEV_ADDR, adr)
def write_byte(adr, param):
bus.write_byte_data(DEV_ADDR, adr, param)
def read_word(adr):
high = bus.read_byte_data(DEV_ADDR, adr)
low = bus.read_byte_data(DEV_ADDR, adr+1)
val = (high << 8) + low
return val
def read_word_sensor(adr):
val = read_word(adr)
if (val >= 0x8000):
return -((65535 - val) + 1)
else:
return val
def get_accel_data_lsb():
x = read_word_sensor(ACCEL_XOUT)
y = read_word_sensor(ACCEL_YOUT)
z = read_word_sensor(ACCEL_ZOUT)
return [x, y, z]
def get_accel_data_g():
x,y,z = get_accel_data_lsb()
x = x / ACCEL_DIV
y = y / ACCEL_DIV
z = z / ACCEL_DIV
return [x, y, z]
# Main function
write_byte(AFS_SEL_ADD, AFS_SEL_SET)
while 1:
d = datetime.now()
datetext = '{0}:{1:02}:{2:02}.{3:06}'.format(d.hour, d.minute, d.second, d.microsecond)
accel_x,accel_y,accel_z = get_accel_data_g()
print 'acl[g]',
print 'x: %06.3f' % accel_x,
print 'y: %06.3f' % accel_y,
print 'z: %06.3f' % accel_z,
print
with open('data.csv', 'a') as f:
writer = csv.writer(f, lineterminator='\n')
writer.writerow([datetext, '%06.3f' % accel_x, '%06.3f' % accel_y, '%06.3f' % accel_z])
f.close()
sleep(0.0036)
たったこれだけです。
ハイライトしていないソースは見にくい。
Gooブログで上手くハイライトさせる方法を
知っていたら誰か教えて欲しいです。