Общие сведения
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;

















