Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

9軸センサー使って移動距離を測る

概要

BMX055という9軸センサーを使って値をとって、加速度から速度を計算して移動距離を取ろうとしてみました。
BMX055から加速度センサーを取得する際に参考にしたサイトこちらです。
https://labo-kajisaki.blogspot.com/2019/03/2169.html?m=1

使用ソフト

  • uPyCraft

移動距離計算

import urequests
import ujson
from machine import Pin, I2C
from bma2x2 import BMA2X2
from bmg160 import BMG160
from bmm050 import BMM050
import time

i2cBMX055 = I2C(scl=Pin(22), sda=Pin(21))

print('I2C setup')

accl=BMA2X2(i2cBMX055, 0x19)
gyro=BMG160(i2cBMX055, 0x69)
mag=BMM050(i2cBMX055, 0x13)

t = 0.064
count = 1
vx2 = 0
distx = 0
disty = 0
count_result = 0

def vx(ax):
  conv_ax = convx(ax)
  vx = conv_ax*t
  return vx

def convx(ax):
  return ax * 0.00981

def vy(ay):
  conv_ay = convy(ay)
  vy = conv_ay*t
  return vy

def convy(ay):
  return ay * 0.00981


while count <= 300:
  a = BMA2X2.xyz(accl)
  ax = a[0]
  ay = a[1]
  az = a[2]

#X軸方向
  # G ➡ 加速度
  conv_ax = convx(ax)
  # 加速度➡速度(一回目のループ)
  if count_result == 0:
    vx2 = conv_ax * t

    #速度➡距離(初速なし)
    dist2x = conv_ax * t ** 2 / 2

  # 加速度➡速度(初速あり(2回目以降))
  if count_result == 1:
    vx2 = vx2 + conv_ax * t

    #速度➡距離(初速あり(2回目以降))
    dist2_1x = vx2 * t
    dist2_2x = conv_ax * t ** 2 / 2
    dist2x = dist2_1x + dist2_2x

#Y軸方向
  # G ➡ 加速度
  conv_ay = convy(ay)
  # 加速度➡速度(一回目のループ)
  if count_result == 0:
    vy2 = conv_ay * t

  #速度➡距離(初速なし)
    dist2y = conv_ay * t ** 2 / 2

  # 加速度➡速度(初速あり(2回目以降))
  if count_result == 1:
    vy2 = vy2 + conv_ay * t

    #速度➡距離(初速あり(2回目以降))
    dist2_1y = vy2 * t
    dist2_2y = conv_ay * t ** 2 / 2
    dist2y = dist2_1y + dist2_2y

  count_result = 1

  distx += dist2x
  disty += dist2y


  if count % 16 == 0:
    print('x >>> ', distx, '(m)')
    print('y >>> ', disty, '(m)')
    print('----')

  count += 1
  time.sleep(t)

データシートを読んだところ加速度は0.064秒ごとに値をとるらしく、それらを物理の式にあてはめて移動距離を測ろうとしています。それをX軸方向・Y軸方向で求め、最初の位置からどのくらい移動したかを計測しています。

おわりに

結構無理やり物理の式を使っているので、雑な計測結果になってしまいました。

cdsl
東京工科大学コンピュータサイエンス学部クラウド・分散システム研究室
https://www.tak-cslab.org/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away