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

О МОДУЛЕ

Что делает ADXL345 GY-291, generic breakout; ревизия не установлена

GY-291 — распространённая breakout-плата с трёхосевым акселерометром ADXL345. Чип разработан Analog Devices; производитель и ревизия конкретной generic-платы не установлены. Название GY-291 не задаёт единый гарантированный BOM, стабилизатор или схему подтяжек. Фотографии показывают реальное исполнение, предлагаемое продавцом, но не подтверждают происхождение любого похожего экземпляра.

Датчик измеряет проекции ускорения, включая гравитацию. Его удобно использовать для электронного уровня, управления интерфейсом наклоном, обнаружения перемещения коробки или учебного регистратора вибрации. Для вибрационных измерений отдельно выбирают частоту, фильтрацию и жёсткое крепление; медленная печать значений в Serial не заменяет синхронную запись потока. Прерывания событий и FIFO помогают реже опрашивать сенсор и разгружать микроконтроллер.

Преимущества — выбор I²C или SPI, программируемый диапазон и встроенные функции обнаружения активности, одиночного/двойного касания и свободного падения. Это позволяет собрать небольшой датчик движения без обработки каждого отсчёта на основной плате. Эти функции требуют отдельной настройки и не включены автоматически в приведённый пример.

ADXL345 не содержит гироскопа или магнитометра. Наклон по гравитации корректно оценивается в покое или при достаточно слабом постороннем ускорении; курс вокруг вертикали и точное перемещение из одних этих данных не получить. Перед серьёзными измерениями нужны проверка осей, смещений и масштабных коэффициентов. Разрядность и шаг отсчёта не равны абсолютной точности.

Generic-модуль требует проверки питания и логики до подключения. Описания магазинов расходятся даже по наличию преобразователей уровней; нельзя переносить схему фирменной платы Adafruit или характеристики голого ADXL345 на каждый GY-291. Раздел подключения ниже явно ограничен проверенной схемой питания конкретного экземпляра.

Фотореференс — исполнение, продаваемое BerryBase: продавец указывает VCC 3–5 В DC, поэтому 5 В допустимы для этого заявленного исполнения. Это характеристика предложения продавца, а не всех плат с таким названием; перед подключением проверьте соответствие экземпляра, питание датчика и уровни сигналов. Источник: BerryBase, карточка показанного модуля. Допустимость 5 В на VCC не означает 5 В на SDA/SCL и других сигналах.

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

Чип
ADXL345, Analog Devices; производитель generic-платы не установлен
Измерительные оси
3 оси ускорения; без гироскопа и магнитометра
Диапазоны ускорения
±2 g / ±4 g / ±8 g / ±16 g
Формат и разрешение
Данные в 16-битных регистрах, two’s complement. FULL_RES: около 3,9 mg/LSB, до 13 бит при ±16 g; доступен фиксированный 10-битный режим.
Интерфейсы чипа
I²C до 400 кГц; SPI 3- или 4-проводный до 5 МГц. Код карточки использует только I²C.
Адрес I²C
0x53 при SDO=GND; 0x1D при SDO=логическая 1. Для I²C CS должен быть высоким.
Частота выходных данных чипа
0,1–3200 Гц; доступная скорость чтения зависит от интерфейса. В примере 100 Гц; Serial около 20 строк/с.
FIFO чипа
32 набора трёхосевых отсчётов; в примере не используется
События
Активность/неактивность, single/double tap, free fall; INT1 и INT2
Питание именно чипа
VS 2,0–3,6 В; VDD I/O 1,7 В…VS. Это не диапазон VCC generic-платы.
Питание готовой платы
Зависит от LDO, разводки и ревизии. Требуется проверка экземпляра; 5 В на сигнальные выводы не подавать.
Исполнение
Восьмиконтактный generic GY-291; размеры, ток всей платы и точная схема не подтверждены для всех ревизий
Интерфейс
I²C, SPI
Питание модуля
Фотореференс — исполнение, продаваемое BerryBase: продавец указывает VCC 3–5 В DC, поэтому 5 В допустимы для этого заявленного исполнения. Это характеристика предложения продавца, а не всех плат с таким названием; перед подключением проверьте соответствие экземпляра, питание датчика и уровни сигналов. VCC зависит от ревизии PCB. Пример ниже применим только после проверки платы с допустимым входом VCC=5 В и исправным стабилизатором, обеспечивающим питание и логику датчика около 3,3 В. Наличие LDO не подтверждает 5-В-совместимость SDA/SCL и остальных сигналов. Подача 3,3 В на вход LDO тоже не гарантирует нужное напряжение после падения на нём. Не подавайте 5 В до проверки схемы конкретного экземпляра. Числовой диапазон питания generic-платы намеренно не задан. Чип ADXL345: VS 2,0–3,6 В; VDD I/O 1,7 В…VS.

ПРАКТИКА

Подключение

Схема подключения
Контакт модуляКонтакт платыНазначение
VCCUNO R3: 5V; ESP32: отдельный стабилизированный источник 5 ВФотореференс — исполнение, продаваемое BerryBase: продавец указывает VCC 3–5 В DC, поэтому 5 В допустимы для этого заявленного исполнения. Это характеристика предложения продавца, а не всех плат с таким названием; перед подключением проверьте соответствие экземпляра, питание датчика и уровни сигналов. До подключения MCU проверьте маркировку PCB, документацию продавца, вход/выход LDO и напряжение подтяжек SDA/SCL. Пример рассчитан на подтверждённую схему VCC=5 В → локальное питание и логика датчика около 3,3 В. Если ревизия неизвестна, сначала выясните схему питания; не ищите несуществующий универсальный вывод 3V3 и не обходите LDO наугад. Для ESP32 внешний источник питает только модуль; объедините GND, не соединяйте его +5 В с USB-питанием DevKitC.
GNDUNO R3 / ESP32: GNDОбщая земля датчика, микроконтроллера, источника и преобразователя уровней.
SDAUNO R3: A4 → HV1 / LV1 преобразователя → SDAДвунаправленный I²C-преобразователь, например BSS138. HV=5V UNO; LV=3V3 UNO для затворов и подтяжек преобразователя, только после подтверждения 3,3-В логики модуля. LV не является питанием VCC модуля. Не соединяйте выход бортового LDO с 3V3 UNO. Подтяжки каждой стороны только к её питанию; учтите уже установленные резисторы. Питайте оба узла одновременно, не оставляйте подтяжки включёнными при обесточенном датчике.
SCLUNO R3: A5 → HV2 / LV2 преобразователя → SCLТо же согласование уровней, что для SDA. Пины SDA/SCL возле AREF у UNO R3 дублируют A4/A5. Прямое подключение к 5-В шине не рекомендовано.
SDAESP32-DevKitC V4 с ESP32-WROOM-32: GPIO21Прямое соединение допустимо только после подтверждения подтяжек и сигнала около 3,3 В. При другом уровне нужен соответствующий I²C-преобразователь. GPIO не универсален для ESP32-C3/C6/S3.
SCLESP32-DevKitC V4 с ESP32-WROOM-32: GPIO22Та же проверка уровней. В коде явно заданы GPIO21/22 и частота I²C 100 кГц.
CSUNO R3: 3V3; ESP32-DevKitC V4: 3V3Только после подтверждения 3,3-В логики модуля. Это сигнал CS, не соединение выходов двух стабилизаторов. Для I²C зафиксировать высокий уровень; проверенная штатная подтяжка допустима. Не оставлять плавающим и не подключать к VCC=5 В. В SPI это активный-низкий выбор устройства.
SDOGNDВ I²C это ALT ADDRESS: GND выбирает 0x53. Высокий уровень локальной логики выбирает 0x1D; тогда меняется ADDRESS в коде. В 4-проводном SPI SDO — MISO.
INT1 / INT2Не подключены в примереВыходы программируемых прерываний; логические уровни датчика. Для UNO при использовании согласуйте уровни отдельно.
SDA / SCL в SPIВ примере SPI не подключёнSDA становится SDI/MOSI, SCL — SCLK; нужны CS и, для 4-проводного SPI, SDO/MISO. I²C-преобразователь и настройки нельзя автоматически переносить на высокоскоростной SPI.

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

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

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

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

Помоги интегрировать generic ADXL345 GY-291. Сначала уточни точную плату MCU, фото и ревизию GY-291, схему питания/подтяжек, среду и задачу. Не считай GY-291 фирменной платой Analog Devices или Adafruit. Для UNO R3 используй A4/A5 через двунаправленный I²C-преобразователь 5 В ↔ фактическая логика датчика; для ESP32-DevKitC V4 с WROOM-32 допустимы GPIO21/22 только при проверенных 3,3-В сигналах. Не подавай 5 В на CS/SDO/SDA/SCL. Настройки примера: CS=высокий уровень логики датчика, SDO=GND, адрес 0x53, ±4 g, FULL_RES, ODR 100 Гц, I²C 100 кГц; Adafruit ADXL345 1.3.4. Подготовь согласованное подключение, зависимости, полный скетч с ошибками обмена, проверку DEVID=0xE5, проверку модулем около 1 g в покое и калибровку осей. Объясни, почему акселерометр без гироскопа не измеряет угловую скорость, а динамическое ускорение искажает оценку наклона.

Библиотеки

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

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

Среда и платы
Arduino IDE 2.x; UNO R3 / ESP32-DevKitC V4 (ESP32-WROOM-32)

Пакет Arduino AVR Boards 1.8.6 либо esp32 by Espressif Systems 3.3.2; API Wire сверено по заголовкам этих версий. C3/C6/S3 требуют отдельной распиновки и адаптации защиты в коде.

I²C / Serial
100000 / 115200

Wire.setClock(100000), монитор порта 115200 бод; короткие провода, общий GND и проверенные подтяжки.

Подготовка питания
Проверенный VCC=5 В → датчик и логика около 3,3 В

До подключения MCU проверьте маркировку PCB, документацию продавца, вход/выход LDO и напряжение подтяжек SDA/SCL. Пример рассчитан на подтверждённую схему VCC=5 В → локальное питание и логика датчика около 3,3 В. Если ревизия неизвестна, сначала выясните схему питания; не ищите несуществующий универсальный вывод 3V3 и не обходите LDO наугад.

Адрес / выбор интерфейса
0x53

CS высокий относительно локального VDD I/O, SDO соединён с GND; не оставлять входы плавающими.

Arduino Library Manager
Adafruit ADXL345 1.3.4

Установите также Adafruit Unified Sensor и Adafruit BusIO.

Заголовки
Wire.h; Adafruit_ADXL345_U.h

Добавьте соответствующие #include в начало скетча; полный синтаксис показан в примере.

Объект / инициализация
Adafruit_ADXL345_Unified accel(345); accel.begin(0x53);

После Wire.begin(); bool begin проверяется. В этой версии используется глобальный Wire.

Диапазон / ODR
ADXL345_RANGE_4_G / ADXL345_DATARATE_100_HZ

setRange включает FULL_RES; номинальная чувствительность около 256 LSB/g, необходима калибровка конкретного экземпляра.

Идентификатор
DEVID 0x00 = 0xE5

Проверяется библиотекой при begin. Адрес I²C и идентификатор чипа — разные значения.

Arduino IDE: UNO R3 / ESP32-DevKitC V4, ускорение по I²C

cpp
// Arduino IDE. UNO R3 (ATmega328P) or ESP32 DevKitC V4 / WROOM-32.
// ADXL345 GY-291, I2C address 0x53: CS -> MCU 3V3, only after verifying 3.3 V sensor logic,
// SDO -> GND. UNO requires an I2C bidirectional 5 V/3.3 V level shifter.
// Inspect the exact module power circuit before connecting VCC or signals.
// Adafruit ADXL345 1.3.4 + Adafruit Unified Sensor + Adafruit BusIO.
#include <Wire.h>
#include <Adafruit_ADXL345_U.h>

constexpr uint8_t ADDRESS = 0x53;
Adafruit_ADXL345_Unified accel(345);

bool readBlock(uint8_t reg, uint8_t *dst, uint8_t count) {
  Wire.beginTransmission(ADDRESS);
  Wire.write(reg);
  if (Wire.endTransmission(false) != 0) return false;
  const uint8_t got = Wire.requestFrom(ADDRESS, count, (uint8_t)true);
  if (got != count) {
    while (Wire.available()) (void)Wire.read();
    return false;
  }
  for (uint8_t i = 0; i < count; ++i) dst[i] = Wire.read();
  return true;
}

int16_t signedLE(const uint8_t *p) {
  return (int16_t)((uint16_t)p[0] | ((uint16_t)p[1] << 8));
}

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

void setup() {
  Serial.begin(115200);
  delay(200);
#if defined(ARDUINO_AVR_UNO)
  Wire.begin(); // SDA=A4, SCL=A5, through level shifter
  Wire.setWireTimeout(25000, true); // microseconds, Arduino AVR Boards 1.8.6
#elif defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_IDF_TARGET_ESP32)
  if (!Wire.begin(21, 22)) stopWithError("I2C initialization failed");
  Wire.setTimeOut(50); // milliseconds, Arduino-ESP32
#else
#error "Select UNO R3 or classic ESP32; adapt pins for other boards explicitly."
#endif
  Wire.setClock(100000);
  if (!accel.begin(ADDRESS)) stopWithError("ADXL345 not found: check power, CS, SDO and wiring");
  accel.setRange(ADXL345_RANGE_4_G); // library also sets FULL_RES
  accel.setDataRate(ADXL345_DATARATE_100_HZ);
  uint8_t format = 0, rate = 0, power = 0;
  if (!readBlock(0x31, &format, 1) || (format & 0x0F) != 0x09 ||
      !readBlock(0x2C, &rate, 1) || (rate & 0x1F) != 0x0A ||
      !readBlock(0x2D, &power, 1) || (power & 0x08) == 0)
    stopWithError("ADXL345 configuration readback failed");
  Serial.println("ax_m_s2,ay_m_s2,az_m_s2");
}

void loop() {
  uint8_t data[6];
  // One checked burst reads all axes; getEvent() in this library always
  // returns true and is not a reliable I2C-transfer error indicator.
  if (!readBlock(0x32, data, sizeof(data))) {
    Serial.println("I2C read failed; sample discarded");
    delay(250);
    return;
  }
  constexpr float SCALE = 9.80665f / 256.0f; // nominal FULL_RES sensitivity
  Serial.print(signedLE(data) * SCALE, 3); Serial.print(',');
  Serial.print(signedLE(data + 2) * SCALE, 3); Serial.print(',');
  Serial.println(signedLE(data + 4) * SCALE, 3);
  delay(50); // about 20 output lines/s; not a lossless 100 Hz recorder
}

Полный скетч для UNO R3 и классического ESP32-DevKitC V4; платформа выбирается при компиляции. Библиотека инициализирует чип, затем Wire читает согласованный блок регистров с проверкой длины, ошибок передачи и readback настроек. Синтаксис отдельно проверен с минимальными API-заглушками; сборка настоящим Arduino toolchain, загрузка и работа на физическом модуле не выполнялись. Потерянный пакет пропускается; после сброса/переподключения питания датчика перезапустите скетч. Пример выводит около 20 строк/с и не является регистратором без потери отсчётов. Показания в м/с²; модуль вектора в покое ожидается около 9,81 м/с² с учётом смещения и ориентации. Число 256 LSB/g — номинальное, не результат калибровки. Это не детектор tap/free-fall и не SPI-пример.

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

Все проекты

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

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