kz ru
Каталог

Проект 25: ADXL345 Трехосевой Акселерометр

Необходимое Оборудование

Плата Arduino UNO * 1
Датчик ADXL345 * 1
Перемычки * 1
USB - кабель * 1

Спецификация

Источник питания 2.0-3.6V DC • Ультранизкое энергопотребление 40 мкА в режиме измерения, 0.1 мкА в режиме ожидания при 2.5V • Обнаружение удара/двойного удара • Обнаружение свободного падения • Интерфейсы SPI и I2C

Подключение Схемы

 

Пример Кода

//////////////////////////////////////////////////////////
//ADXL345

#include <Wire.h>
// Регистры для ADXL345
#define ADXL345_ADDRESS (0xA6 >> 1)  // адрес устройства 8 бит, сдвинутый
                                     // вправо на 1 бит, чтобы сделать его 7-битным,
                                     // так как библиотека Wire принимает только 7-битные адреса
#define ADXL345_REGISTER_XLSB (0x32)

int accelerometer_data[3];
// Функция только указывает чипу отправить данные в его регистр вывода
// записывает данные в буфер ведомого
void i2c_write(int address, byte reg, byte data) {
  // Отправить адрес регистра вывода
  Wire.beginTransmission(address);
  // Подключиться к устройству
  Wire.write(reg);
  // Отправить данные
  Wire.write(data); // младший байт
  Wire.endTransmission();
}

// Использование указателей
// Микроконтроллер читает данные из входного регистра датчика
void i2c_read(int address, byte reg, int count, byte* data) {
  // Чтение количества полученных данных
  int i = 0;
  // Отправить адрес входного регистра
  Wire.beginTransmission(address);
  // Подключиться к устройству
  Wire.write(reg);
  Wire.endTransmission();

  // Подключиться к устройству
  Wire.beginTransmission(address);
  // Запросить данные от ведомого
  // Count - количество байтов для запроса
  Wire.requestFrom(address, count);
  while(Wire.available()) // ведомый может отправить меньше, чем запрошено
  {
    char c = Wire.read(); // получить байт как символ
    data[i] = c;
    i++;
  }
  Wire.endTransmission();
}

void init_adxl345() {
  byte data = 0;

  i2c_write(ADXL345_ADDRESS, 0x31, 0x0B);   // 13-битный режим +_ 16g
  i2c_write(ADXL345_ADDRESS, 0x2D, 0x08);   // Регистр питания

  i2c_write(ADXL345_ADDRESS, 0x1E, 0x00);   // X
  i2c_write(ADXL345_ADDRESS, 0x1F, 0x00);   // Y
  i2c_write(ADXL345_ADDRESS, 0x20, 0x05);   // Z
 
  // Проверка, работает ли!
  i2c_read(ADXL345_ADDRESS, 0X00, 1, &data);
  if(data == 0xE5)
    Serial.println("Работает успешно");
  else
    Serial.println("Работает неудачно");
}

void read_adxl345() {
  byte bytes[6];
  memset(bytes, 0, 6);

  // Чтение 6 байтов из ADXL345
  i2c_read(ADXL345_ADDRESS, ADXL345_REGISTER_XLSB, 6, bytes);
  // Распаковка данных
  for (int i = 0; i < 3; ++i) {
    accelerometer_data[i] = (int)bytes[2 * i] + (((int)bytes[2 * i + 1]) << 8);
  }
}
// Инициализация и запуск всего
void setup() {
  Wire.begin();
  Serial.begin(9600);
  for(int i = 0; i < 3; ++i) {
    accelerometer_data[i]  = 0;
  }
  init_adxl345();
}


void loop() {
  read_adxl345();
  Serial.print("ACCEL ");
  Serial.print(float(accelerometer_data[0]) * 3.9 / 1000); // масштабный коэффициент 3.9 мг/LSB в 13-битном режиме
  Serial.print("\t");
  Serial.print(float(accelerometer_data[1]) * 3.9 / 1000);
  Serial.print("\t");
  Serial.print(float(accelerometer_data[2]) * 3.9 / 1000);
  Serial.print("\n");
  delay(100);
}
//////////////////////////////////////////////////////////

 

 

После подключения согласно приведенной выше схеме и включения питания, загрузите код и откройте серийный монитор, он будет отображать трехосевое ускорение датчика и его состояние, как показано на графике ниже.

thumb

Комментарии
Отзывов еще никто не оставлял
Товары упомянутые в статье
В наличии
Предзаказ
арт. 5-23
MPU-6050 GY-521 – компактный и легкий модуль 3-х осевого акселерометра...
1300 тг 1050 тг
Предзаказ
Предзаказ успешно отправлен!
Имя *
Телефон *
Добавить в корзину
Название товара
100 тг
1 шт.
Перейти в корзину
Обратный звонок
Запрос успешно отправлен!
Имя *
Телефон *
Заказ в один клик
С помощью уведомлений о заказе можно не только получать актуальную информацию по заказу, но и иметь быстрый канал связи с магазином