Общие сведения
3-осевой акселерометр ADXL345 — это миниатюрный, тонкий, мало потребляющий трех осевой акселерометр с высоким разрешением (13 бит) и диапазоном измерения до ±16 g. Цифровые результаты измерения представляются в виде 16-разрядных чисел в дополнительном коде и доступны через цифровые интерфейсы SPI или I2C.
Характеристики
- Диапазон напряжения питания: 2 - 3,6В;
 - Низкое потребление тока: 23 мкА;
 - Интерфейсы: I2C / SPI (3- и 4-проводной);
 - Диапазон рабочих температур: от -40 ° C до + 85 °C;
 - Габариты: 20.8 мм × 16 мм × 1,6 мм;
 
Подключение
Выводы SDA и SCL модуля подключаются к аппаратной шине I2C Arduino. К этим выводам необходимо подключить подтягивающие резисторы 4,7 кОм и запитать их питанием 3,3 В.
Выводы GND, VDD являются выводами питания (вывод VDD - питание модуля +3,3 В)
Выводы INT1...INT2 используются для внешнего прерывания.
Вывод SDO является выходом последовательных данных, на него подается уровень LOW, подключаем к выводу GND.
Вывод CS используется для выбора микросхемы. На него подается уровень HIGH, то есть питание модуля +3,3 В.
Питание
Напряжение питания модуля от 2,0 В до 3,6 В (по стандарту используется 3,3 В или 5 В для плат Arduino.) постоянного тока, подаётся на выводы «VDD» и «GND» модуля.
Подробнее о акселерометре
Датчик GY-291 разработан на основе чипа ADXL345. Ультранизкое энергопотребление: 23 мкА в режиме измерения и 0.1 мкА в режиме ожидания при напряжение 2.5 В.
Для работы с акселерометром рекомендуем вам воспользоваться библиотекой SparkFun_ADXL345.
Примеры
Считывание и вывод данных в монитор порта.
Для предварительной калибровки воспользуйтесь скетчем "SparkFun_ADXL345_Calibration".
Таблица подключения выводов датчика:
- SDA - подключается к линии данных SDA шины I2C или к выводу A4 Arduino UNO.
 - SCL - подключается к линии тактирования SCL шины I2C или к выводу A5 Arduino UNO.
 - GND - подключается к выводу GND Arduino UNO.
 - VDD - подключается к выводу 3V3 Arduino UNO.
 - CS - подключается к выводу 3V3 Arduino UNO.
 - SDO - подключается к выводу GND Arduino UNO.
 - INT1...INT2 - не используются.
 
#include <sparkfun_adxl345.h>         // Библиотека SparkFun ADXL345
//ADXL345 adxl = ADXL345(10);           // ИСПОЛЬЗОВАНИЕ СВЯЗИ SPI, ADXL345 (CS_PIN);
ADXL345 adxl = ADXL345();             // ИСПОЛЬЗОВАНИЕ ДЛЯ I2C КОММУНИКАЦИИ
//int interruptPin = 2;                 // Установочный вывод 2 для вывода прерывания (для большинства плат Arduino)
void setup(){
  Serial.begin(9600);                 // Запустите последовательный терминал
  Serial.println("Пример подключения акселерометра SparkFun ADXL345");
  Serial.println();
  adxl.powerOn();                     // Включите ADXL345
  adxl.setRangeSetting(16);           // Дать настройки диапазона
                                      // Принятые значения: 2g, 4g, 8g или 16g
                                      // Более высокие значения = более широкий диапазон измерения
                                      // Нижние значения = Большая чувствительность
  adxl.setSpiBit(0);                  // Конфигурирование устройства в 4-проводном режиме SPI, когда установлено значение «0» или 3-проводное SPI-режим, если установлено значение 1
                                      // По умолчанию: установите значение 1
                                      // SPI связывается с ATMega328: 11, 12 и 13 как ссылка в библиотеке SPI 
  adxl.setActivityXYZ(1, 0, 0);       // Установить активировать обнаружение движения в осях «adxl.setActivityXYZ (X, Y, Z)»; (1 == ON, 0 == OFF)
  adxl.setActivityThreshold(75);      // 62.5mg за инкремент // Устанавливаем активность // Пороги неактивности (0-255)
  adxl.setInactivityXYZ(1, 0, 0);     // Установить для обнаружения бездействия во всех осях «adxl.setInactivityXYZ (X, Y, Z)»; (1 == ON, 0 == OFF)
  adxl.setInactivityThreshold(75);    // 62.5mg за инкремент // Установить бездействие // Пороги неактивности (0-255)
  adxl.setTimeInactivity(10);         // Сколько секунд никакой активности неактивно?
  adxl.setTapDetectionOnXYZ(0, 0, 1); // Обнаружение кранов в направлениях, включенных "adxl.setTapDetectionOnX (X, Y, Z);" (1 == ON, 0 == OFF)
   // Устанавливаем значения для того, что считается TAP и что такое DOUBLE TAP (0-255)
  adxl.setTapThreshold(50);           // 62,5 мг на приращение
  adxl.setTapDuration(15);            // 625 мкс за шаг
  adxl.setDoubleTapLatency(80);       // 1,25 мс за шаг
  adxl.setDoubleTapWindow(200);       // 1,25 мс за шаг
// Устанавливаем значения для считанного FREE FALL (0-255)
  adxl.setFreeFallThreshold(7);       // (5 - 9) рекомендуется - 62,5 мг на шаг
  adxl.setFreeFallDuration(30);       // (20 - 70) рекомендуется - 5 мс за шаг
// Установка всех прерываний на вывод INT1
  //adxl.setImportantInterruptMapping(1, 1, 1, 1, 1);     //Устанавливает «adxl.setEveryInterruptMapping (однократное нажатие, двойное нажатие, свободное падение, активность, бездействие);
                                                        // Принимает только 1 или 2 значения для контактов INT1 и INT2. Это выбирает вывод на ADXL345 для использования для прерываний.
                                                        // В этой библиотеке может возникнуть проблема с использованием вывода INT2. По умолчанию для вывода INT1.
  // Включить прерывания для каждого режима (1 == ON, 0 == OFF)
  adxl.InactivityINT(1);
  adxl.ActivityINT(1);
  adxl.FreeFallINT(1);
  adxl.doubleTapINT(1);
  adxl.singleTapINT(1);
//attachInterrupt(digitalPinToInterrupt(interruptPin), ADXL_ISR, RISING);   // Прикрепить прерывание
}
/****************** ГЛАВНЫЙ КОД ******************/
/*     Показания и прерывания акселерометра    */
void loop(){
  delay(50);
  // Чтения акселерометра
  int x,y,z;   
  adxl.readAccel(&x, &y, &z);         // Прочитайте значения акселерометра и сохраните их в переменных, объявленных выше x, y, z
  // Вывод результатов в последовательный
  /* НЕОБХОДИМО УКАЗАТЬ ЦЕННОСТИ АКСЕЛЕРОМЕТРОВ X Y Z */  
  Serial.print(x);
  Serial.print(", ");
  Serial.print(y);
  Serial.print(", ");
  Serial.println(z); 
  ADXL_ISR();
  // Вы также можете избежать использования прерываний и просто запустить функции в ADXL_ISR ();
  // и помещаем его в цикл.
  // Это может пригодиться, когда это не имеет значения, когда происходит действие.
}
/********************* ISR *********************/
/* Ищите прерывания и запущенные действия    */
void ADXL_ISR() {
  // getInterruptSource очищает все инициированные действия после возврата значения
  // Не вызывать снова, пока вам не нужно будет перепроверять вызванные действия
  байтовые прерывания = adxl.getInterruptSource ();
  // Освобождение падений
  if(adxl.triggered(interrupts, ADXL345_FREE_FALL)){
    Serial.println("*** FREE FALL ***");
    //добавьте код здесь, чтобы сделать, когда ощущается свободное падение
  } 
  //  Неактивность
  if(adxl.triggered(interrupts, ADXL345_INACTIVITY)){
    Serial.println("*** Неактивность***");
     //добавляем код здесь, чтобы делать, когда ощущается неактивность
  }
  // Активность
  if(adxl.triggered(interrupts, ADXL345_ACTIVITY)){
    Serial.println("*** Активность***"); 
     //добавляем код здесь, чтобы делать, когда активность ощущается
  }
  // Обнаружение двойного касания
  if(adxl.triggered(interrupts, ADXL345_DOUBLE_TAP)){
    Serial.println("*** Обнаружение двойного касания ***");
     //добавьте код здесь, чтобы сделать, когда обнаружен 2-кратный кран
  }
  // Нажмите «Обнаружение»
  if(adxl.triggered(interrupts, ADXL345_SINGLE_TAP)){
    Serial.println("*** Нажатие ***");
     //добавьте код здесь, чтобы сделать, когда кран ощущается
  } 
}</sparkfun_adxl345.h>
Комплектация
- 1х 3-осевой акселерометр GY-291;
 - 1х Соединитель типа "ПАПА-ПАПА";
 
Ссылки
- Библиотека SparkFun_ADXL345;
 - DataSheet;
 
      
















