Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Датчики chevron_right Акселерометр ADXL3xx: чтение данных через analogRead()

Акселерометр ADXL3xx: чтение данных через analogRead()

Подключаем акселерометр серии ADXL3xx к Arduino и читаем значения ускорения по трём осям через аналоговые входы.

В этом уроке разберёмся, как подключить акселерометр серии ADXL3xx (например, ADXL320, ADXL321, ADXL322, ADXL330) к Arduino, считать значения ускорения по трём осям и вывести их в Serial Monitor или в любую другую программу, принимающую данные через последовательный порт.

Урок написан на базе breakout boards from Sparkfun. Adafruit® accelerometer breakout board тоже подходит, но схема подключения у него отличается.

Акселерометр ADXL3xx выдаёт ускорение по каждой оси в виде аналогового напряжения от 0 до 5 В. Чтобы считать его, достаточно стандартной функции analogRead() — никаких специальных библиотек не нужно.

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

  • Акселерометр ADXL3xx

Схема подключения

Акселерометр потребляет очень мало тока, поэтому его можно питать прямо от цифровых выходов Arduino — не нужно тянуть провода к пинам 5V и GND. Три аналоговых входа используются как цифровые I/O для питания и земли акселерометра (а также для пина самотестирования), а оставшиеся три аналоговых входа принимают аналоговые сигналы по осям X, Y, Z.

Принципиальная схема

Соединения для конфигурации, показанной выше:

Breakout Board PinSelf-TestZ-AxisY-AxisX-AxisGroundVDD
Arduino Analog Input Pin012345

Если вы подключаете только сам акселерометр (без дополнительных компонентов):

ADXL3xx PinSelf-TestZOutYOutXOutGroundVDD
Arduino Pin_None_ (unconnected)Analog Input 1Analog Input 2Analog Input 3GND5V

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

Код

Подключения акселерометра задаются константами в начале скетча. Аналоговые пины 4 и 5 используются как источник питания — для этого они переводятся в режим цифровых выходов D18 и D19. Если нужно, A0 соответствует D14, A1 — D15 и так далее.

const int groundpin = 18; const int powerpin = 19;

Пин 19 (A5) настраивается как HIGH, пин 18 (A4) — как LOW. Это обеспечивает акселерометру питание 5 В при токе в несколько миллиампер.

pinMode(groundpin, OUTPUT); pinMode(powerpin, OUTPUT); digitalWrite(groundpin, LOW); digitalWrite(powerpin, HIGH);

Такой подход позволяет подключить breakout boards from Sparkfun напрямую к плате без дополнительных проводов к шинам питания. На других платах акселерометр можно подключить к стандартным пинам 5V (или 3,3V) и GND — тогда строки выше в секции void setup() можно закомментировать.

/*

  ADXL3xx

  Считывает данные с акселерометра Analog Devices ADXL3xx и передаёт

  значения ускорения на компьютер. Назначение пинов совместимо с платами

  расширения от SparkFun, доступными по адресу:

  http://www.sparkfun.com/commerce/categories.php?c=80

  Схема подключения:

  - analog 0: самотестирование акселерометра

  - analog 1: z-axis

  - analog 2: y-axis

  - analog 3: x-axis

  - analog 4: ground

  - analog 5: vcc

  создан 2 июля 2008

  автор David A. Mellis

  изменён 30 августа 2011

  автор Tom Igoe

  Этот пример кода находится в открытом доступе.

  https://www.arduino.cc/en/Tutorial/ADXL3xx

*/

// константы для обозначения пинов (не изменяются):

const int groundpin = 18;             // analog input pin 4 — земля

const int powerpin = 19;              // analog input pin 5 — питание

const int xpin = A3;                  // ось X акселерометра

const int ypin = A2;                  // ось Y акселерометра

const int zpin = A1;                  // ось Z (только для трёхосевых моделей)

void setup() {

  // инициализация последовательного порта:

  Serial.begin(9600);

  // Используем аналоговые входы как обычные цифровые пины для подачи GND и питания.

  // Это позволяет подключить плату расширения напрямую к

  // Arduino. Если используете стандартные пины 5V и GND на Arduino,

  // эти строки можно удалить.

  pinMode(groundpin, OUTPUT);

  pinMode(powerpin, OUTPUT);

  digitalWrite(groundpin, LOW);

  digitalWrite(powerpin, HIGH);
}

void loop() {

  // вывод значений датчика:

  Serial.print(analogRead(xpin));

  // разделитель между значениями — табуляция:

  Serial.print("\t");

  Serial.print(analogRead(ypin));

  // разделитель между значениями — табуляция:

  Serial.print("\t");

  Serial.print(analogRead(zpin));

  Serial.println();

  // задержка перед следующим считыванием:

  delay(100);
}

Практические замечания

  • Если показания по всем осям нулевые или зашкаливают — проверьте правильность питания и не перепутаны ли пины X/Y/Z.
  • Убедитесь, что скорость Serial Monitor совпадает со скоростью, заданной в Serial.begin().
  • Акселерометр чувствителен к вибрации и наклону платы. При отладке кладите плату на ровную поверхность и проверяйте, что одна из осей показывает около 512 (горизонталь, 0°).
  • Если вы используете плату с логикой 3,3 В (например, Arduino Due или MKR-серию), убедитесь, что акселерометр также рассчитан на 3,3 В.

Данные и интерпретация

Ниже приведены значения, полученные при наклоне оси Y акселерометра ADXL322 (диапазон ±2g) под разными углами к горизонту. Для других осей значения должны быть аналогичными, однако могут незначительно отличаться из-за разброса характеристик конкретного экземпляра. При горизонтальном положении оси (параллельно земле, 0°) значение analogRead() должно быть около 512. Для акселерометра с другим диапазоном (например, ADXL302 ±5g) значения при тех же углах будут иными.

Angle-90-80-70-60-50-40-30-20-100
Acceleration662660654642628610589563537510
Angle0102030405060708090
Acceleration510485455433408390374363357355

Узнать больше

Дополнительные базовые уроки собраны в разделе built-in examples.

Также рекомендуем заглянуть в language reference — подробный справочник по языку программирования Arduino.

Последняя редакция: 28.07.2015, SM