IMU / Accelerometer
Interfacing ADXL345 IMU / Accelerometer with Arduino Uno
What is the ADXL345?
A compact, low-power accelerometer used for tilt sensing, tap/double-tap detection, and freefall detection in wearable projects.
Specifications
| Type | 3-axis MEMS digital accelerometer |
| Interface | I2C (up to 400kHz) or SPI (up to 5MHz), selectable via the CS pin |
| Measurement range | Selectable ±2g / ±4g / ±8g / ±16g, set via register |
| Resolution | 10-bit standard, up to 13-bit in full-resolution mode (~3.9 mg/LSB at full resolution) |
| Output data rate | Programmable, 0.1 Hz to 3200 Hz |
| Supply voltage | 2.0V–3.6V (breakout modules commonly accept 3.3-5V via onboard regulation) |
| Current draw | ~23 µA standby, ~140 µA in measurement mode (typical) |
| Built-in features | Tap/double-tap detection, free-fall detection, activity/inactivity detection, 32-sample FIFO buffer |
| I2C address | 0x53 default, 0x1D if the ALT ADDRESS pin is pulled HIGH |
ADXL345 Pinout
| Pin | Name | Description |
|---|---|---|
| 1 | VCC | Power, 3.3–5V DC depending on breakout |
| 2 | GND | Ground |
| 3 | CS | Chip select — tie HIGH (to VCC) to force I2C mode; drive LOW as part of SPI transactions to use SPI mode |
| 4 | INT1 | Programmable interrupt output 1 (e.g. tap, free-fall, activity events) |
| 5 | INT2 | Programmable interrupt output 2 — can route different event sources than INT1 |
| 6 | SDO / ALT ADDRESS | In I2C mode: pull HIGH for address 0x1D, leave LOW/floating for default 0x53. In SPI mode: serial data output |
| 7 | SDA | I2C data line (SPI: MOSI/SDI depending on breakout labeling) |
| 8 | SCL | I2C clock line (SPI: SCK) |
CS pin determines the bus mode — this trips people up because it's not obviously a "mode select" pin from the silkscreen. Tie CS to VCC for I2C; if you leave it floating on some breakout revisions, the chip can default to SPI mode and I2C reads will silently fail.
SDO doubles as the I2C address pin — this is the same physical pin used for SPI data output, repurposed in I2C mode as an address selector. Floating or grounding it gives 0x53; pulling it to VCC gives 0x1D. Useful for running two ADXL345s on one I2C bus without a multiplexer.
Full-resolution mode matters for the ±g range you pick — in 10-bit mode, selecting a wider range (±16g) trades away resolution at low-g movements. If fine tilt sensitivity matters, use full-resolution mode, which keeps ~3.9mg/LSB sensitivity regardless of the selected range.
Interrupts save you from polling — tap/double-tap/free-fall detection is computed on-chip; wiring INT1 or INT2 to a GPIO interrupt is far more responsive and power-efficient than continuously polling axis registers and computing thresholds in software.
Setting Up ADXL345 with Arduino Uno
Library
Adafruit ADXL345 by Adafruit
Search "Adafruit ADXL345" in Library Manager (Sketch > Include Library > Manage Libraries)
Wiring
| Component pin | Arduino Uno pin | Note |
|---|---|---|
| VCC | 5V (breakout regulates to 3.3V) or 3.3V | Check your breakout — most have an onboard regulator and level shifting for 5V logic |
| GND | GND | — |
| CS | VCC | Tie high to force I2C mode |
| SDA | A4 (SDA) | Uno's hardware I2C data pin |
| SCL | A5 (SCL) | Uno's hardware I2C clock pin |
Example code
The Adafruit library also needs the "Adafruit Unified Sensor" dependency — the Library Manager will prompt to install it automatically. Default I2C address is 0x53; it becomes 0x1D if you pull SDO/ALT ADDRESS high.
Related Components
Related Guides & Projects

Arduino Uno R3 Pinout: Every Pin Explained (Digital, Analog, PWM, Power)
Complete Arduino Uno R3 pinout reference: all 14 digital pins, 6 analog inputs, PWM, UART, SPI, I2C, AREF, and power rails explained with wiring tips and common mistakes.

Ultimate Arduino Mega 2560 Pinout Guide: Complete Power & I/O Reference
Master the Arduino Mega 2560 pinout. Detailed reference for all 54 digital pins, 16 analog inputs, PWM, UARTs, SPI, I2C, interrupts, and power. Includes a printable table and practical wiring tips.

Interfacing HC-SR04 Ultrasonic Sensor with Arduino
Measure distance accurately using ultrasonic sound waves and an Arduino Uno — no complex math, no expensive hardware.
HC‑SR04 Ultrasound Distance Measurement with Arduino – Parking Alert (LCD & Buzzer)
Learn HC‑SR04 ultrasound distance measurement with Arduino Uno. Build a parking alert system with 16x2 LCD and buzzer – shows distance and beeps faster as you approach.