Sensor ADXL345
El ADXL345 es un acelerómetro de 3 ejes digital de bajo consumo y alta resolución (13 bits), capaz de medir hasta ±16 g. Integra FIFO, generación de interrupciones por movimiento/orientación y se comunica por I²C o SPI.
Características principales
- Rango de aceleración: ±2 g/±4 g/±8 g/±16 g (configurable)
- Resolución: hasta 13 bits (~4 mg/LSB en modo full-res)
- Interfaz: I²C (hasta 400 kHz) y SPI de 4 hilos (hasta 5 MHz)
- Consumo: ~23 µA en medición continua a 10 Hz
- Frecuencia de muestreo: 0.1 Hz–3.2 kHz
- FIFO interno de 32 niveles
- Alimentación: 2.0–3.6 V
- Dimensiones del chip: 3 × 5 × 1 mm
Aplicaciones típicas
- Detección de orientación y gestos en dispositivos portátiles
- Control de juegos y realidad virtual
- Monitoreo de vibraciones y choque en maquinaria
- Sistemas de navegación inercial
- Detección de caídas en wearables y equipos médicos
Ejemplo de uso con Arduino
- Conexiones de hardware (modo I²C)
- VCC → 3.3 V del Arduino
- GND → GND del Arduino
- SDA → A4 (línea de datos I²C)
- SCL → A5 (línea de reloj I²C)
- CS → 3.3 V (selecciona I²C)
- SDO → GND (dirección I²C = 0x53; a 3.3 V cambia a 0x1D)
- Código de ejemplo
#include <Wire.h> #define ADXL345_ADDR 0x53 void writeRegister(uint8_t reg, uint8_t value) { Wire.beginTransmission(ADXL345_ADDR); Wire.write(reg); Wire.write(value); Wire.endTransmission(); } void readAcceleration(int16_t &x, int16_t &y, int16_t &z) { Wire.beginTransmission(ADXL345_ADDR); Wire.write(0x32); // dirección del registro DATAX0 Wire.endTransmission(false); Wire.requestFrom(ADXL345_ADDR, 6); uint8_t buff[6]; for (int i = 0; i < 6; i++) buff[i] = Wire.read(); x = (int16_t)(buff[1] << 8 | buff[0]); y = (int16_t)(buff[3] << 8 | buff[2]); z = (int16_t)(buff[5] << 8 | buff[4]); } void setup() { Serial.begin(9600); Wire.begin(); writeRegister(0x2D, 0x08); // POWER_CTL: activa medición writeRegister(0x31, 0x08); // DATA_FORMAT: full-res ±2g } void loop() { int16_t xRaw, yRaw, zRaw; readAcceleration(xRaw, yRaw, zRaw); float scale = 0.0039; // 4 mg/LSB Serial.print("X: "); Serial.print(xRaw * scale); Serial.print(" g "); Serial.print("Y: "); Serial.print(yRaw * scale); Serial.print(" g "); Serial.print("Z: "); Serial.println(zRaw * scale); Serial.print(" g"); delay(500); }
Disclaimer
La información proporcionada por nosotros se ofrece con fines educativos y de orientación. No nos hacemos responsables de daños, pérdidas materiales ni imprecisiones en mediciones para aplicaciones críticas.
Su fragmento dinámico se mostrará aquí...
Este mensaje se muestra porque no proporcionó un filtro y una plantilla para usar.