
ADXL345 GY-291
Не установлен: generic-модуль · ADXL345 GY-291, generic breakout; ревизия не установлена
Трёхосевой акселерометр для наклона, движения и вибрации.
Автор: SLDV LAB
Опубликовано · Обновлено
О МОДУЛЕ
Что делает 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.
ПРАКТИКА
Подключение

| Контакт модуля | Контакт платы | Назначение |
|---|---|---|
| VCC | UNO 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. |
| GND | UNO R3 / ESP32: GND | Общая земля датчика, микроконтроллера, источника и преобразователя уровней. |
| SDA | UNO R3: A4 → HV1 / LV1 преобразователя → SDA | Двунаправленный I²C-преобразователь, например BSS138. HV=5V UNO; LV=3V3 UNO для затворов и подтяжек преобразователя, только после подтверждения 3,3-В логики модуля. LV не является питанием VCC модуля. Не соединяйте выход бортового LDO с 3V3 UNO. Подтяжки каждой стороны только к её питанию; учтите уже установленные резисторы. Питайте оба узла одновременно, не оставляйте подтяжки включёнными при обесточенном датчике. |
| SCL | UNO R3: A5 → HV2 / LV2 преобразователя → SCL | То же согласование уровней, что для SDA. Пины SDA/SCL возле AREF у UNO R3 дублируют A4/A5. Прямое подключение к 5-В шине не рекомендовано. |
| SDA | ESP32-DevKitC V4 с ESP32-WROOM-32: GPIO21 | Прямое соединение допустимо только после подтверждения подтяжек и сигнала около 3,3 В. При другом уровне нужен соответствующий I²C-преобразователь. GPIO не универсален для ESP32-C3/C6/S3. |
| SCL | ESP32-DevKitC V4 с ESP32-WROOM-32: GPIO22 | Та же проверка уровней. В коде явно заданы GPIO21/22 и частота I²C 100 кГц. |
| CS | UNO R3: 3V3; ESP32-DevKitC V4: 3V3 | Только после подтверждения 3,3-В логики модуля. Это сигнал CS, не соединение выходов двух стабилизаторов. Для I²C зафиксировать высокий уровень; проверенная штатная подтяжка допустима. Не оставлять плавающим и не подключать к VCC=5 В. В SPI это активный-низкий выбор устройства. |
| SDO | GND | В 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 / 115200Wire.setClock(100000), монитор порта 115200 бод; короткие провода, общий GND и проверенные подтяжки.
- Подготовка питания
Проверенный VCC=5 В → датчик и логика около 3,3 ВДо подключения MCU проверьте маркировку PCB, документацию продавца, вход/выход LDO и напряжение подтяжек SDA/SCL. Пример рассчитан на подтверждённую схему VCC=5 В → локальное питание и логика датчика около 3,3 В. Если ревизия неизвестна, сначала выясните схему питания; не ищите несуществующий универсальный вывод 3V3 и не обходите LDO наугад.
- Адрес / выбор интерфейса
0x53CS высокий относительно локального 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_HZsetRange включает 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-пример.
Проекты с этим компонентом
Все проектыСвязанные проекты пока не опубликованы.


