Descripción
El Acelerometro ADXL345 GY-291 realiza detección de movimiento en 3 ejes con una resolución en medición (13 bits) de hasta ± 16 g. Los datos de salida se componen de 16 bits y se puede acceder a través de la interfaz digital SPI (3 o 4 cables) o I2C.
¿Para qué sirve el Acelerometro ADXL345 GY-291?
El Acelerometro ADXL345 GY-291 es ideal para:
- Aceleración estática en las aplicaciones de detección de inclinación, su alta resolución (3,9 mg / LSB) permite medir cambios de inclinación inferiores a 1,0 °
- Aceleración dinámica resultante del movimiento o el choque.
Adicional es funcional para la detección de actividad e inactividad detectando la presencia o la falta de movimiento al comparar la aceleración en cualquier eje con los umbrales establecidos por el usuario. La detección de toques detecta los toques simples y dobles en cualquier dirección. La detección de caída libre detecta si el dispositivo se está cayendo. Estas funciones se pueden asignar individualmente a cualquiera de los dos pines de salida de interrupción.
ESPECIFICACIÓN Y CARACTERÍSTICAS
- Voltaje de funcionamiento : 3 V a 5 V
- I/O rango de voltaje: 1.7 V a 3.6V
- Chip Principal: ADXL345
- Grados de libertad (DoF): 3
- Rango de medición: ± 2 g a ± 16 g (± 2g / ± 4g / ± 8g / ± 16g.)
- Rango de temperatura (−40°C to +85°C)
- Dimensiones: 3 mm × 5 mm × 1 mm
- Detección:
- Caída Libre
- Actividad/Inactividad
- De un solo toque/doble toque
- Corriente:
- 40 µA in modo medición
- 0.1 µA in 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 100kHz-400kHz
DOCUMENTACIÓN Y RECURSOS
INFORMACIÓN ADICIONAL
Uso de la interfaz I2C y conexión a Arduino.
Para utilizar el Acelerometro con la interfaz de I2C con Arduino solo requerimos utilizar los pines SDA y SCL ,conexión de tierras (GND) y alimentación a la placa (3.3V ).
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 fabrica. Para mas 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.