Adafruit LSM6DSOX (4438)

Adafruit · LSM6DSOX STEMMA QT / Qwiic, product 4438

Датчик ускорения и вращения с распознаванием обученных движений

Автор: SLDV LAB

Опубликовано · Обновлено

СложностьСредне
Проекты с компонентом

О МОДУЛЕ

Что делает LSM6DSOX STEMMA QT / Qwiic, product 4438

Adafruit 4438 — готовая плата с инерциальным датчиком ST LSM6DSOX. Акселерометр измеряет ускорение по трём осям, включая действие гравитации; гироскоп — скорость вращения. Это удобная основа для собственного алгоритма оценки наклона, регистрации движений и управления жестами. Магнитометра нет: абсолютный магнитный курс такая плата самостоятельно не определяет.

Преимущество именно breakout-платы — стабилизатор, согласование основных входов интерфейса и два разъёма STEMMA QT / Qwiic. Можно начать с обычного чтения данных на Arduino UNO R3 либо ESP32. Если проекту нужны буферизация и событийная работа, микросхема также предоставляет FIFO, конечные автоматы и Machine Learning Core; настройка этих функций является отдельной задачей.

MLC здесь означает выполнение заранее обученных деревьев решений над признаками движения. Сначала собирают характерные записи для нужных классов, обучают и проверяют модель, затем загружают её конфигурацию в датчик. Это не универсальный искусственный интеллект и не самообучение после включения. Приведённый скетч Adafruit читает ускорение и гироскоп: он не загружает MLC-модель и не начинает распознавать жесты автоматически.

Идеи проектов:

  • Ручной контроллер: наклон и поворот меняют параметры игры, света или звука.
  • Регистратор движений на ESP32: сохранять ускорение и вращение с временными метками, отдельно продумав FIFO и носитель.
  • Учебный классификатор «покой / ходьба / другое движение»: собственные записи, обучение и проверка MLC для конкретного крепления датчика.

Ограничения: смещение гироскопа приводит к дрейфу при интегрировании, а движение платформы мешает оценивать наклон только по гравитации. Для устойчивой ориентации нужны калибровка и фильтрация; для курса потребуется дополнительный источник направления. Двойное интегрирование ускорения не превращает модуль в точный трекер координат. Наименования LSM6DSO32 и ISM330DHCX относятся к другим моделям: их диапазоны и примеры не следует переносить сюда.

Характеристики

Микросхема
STMicroelectronics LSM6DSOX
Измерительные оси
6
Диапазоны ускорения
±2 / ±4 / ±8 / ±16 g
Диапазоны гироскопа
±125 / ±250 / ±500 / ±1000 / ±2000 °/с
Питание платы через VIN
3–5 В
Основной интерфейс
SCL/SDA и host CS допускают работу с логикой, соответствующей VIN; прочие прямые выводы не считать 5-В tolerant
Интерфейсы примеров
I²C или SPI; STEMMA QT / Qwiic передаёт I²C
7-битный I²C-адрес
0x6A по умолчанию; 0x6B после изменения адресной перемычки
ODR акселерометра
1,6 Гц — 6,66 кГц, зависит от режима
ODR гироскопа
12,5 Гц — 6,66 кГц
FIFO микросхемы
До 9 КБ; требует отдельной настройки, в примере не используется
Machine Learning Core
Обученные деревья решений; модель и конфигурацию загружают отдельно
Магнитометр
Нет
Габариты платы по Adafruit
25,6 × 17,8 × 4,6 мм
Исполнение
Product 4438; у производителя менялись регулятор и шелкография. Ревизию конкретного экземпляра сверять с платой.
Интерфейс
I²C, SPI
Питание модуля
VIN 3–5 В. Для UNO R3 подать 5 В на VIN платы датчика; для ESP32 — 3,3 В на VIN. SCL/SDA подтянуты к VIN через схему согласования, поэтому нельзя питать VIN от 5 В при прямом подключении к ESP32. 3Vo — выход стабилизатора, не вход 5 В. INT1/INT2, нижний DO/SDO и вспомогательные верхние контакты связаны с низковольтными цепями датчика: не подавать на них 5 В. Не подключать одновременно 5-В и 3,3-В хосты к общей STEMMA/Qwiic-шине.

ПРАКТИКА

Подключение

Схема подключения
Контакт модуляКонтакт платыНазначение
VINUNO R3: 5V; ESP32-DevKitC V4 (ESP32-WROOM-32): 3V3Два альтернативных подключения. Выберите одно; питание датчика соответствует логике хоста.
GNDGND выбранной платыОбщая земля обязательна.
SDA, нижний рядUNO R3: A4/SDA; classic ESP32: GPIO21I²C data. GPIO21 относится к названной плате ESP32, не ко всем моделям ESP32.
SCL, нижний рядUNO R3: A5/SCL; classic ESP32: GPIO22I²C clock. В примере 100 кГц.
3VoНе подключать в минимальном примереВыход стабилизатора; не соединять с 5V.
Нижний DO/SDO и адресная перемычкаОставить штатное состояние для 0x6AПеремычка 0x6B замыкает адресный сигнал к внутренней 3,3-В цепи. Не подавать на DO 5 В.
Нижний CSНе подключать при I²CШтатная подтяжка сохраняет режим I²C. Нижний CS относится к host SPI; верхний CS — вспомогательный.
I1/INT1, I2/INT2Не подключать в примереКонфигурируемые выходы событий, не обязательны для этого опроса.
Верхние SCX, SDX, CS, DOНе подключать в примереВспомогательный интерфейс, не основные SCL/SDA; прямые низковольтные цепи.

Подходит для Arduino, ESP32. Выберите контакты по документации своей платы.

ВАШ ПРОЕКТ · ВАШ ДАТЧИК

Интегрируйте модуль с ChatGPT

Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.

Помоги подключить именно Adafruit LSM6DSOX 4438 STEMMA QT / Qwiic. Сначала уточни точную плату хоста, среду и задачу: сырые измерения, ориентация, запись движения или MLC. Для UNO R3 используй VIN датчика от 5V, SDA=A4, SCL=A5; для classic ESP32-DevKitC V4 с ESP32-WROOM-32 — VIN от 3V3, SDA=GPIO21, SCL=GPIO22. Другим ESP32 подбери выводы по их документации. Не подавай 5 В на прямые низковольтные дополнительные выводы и не питай VIN от 5 В при прямой шине ESP32.

Дай согласованные распиновку, зависимости Arduino IDE, полный минимальный скетч, диагностику адреса 0x6A/0x6B и план проверки. Используй Adafruit LSM6DS, Unified Sensor и BusIO. Различай g, м/с², °/с и рад/с. Отделяй ODR сенсора от частоты печати. Предупреди, что getEvent() в проверенной 4.7.4 не сообщает достоверно об ошибке каждой транзакции. Для MLC отдельно нужны записи классов, обучение, проверка и загрузка конфигурации; обычный getEvent() не запускает готовое распознавание. Не утверждай физическое испытание без устройства.

Библиотеки

Установите библиотеку для своей среды и откройте пример из её документации.

Что именно прописать

Среда и зависимости
Arduino IDE; Adafruit LSM6DS 4.7.4 + Adafruit Unified Sensor + Adafruit BusIO

В Library Manager установить Adafruit LSM6DS вместе с зависимостями. Wire входит в пакет платы.

Подключение UNO R3
VIN=5V; SDA=A4; SCL=A5; GND=GND

Только Arduino UNO R3/ATmega328P; это не распиновка UNO R4 или любой Arduino.

Подключение ESP32
ESP32-DevKitC V4 / ESP32-WROOM-32: VIN=3V3; SDA=21; SCL=22

В Arduino IDE выбрать соответствующую classic ESP32-плату. Раскладка не универсальна для S3/C3/C6.

I²C-адрес
0x6A

IMU_ADDRESS; при замкнутой адресной перемычке заменить на 0x6B.

Заголовок
#include <Adafruit_LSM6DSOX.h>

Не Adafruit_LSM6DSO32.h и не Adafruit_ISM330DHCX.h.

Инициализация
imu.begin_I2C(IMU_ADDRESS, &Wire)

Возвращаемое false означает неудачную инициализацию; проверить питание, адрес и провода.

Шина / диапазоны / ODR
100000 Hz I2C; ±4 g; ±500 dps; 104 Hz

В скетче задаются Wire.setClock(), setAccelRange(), setGyroRange() и обе set...DataRate().

Единицы выходных событий
acceleration: m/s²; gyro: rad/s

Диапазон гироскопа задаётся в dps, но Unified Sensor возвращает рад/с.

MLC
No model loaded in this example

Для классификации нужен отдельный обученный и загруженный набор регистров MLC; этот пример только читает IMU.

Arduino IDE: I²C-чтение на UNO R3 или classic ESP32

cpp
// SLDV LAB: Adafruit product 4438; Arduino IDE; Adafruit LSM6DS 4.7.4.
// UNO R3: VIN=5V, GND=GND, SDA=A4, SCL=A5.
// Classic ESP32-DevKitC V4 / ESP32-WROOM-32: VIN=3V3, SDA=21, SCL=22.
// This reads acceleration/gyro only. It does not load or run an MLC model.
#include <Wire.h>
#include <Adafruit_LSM6DSOX.h>

Adafruit_LSM6DSOX imu;
constexpr uint8_t IMU_ADDRESS = 0x6A;

void stopWithMessage(const __FlashStringHelper *message) {
  Serial.println(message);
  while (true) delay(1000);
}

void setup() {
  Serial.begin(115200);
#if defined(ARDUINO_ARCH_ESP32)
  // These pins are for classic ESP32 only, not universal ESP32-S3/C3/C6 pins.
  Wire.begin(21, 22);
#else
  // Arduino UNO R3 uses A4=SDA, A5=SCL.
  Wire.begin();
#endif
  Wire.setClock(100000);
  if (!imu.begin_I2C(IMU_ADDRESS, &Wire)) {
    stopWithMessage(F("LSM6DSOX not found. Check power, wiring and 0x6A/0x6B."));
  }
  imu.setAccelRange(LSM6DS_ACCEL_RANGE_4_G);
  imu.setGyroRange(LSM6DS_GYRO_RANGE_500_DPS);
  imu.setAccelDataRate(LSM6DS_RATE_104_HZ);
  imu.setGyroDataRate(LSM6DS_RATE_104_HZ);
  Serial.println(F("ax_mps2,ay_mps2,az_mps2,gx_radps,gy_radps,gz_radps"));
}

void loop() {
  // Detect a missing I2C acknowledgement before reading. This is not a
  // substitute for checking every transfer in a production driver.
  Wire.beginTransmission(IMU_ADDRESS);
  if (Wire.endTransmission() != 0) {
    Serial.println(F("I2C no ACK. Check connection; do not use this sample."));
    delay(500);
    return;
  }
  sensors_event_t accel, gyro, temperature;
  // In library 4.7.4 getEvent() returns true unconditionally: do not use
  // its bool as proof that all bus reads succeeded.
  imu.getEvent(&accel, &gyro, &temperature);
  Serial.print(accel.acceleration.x, 3); Serial.print(',');
  Serial.print(accel.acceleration.y, 3); Serial.print(',');
  Serial.print(accel.acceleration.z, 3); Serial.print(',');
  Serial.print(gyro.gyro.x, 3); Serial.print(',');
  Serial.print(gyro.gyro.y, 3); Serial.print(',');
  Serial.println(gyro.gyro.z, 3);
  // 10 printed lines/s; sensor ODR remains 104 Hz. This is not a FIFO logger.
  delay(100);
}

Полный скетч; API сверено с Adafruit LSM6DS 4.7.4, commit 379a5204c0bad71264c3d635de84d0f9679ab784. Компиляция и запуск на железе не выполнялись. В покое модуль ускорения должен быть около 9,81 м/с², знак компоненты зависит от ориентации; гироскоп около нуля с остаточным смещением. Печать примерно 10 строк/с, хотя ODR 104 Гц. ACK-проверка обнаруживает отсутствие устройства, но не гарантирует успех всех последующих чтений. Для регистратора без потерь нужны FIFO/прерывания и отдельная обработка ошибок.

Проекты с этим компонентом

Все проекты

Связанные проекты пока не опубликованы.

Связанные материалы и компоненты