Zero と Qwiic – ICM-20948搭載 9DoF IMUモジュール
慣性計測ユニットモジュールは一般に「姿勢」を読み取るのに利用されます。
9軸(自由度)の場合読み取るのは、加速度(x,y,z)、角速度(x,y,z)、地磁気(x,y,z)の9つです。
結線(I2C)
ラズパイZero のOSイメージは、Raspberry Pi OS Lite(32-bit)
ラズパイ Zero WH にRaspbian Lite をインストール
I2C設定
1 |
sudo raspi-config |
Interface Options ー> I2C を有効にします。
以下追加
1 2 3 4 |
sudo apt-get update sudo apt-get install i2c-tools sudo apt-get install python3-pip sudo apt-get install git |
ICM-20948 からデータを読み取る準備
1 2 3 |
pip3 install sparkfun-qwiic-icm20948 git clone https://github.com/sparkfun/Qwiic_9DoF_IMU_ICM20948_Py |
結線したら以下確認
SparkFun 9DoF IMU Breakout – ICM-20948 ボード上の電源 LED が点灯しているのを確認。
I2C バス一覧を確認
1 |
i2cdetect -l |
I2C バス 1 について、Raspberry Pi に接続された I2C デバイス一覧およびそれらのアドレスを確認
1 |
i2cdetect -y 1 |
BANK0 の”Who Im I”を取得 ー> 0xEA
1 |
i2cget -y 1 0x69 0x00 |
BANK を 3 に切り替え
1 |
i2cset -y 1 0x69 0x7f 0x30 b |
以下を実行 -> 0x30
1 |
i2cget -y 1 0x69 0x7f |
ICM-20948 でデータ読み取り
1 2 3 |
cd Qwiic_9DoF_IMU_ICM20948_Py/examples python3 ex1_qwiic_ICM20948.py |
参考までにex1_qwiic_ICM20948.pyのコードはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
from __future__ import print_function import qwiic_icm20948 import time import sys def runExample(): print("\nSparkFun 9DoF ICM-20948 Sensor Example 1\n") IMU = qwiic_icm20948.QwiicIcm20948() if IMU.connected == False: print("The Qwiic ICM20948 device isn't connected to the system. Please check your connection", \ file=sys.stderr) return IMU.begin() while True: if IMU.dataReady(): IMU.getAgmt() # read all axis and temp from sensor, note this also updates all instance variables print(\ '{: 06d}'.format(IMU.axRaw)\ , '\t', '{: 06d}'.format(IMU.ayRaw)\ , '\t', '{: 06d}'.format(IMU.azRaw)\ , '\t', '{: 06d}'.format(IMU.gxRaw)\ , '\t', '{: 06d}'.format(IMU.gyRaw)\ , '\t', '{: 06d}'.format(IMU.gzRaw)\ , '\t', '{: 06d}'.format(IMU.mxRaw)\ , '\t', '{: 06d}'.format(IMU.myRaw)\ , '\t', '{: 06d}'.format(IMU.mzRaw)\ ) time.sleep(0.03) else: print("Waiting for data") time.sleep(0.5) if __name__ == '__main__': try: runExample() except (KeyboardInterrupt, SystemExit) as exErr: print("\nEnding Example 1") sys.exit(0) |
Leave a Reply