INFORMACIÓN
El acelerómetro ADXL345 GY-291 es un sensor de tres ejes que permite medir aceleración en los ejes X, Y y Z, utilizado comúnmente en proyectos de electrónica, robótica y sistemas de navegación. Basado en el chip ADXL345 de Analog Devices, este módulo puede detectar tanto la aceleración estática (como la gravedad) como la dinámica (movimiento o vibraciones) con alta precisión y baja potencia. Es capaz de medir rangos de aceleración ajustables de ±2g, ±4g, ±8g y ±16g, y se comunica mediante interfaces I2C o SPI, lo que facilita su integración con microcontroladores.
El acelerómetro ADXL345 GY-291 se utiliza en una amplia variedad de aplicaciones donde es necesario detectar movimiento, orientación, vibraciones o aceleración en tres dimensiones. Entre sus usos más comunes se encuentran sistemas de navegación inercial, estabilización de drones y robots, detección de caídas en dispositivos médicos, control por gestos en interfaces interactivas, y monitoreo de actividad física en wearables. Gracias a su comunicación digital a través de los protocolos I2C y SPI, este sensor es altamente compatible con diversas tarjetas de desarrollo como Arduino (UNO, Mega, Nano), ESP32, ESP8266, STM32, Raspberry Pi, entre otros. Su facilidad de uso, tamaño compacto y bajo consumo de energía lo hacen ideal tanto para proyectos educativos como para desarrollos profesionales en electrónica y sistemas embebidos.
ESPECIFICACIONES Y CARACTERÍSTICAS
- Voltajes:
- Funcionamiento: 3 V a 5 V.
- I/O Rango: 1.7 V a 3.6 V.
- Chip Principal: ADXL345.
- Grados de libertad (DOF): 3.
- Rango de medición: ± 2 g a ± 16 g (± 2 g / ± 4 g / ± 8 g / ± 16 g.)
- Rango de temperatura (−40 °C a +85 °C).
- Detección:
- Caída Libre.
- Actividad/Inactividad.
- De un solo toque/doble toque.
- Corriente:
- 40 µA en modo medición.
- 0.1 µA en modo reposo.
- Resolución:
- Default: 10-bit.
- Máxima: 13 – bit a ±16 (manteniendo 4 mg/LSB como factor de escala en todos los rangos).
- Interfaz:
- SPI (3 o 4 hilos) a 5 MHz.
- I2C (2 hilos) a 100 kHz – 400 kHz.
- Dimensiones: 40 mm × 25 mm × 5 mm.
- Peso: 2 g.
DOCUMENTACIÓN Y RECURSOS
INFORMACIÓN ADICIONAL
Uso de la interfaz I2C y conexión a Arduino.
Para utilizar el Acelerómetro con la interfaz de I2C con Arduino solo se requiere utilizar los pines SDA y SCL, conexión de tierras (GND) y alimentación a la placa (3.3 V).

Código prueba para ADXL345.
Se presenta el siguiente código con la finalidad de que puedas probar el funcionamiento del MPU, cabe mencionar que se requiere calibración y los datos arrojados son de fábrica. Para más información, revisar el datasheet.
#include <Wire.h> //Librería para poder comunicarse con dispositivos por I2C
#define DEVICE (0x53) // Dirección del ADXL345 especificada en el datasheet para iniciar comunicación
byte _buff[6];
char POWER_CTL = 0x2D; //Registro de control
char DATA_FORMAT = 0x31;
char DATAX0 = 0x32; //X-Eje Data 0
char DATAX1 = 0x33; //X-Eje Data 1
char DATAY0 = 0x34; //Y-Eje Data 0
char DATAY1 = 0x35; //Y-Eje Data 1
char DATAZ0 = 0x36; //Z-Eje Data 0
char DATAZ1 = 0x37; //Z-Eje Data 1
void setup() {
Wire.begin();
Serial.begin(9600);
writeTo(DATA_FORMAT, 0x01); //Coloca al ADXL345 dentro +/- Rango de 4G para escribir el valor en 0x01 al registro DATA_FORMAT
writeTo(POWER_CTL, 0x08); //Coloca al ADXL345 en Mode Medición para escribir el valor en registro 0x08 al registro POWER_CTL
}
void loop() {
readAccel(); // función de lectura de la inclinación en x/y/z
delay(1000); // lecturas cada segundo
}
void readAccel() { //función de lectura de la inclinación en x/y/z
uint8_t dato = 6; //Lectura de 6 bit
readFrom( DATAX0, dato, _buff); //lectura del acelerómetro en el registro DATX0 de ADXL345
// cada eje tiene una resolución de 10 bits empezando desde LSM
// conversión de bytes a entero desde los buffer de lectura
int x = (((int)_buff[1]) << 8) | _buff[0];
int y = (((int)_buff[3]) << 8) | _buff[2];
int z = (((int)_buff[5]) << 8) | _buff[4];
//impresión de los valores de cada eje
Serial.print("x: ");
Serial.print( x );
Serial.print(" y: ");
Serial.print( y );
Serial.print(" z: ");
Serial.println( z );
}
void writeTo(byte address, byte val) { //función para escritura de datos en los registros
Wire.beginTransmission(DEVICE); // comienza la comunicación
Wire.write(address); // envía las direcciones de registros
Wire.write(val); // envió del valor
Wire.endTransmission(); // fin de la comunicación
}
void readFrom(byte address, int num, byte _buff[]) { // Funcion para la lectura de numero de bytes para las direcciones de registros en el buffer
Wire.beginTransmission(DEVICE); // comienza la comunicación
Wire.write(address); // envia la direccion que fue leida
Wire.endTransmission(); // fin de la transmisión
Wire.beginTransmission(DEVICE); // comienza la comunicación
Wire.requestFrom(DEVICE, num); // solicitud de 6 bytes al MPU
int i = 0;
while (Wire.available()) { // El MPU puede enviar menos datos que los requeridos(abnormal)
_buff[i] = Wire.read(); // recibe bytes en los guarda en el buffer
i++;
}
Wire.endTransmission(); // fin de la transmisión
}


























Valoraciones
No hay valoraciones aún.