ADXL345 akcelerometr

3-osiowy akcelerometr cyfrowy

3-osiowy akcelerometr cyfrowy I2C / SPI (ADXL345)

 

Opis

Czujnik do pomiaru przyspieszeń w trzech osiach w zakresie +/- 16 g. Moduł zasilany jest napięciem od 3 do 5 V, posiada regulator napięcia, komunikuje się poprzez magistralę I2C (TWI) lub SPI. Moduł posiada niezbędne do poprawnego działania układu elementy pasywne. Wyprowadzeniami są popularne złącza goldpin, umożliwiające podłączenie czujnika za pomocą przewodów lub bezpośrednie wpięcie w płytkę stykową.

 Specyfikacja

  • Napięcie zasilania: 3 V - 5 V
  • Napięcie wyprowadzeń: 1,6 V do 3,6 V
  • Pobór prądu: ok 25 µA
    • w stanie czuwania: 0,1 µA
  • Trzy osie: X, Y, Z
  • Interfejs komunikacyjny: I2C (TWI) lub SPI
  • Rozdzielczość: 10 do13 bitów dla każdej osi
  • Zakres pomiarowy: ±16 g
  • Temperatura pracy: od -40 °C do +80 °C
  • Wymiary płytki: 28 x 15 x 11 mm
  • W zestawie także listwa goldpin

 

Wyprowadzenia

Czujnik posiada osiem wyprowadzeń do montażu złącz typu goldpin - raster 2,54 mm (w zestawie).

Nazwa

Opis

GND

Masa układu

VCC

Napięcie zasilania modułu z zakresu 3 V do 5 V

CS

Wyprowadzenie dla magistrali SPI - Chip Select.
Logiczna jedynka uruchamia magistralę I2C.

INT1

Wyjście przerwania zewnętrznego nr 1 (szczegóły w dokumentacji) 

INT2

Wyjście przerwania zewnętrznego nr 2 (szczegóły w dokumentacji) 

SDO

Wybór adresu magistrali I2C / Linia danych magistrali SPI

SCL / SCLK

Linia danych magistrali I2C (TWI)  / Linia zegarowa magistrali SPI

SDA / SDI

Linia zegarowa magistrali I2C (TWI)  / Linia danych magistrali SPI

 

 

 

Podłączenie do Arduino

GND -> GND

5V -> VCC

SDA -> SDA

SCL -> SCL

 

Przykładowy kod

Pierwszym przykładem będzie odczyt surowych wartości oraz znormalizowanych (m/s2):

 

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_ADXL345_U.h>

 

/* Assign a unique ID to this sensor at the same time */

Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);

 

void displaySensorDetails(void)

{

  sensor_t sensor;

  accel.getSensor(&sensor);

  Serial.println("------------------------------------");

  Serial.print  ("Sensor:       "); Serial.println(sensor.name);

  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);

  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);

  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" m/s^2");

  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" m/s^2");

  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" m/s^2"); 

  Serial.println("------------------------------------");

  Serial.println("");

  delay(500);

}

 

void displayDataRate(void)

{

  Serial.print  ("Data Rate:    ");

 

  switch(accel.getDataRate())

  {

    case ADXL345_DATARATE_3200_HZ:

      Serial.print  ("3200 ");

      break;

    case ADXL345_DATARATE_1600_HZ:

      Serial.print  ("1600 ");

      break;

    case ADXL345_DATARATE_800_HZ:

      Serial.print  ("800 ");

      break;

    case ADXL345_DATARATE_400_HZ:

      Serial.print  ("400 ");

      break;

    case ADXL345_DATARATE_200_HZ:

      Serial.print  ("200 ");

      break;

    case ADXL345_DATARATE_100_HZ:

      Serial.print  ("100 ");

      break;

    case ADXL345_DATARATE_50_HZ:

      Serial.print  ("50 ");

      break;

    case ADXL345_DATARATE_25_HZ:

      Serial.print  ("25 ");

      break;

    case ADXL345_DATARATE_12_5_HZ:

      Serial.print  ("12.5 ");

      break;

    case ADXL345_DATARATE_6_25HZ:

      Serial.print  ("6.25 ");

      break;

    case ADXL345_DATARATE_3_13_HZ:

      Serial.print  ("3.13 ");

      break;

    case ADXL345_DATARATE_1_56_HZ:

      Serial.print  ("1.56 ");

      break;

    case ADXL345_DATARATE_0_78_HZ:

      Serial.print  ("0.78 ");

      break;

    case ADXL345_DATARATE_0_39_HZ:

      Serial.print  ("0.39 ");

      break;

    case ADXL345_DATARATE_0_20_HZ:

      Serial.print  ("0.20 ");

      break;

    case ADXL345_DATARATE_0_10_HZ:

      Serial.print  ("0.10 ");

      break;

    default:

      Serial.print  ("???? ");

      break;

  } 

  Serial.println(" Hz"); 

}

 

void displayRange(void)

{

  Serial.print  ("Range:         +/- ");

 

  switch(accel.getRange())

  {

    case ADXL345_RANGE_16_G:

      Serial.print  ("16 ");

      break;

    case ADXL345_RANGE_8_G:

      Serial.print  ("8 ");

      break;

    case ADXL345_RANGE_4_G:

      Serial.print  ("4 ");

      break;

    case ADXL345_RANGE_2_G:

      Serial.print  ("2 ");

      break;

    default:

      Serial.print  ("?? ");

      break;

  } 

  Serial.println(" g"); 

}

 

void setup(void)

{

#ifndef ESP8266

  while (!Serial); // for Leonardo/Micro/Zero

#endif

  Serial.begin(9600);

  Serial.println("Accelerometer Test"); Serial.println("");

 

  /* Initialise the sensor */

  if(!accel.begin())

  {

    /* There was a problem detecting the ADXL345 ... check your connections */

    Serial.println("Ooops, no ADXL345 detected ... Check your wiring!");

    while(1);

  }

 

  /* Set the range to whatever is appropriate for your project */

  accel.setRange(ADXL345_RANGE_16_G);

  // displaySetRange(ADXL345_RANGE_8_G);

  // displaySetRange(ADXL345_RANGE_4_G);

  // displaySetRange(ADXL345_RANGE_2_G);

 

  /* Display some basic information on this sensor */

  displaySensorDetails();

 

  /* Display additional settings (outside the scope of sensor_t) */

  displayDataRate();

  displayRange();

  Serial.println("");

}

 

void loop(void)

{

  /* Get a new sensor event */

  sensors_event_t event;

  accel.getEvent(&event);

 

  /* Display the results (acceleration is measured in m/s^2) */

  Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print("  ");

  Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print("  ");

  Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print("  ");Serial.println("m/s^2 ");

  delay(500);

}

 

Wynik po uruchomieniu programu:

Tagi
Zbudowano na Drupalu