
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-шине.
ПРАКТИКА
Подключение

| Контакт модуля | Контакт платы | Назначение |
|---|---|---|
| VIN | UNO R3: 5V; ESP32-DevKitC V4 (ESP32-WROOM-32): 3V3 | Два альтернативных подключения. Выберите одно; питание датчика соответствует логике хоста. |
| GND | GND выбранной платы | Общая земля обязательна. |
| SDA, нижний ряд | UNO R3: A4/SDA; classic ESP32: GPIO21 | I²C data. GPIO21 относится к названной плате ESP32, не ко всем моделям ESP32. |
| SCL, нижний ряд | UNO R3: A5/SCL; classic ESP32: GPIO22 | I²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-адрес
0x6AIMU_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/прерывания и отдельная обработка ошибок.
Проекты с этим компонентом
Все проектыСвязанные проекты пока не опубликованы.


