Descripción
El ADXL345 (ADXL-345) es un acelerómetro de 3 ejes (3 DOF: x, y, z) construido a base de unos condensadores minúsculos. El proceso de fabricación se llama miocromecanizado y a los dispositivos fabricados así se les suele denotar por las siglas MEMS. El acelerómetro tiene una pequeña masa suspendida sobre unos muelles en su interior; cuando una fuerza actúa sobre él la masa se mueve, deformando alguno de los muelles. Los micro-condensadores están unidos a esta masa y, así, varía la capacidad de ellos, al variar la distancia entre sus placas.
La salida del acelerómetro es digital, siendo posible comunicarse con él vía i2c ó SPI. Este módulo, modelo GY291 (GY-291) se puede alimentar tanto a 3,3V como a 5V. El rango de medición es ajustable, para obtener una gran precisión, siendo posibles los ajustes: ± 2g / ± 4g / ± 8g / ± 16g. El convertidor ADC interno funciona con una resolución excelente de 13bits, lo que se traduce en una resolución efectiva de hasta 40mg/bit
Si se desea, el módulo ofrece dos interrupciones (INT1, INT2) que pueden configurarse para usarlas como detección de golpes, impactos o caída libre.
Conexionado (por i2c):
- Pin Vcc del ADXL345: al pin 5V de Arduino
- Pin GND del ADXL345: al pin GND de Arduino
- Pin SCL del ADXL345: Al pin A5 de Arduino UNO o NANO.
- Pin SDA del ADXL345: al pin A4 de Arduino UNO o NANO.
- Nuestros acelerómetros:
Código de ejemplo:
#include <Wire.h>
const int DEVICE_ADDRESS = (0x53); // Dirección i2c del ADXL345
byte _buff[6];
//Definición de direcciones de los registros del ADXL345
char POWER_CTL = 0x2D;
char DATA_FORMAT = 0x31;
char DATAX0 = 0x32; //X-Axis_0
char DATAX1 = 0x33; //X-Axis_1
char DATAY0 = 0x34; //Y-Axis_0
char DATAY1 = 0x35; //Y-Axis_1
char DATAZ0 = 0x36; //Z-Axis_0
char DATAZ1 = 0x37; //Z-Axis_1
// *** CONFIGURACIÓN ***
void setup() {
Serial.begin(9600); // Monitor Serie a 9600bps
Serial.println("Iniciado...");
Wire.begin();
writeTo(DEVICE_ADDRESS, DATA_FORMAT, 0x01); //ADXL345 ajustado en rango +/- 4g
writeTo(DEVICE_ADDRESS, POWER_CTL, 0x08);
}
// *** CÓDIGO PRINCIPAL ***
void loop() {
readAccel(); //Leer datos de aceleración en ejes x, y, z
delay(500); // Espera de 500s para leer de nuevo
}
// *** FUNCIONES ***
void readAccel() { // Lectura de valores de aceleración
uint8_t numBytesToRead = 6; // Número de bytes a leer: 2 para cada eje
readFrom(DEVICE_ADDRESS, DATAX0, numBytesToRead, _buff);
//Unir los 2 bytes de cada eje
int x = (((int)_buff[1]) << 8) | _buff[0];
int y = (((int)_buff[3]) << 8) | _buff[2];
int z = (((int)_buff[5]) << 8) | _buff[4];
// Mostrar datos por monitor serie
Serial.print("x: "); Serial.print( x );
Serial.print(" y: "); Serial.print( y );
Serial.print(" z: "); Serial.println( z );
}
void writeTo(int device, byte address, byte val) { // Escritura de datos a través del i2c
Wire.beginTransmission(device);
Wire.write(address);
Wire.write(val);
Wire.endTransmission();
}
void readFrom(int device, byte address, int num, byte _buff[]) { // Lectura datos i2c
Wire.beginTransmission(device);
Wire.write(address);
Wire.endTransmission();
Wire.beginTransmission(device);
Wire.requestFrom(device, num);
int i = 0;
while(Wire.available()) {
_buff[i] = Wire.read();
i++;
}
Wire.endTransmission();
}
Más información: Hoja de datos ADXL345
0035, liquidación, oferta












Valoraciones
No hay valoraciones aún.