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行プログラミング Step8 release8.0.0 Alpha1
(4) I2Cで温度センサTMP117
(5) アナログ入力 ジョイスティック
連載 CircuitPython 10行プログラミング Step7 release7.2.0-alpha.1
(2) 気圧センサLPS22HB
連載 CircuitPython 10行プログラミング Step6 release7.0.0
(1) Nano RP2040 Connectの準備と動作確認
(2) Nano RP2040 Connectの搭載センサIMU LSM6DSOX
(3) Nano RP2040 ConnectにI2CでIMUセンサLSM9DS1
(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