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