CircuitPython 10行プログラミング Step6 (3) Nano RP2040 ConnectにI2CでIMUセンサLSM9DS1

 前回に引き続きIMUを扱います。加速度、磁界、角速度の全部が読み取れるセンサは9軸IMUと呼ばれます。ここでは、STMicroelectronicsのLSM9DS1を使います。チップは一つですが、二つのデバイスが内蔵されているようで、I2Cアドレスが二つあります。

LSM9DS1の主なスペック

 ブレークアウト・ボードはAdafruitの製品を使いました。

  • 電源電圧範囲 1.9~3.6V。ブレークアウト・ボードは3.3/5.0V
  • 測定レンジ(加速度 acceleration) ±2/±4/±6/±8/±16g
  •  ジャイロ angular rate ±245/±500/±2000dps
  •  磁力 magnetic ±4/±8/±12/±16gauss
  • インターフェース I2C(100/400 kHz、スレーブ・アドレス0x1e、0x6b)、SPI

接続

 I2Cバスでつなげます。筆者の購入した時点ではSTEMMA QTタイプはなかったのですが、現時点では用意されているので、コネクタをつなぐだけで接続ができます。

Nano RP2040 Connectのピン配置

 C:\Users\ユーザ名\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\2.4.1\variants\NANO_RP2040_CONNECTフォルダに入っているpins_arduino.hに従ってピン配置図を作りました。

(※2021/10/03)https://learn.adafruit.com/circuitpython-on-the-arduino-nano-rp2040-connect/pinoutsによれば、A6とA7ピンはCircuitPython では使えないと書かれています。

プログラム

 ダウンロードしたlibでLSM9DS1を検索します。adafruit_lsm9ds1.mpyが見つかりました。このファイルを、CIRCUITPYドライブのlibフォルダにコピーします。

 ダウンロードしたexamplesのフォルダで、LSM9DS1で検索します。見つけてきたlsm9ds1_simpletest.pyをMuにコピーし保存します。

Acceleration 加速度
Magnetometer  磁気
Gyroscope ジャイロ(角速度)
Temperature 温度

を読み出しました。

 SPIインターフェースに関係するところは削除しています。


# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT

# Simple demo of the LSM9DS1 accelerometer, magnetometer, gyroscope.
# Will print the acceleration, magnetometer, and gyroscope values every second.
import time
import board
import adafruit_lsm9ds1

# Create sensor object, communicating over the board's default I2C bus
i2c = board.I2C()  # uses board.SCL and board.SDA
sensor = adafruit_lsm9ds1.LSM9DS1_I2C(i2c)

# Main loop will read the acceleration, magnetometer, gyroscope, Temperature
# values every second and print them out.
while True:
    # Read acceleration, magnetometer, gyroscope, temperature.
    accel_x, accel_y, accel_z = sensor.acceleration
    mag_x, mag_y, mag_z = sensor.magnetic
    gyro_x, gyro_y, gyro_z = sensor.gyro
    temp = sensor.temperature
    # Print values.
    print(
        "Acceleration (m/s^2): ({0:0.3f},{1:0.3f},{2:0.3f})".format(
            accel_x, accel_y, accel_z
        )
    )
    print(
        "Magnetometer (gauss): ({0:0.3f},{1:0.3f},{2:0.3f})".format(mag_x, mag_y, mag_z)
    )
    print(
        "Gyroscope (rad/sec): ({0:0.3f},{1:0.3f},{2:0.3f})".format(
            gyro_x, gyro_y, gyro_z
        )
    )
    print("Temperature: {0:0.3f}C".format(temp))
    # Delay for a second.
    time.sleep(1.0)

連載 CircuitPython 10行プログラミング Step6 release7.0.0

(1) Nano RP2040 Connectの準備と動作確認

(2) Nano RP2040 Connectの搭載センサIMU LSM6DSOX

(3) Nano RP2040 ConnectにI2CでIMUセンサLSM9DS1

(4) Nano RP2040 ConnectのWi-Fi

(5) Nano RP2040 Connectで確度0.1℃の温度計TMP117+ht16k33


連載 CircuitPython 10行プログラミング Step5

(1) Raspberry Pi Picoの準備と動作確認 (2) digitalio (3) Raspberry Pi Picoのmicrocontroller (4) アナログ入力 (5) PWM出力 (6) I2S出力 (7) I2C ① OLEDディスプレイ (8) I2C ② 温湿度センサ (9) I2C ③ 気圧センサ (10) Raspberry Pi PicoのSPI ① TFTディスプレイ


連載 CircuitPython 10行プログラミング Step4

(1) Adafruit Feather nRF52840 Senseの準備 (2) Lチカ (3) 搭載センサ (4) BLE①ペリフェラル (5) BLE②セントラル


連載 CircuitPython 10行プログラミング Step3

(1) Metro M4 Express AirLift (WiFi)の準備 (2) ロータリ・エンコーダ (3) eInk/ePaper (4) Wi-Fi その1 接続 (5) Wi-Fi その2 ソケット (6) Wi-Fi その3 電圧測定 (7) 気圧センサLPS25HB (8) サーミスタ


連載 CircuitPython 10行プログラミング Step2

(1) Grand Central M4 Expressの準備 (2) グラフィック・ディスプレイOLED (3) RTC DS3231 (4) モジュール/SDメモリ (5) 複合センサ BME680 (6) ロードセル+ADS1220 (7) サーボ・モータ① (8) サーボ・モータ② (9) I2S UDA1334A (10) D-Aコンバータ


連載 CircuitPython 10行プログラミング

(1) Trinket M0の準備 (2) ディジタルI/O (3) アナログ入出力 (4) I2C 温湿度センサSi7021 (5) SPI 熱電対+MAX31855 (6) UART 距離センサTFMini (7) 1-Wire 温度DS18B20 (8) ロータリ・エンコーダ (9) 7セグメントLED (10) FANコントロール (11) UART GPS (12) I2C Lチカ MCP23017

前へ

CircuitPython 10行プログラミング Step6 (2) Nano RP2040 Connectの搭載センサIMU LSM6DSOX

次へ

CircuitPython 10行プログラミング Step6 (4) Nano RP2040 ConnectのWi-Fi