Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Датчики chevron_right Акселерометр Memsic 2125: измерение ускорения с Arduino

Акселерометр Memsic 2125: измерение ускорения с Arduino

Подключаем двухосевой акселерометр Memsic 2125 к Arduino и читаем данные об ускорении через Serial Monitor.

Акселерометр Memsic 2125 (datasheet) — двухосевой accelerometer, способный измерять ускорение в диапазоне ±2g. Его интерфейс прост до элегантности: два вывода (по одному на каждую ось) генерируют импульсы, длительность которых напрямую соответствует измеряемому ускорению. Измеряя ширину этих импульсов в микросекундах с помощью функции pulseIn(), можно вычислить ускорение по каждой оси и использовать эти данные в своём проекте.

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

  • Arduino Board
  • Акселерометр Memsic 2125
  • Соединительные провода
  • Макетная плата

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

На корпусе Memsic 2125 есть небольшой треугольник — он указывает правильную ориентацию датчика на макетной плате. Не пропустите его: если установить сенсор в обратную сторону, данные будут некорректными.

Подключите выводы 5V и GND акселерометра к соответствующим шинам питания и земли на плате. Вывод X out соедините с цифровым пином 2, а вывод Y out — с цифровым пином 3.

Важно: Arduino должна быть подключена к компьютеру через USB, иначе данные не появятся в Serial Monitor.

Схема подключения акселерометра Memsic 2125 к плате Arduino UNO на макетной плате. Обратите внимание на ориентацию микросхемы по метке-треугольнику.

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

Принципиальная схема: акселерометр (Акселерометр) Memsic 2125 (Mx2125) подключён к Arduino UNO. Выводы X out и Y out идут на пины 2 и 3, питание — от 5V.

Код

Откройте Serial Monitor в Arduino IDE, чтобы наблюдать значения, считываемые с акселерометра в реальном времени.

/*

  Memsic2125

  Считывание данных с двухосевого акселерометра Memsic 2125. Преобразует импульсы,

  выдаваемые 2125, в милли-g (1/1000 земного притяжения) и выводит их через

  последовательное соединение на компьютер.

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

    - выход X акселерометра к цифровому пину 2

    - выход Y акселерометра к цифровому пину 3

    - +V акселерометра к +5V

    - GND акселерометра к земле

  создано 6 ноября 2008

  автор David A. Mellis

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

  автор Tom Igoe

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

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

*/

// эти константы не изменяются:

const int xPin = 2;     // выход X акселерометра

const int yPin = 3;     // выход Y акселерометра

void setup() {

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

  Serial.begin(9600);

  // инициализация пинов, подключённых к акселерометру, как входов:

  pinMode(xPin, INPUT);

  pinMode(yPin, INPUT);
}

void loop() {

  // переменные для считывания длительности импульсов:

  int pulseX, pulseY;

  // переменные для хранения результирующих ускорений

  int accelerationX, accelerationY;

  // считывание импульсов по осям X и Y:

  pulseX = pulseIn(xPin, HIGH);

  pulseY = pulseIn(yPin, HIGH);

  // преобразование длительности импульса в ускорение

  // accelerationX и accelerationY выражены в милли-g:

  // земное притяжение равно 1000 милли-g, или 1 g.

  accelerationX = ((pulseX / 10) - 500) * 8;

  accelerationY = ((pulseY / 10) - 500) * 8;

  // вывод ускорения

  Serial.print(accelerationX);

  // вывод символа табуляции:

  Serial.print("\t");

  Serial.print(accelerationY);

  Serial.println();

  delay(100);
}

Как это работает

Memsic 2125 использует принцип широтно-импульсной модуляции (ШИМ) для передачи данных. Каждый из выводов (X out, Y out) генерирует периодический импульс с частотой около 100 Гц. При нулевом ускорении (горизонтальное положение) скважность импульса составляет примерно 50% — то есть сигнал HIGH держится столько же, сколько LOW.

Когда датчик наклоняется или испытывает ускорение, длительность HIGH-части импульса меняется. Функция pulseIn() измеряет эту длительность в микросекундах, и по полученному значению можно рассчитать угол наклона или величину ускорения.

Типичные ошибки

  • Неверная ориентация датчика. Всегда ориентируйтесь по треугольной метке на корпусе. Перевёрнутый датчик даст инвертированные или нулевые показания.
  • Нестабильные показания при длинных проводах. Если провода длиннее 10–15 см, добавьте конденсатор 100 нФ между 5V и GND рядом с датчиком — это сгладит помехи по питанию.
  • Serial Monitor не показывает данные. Убедитесь, что скорость порта в мониторе совпадает со скоростью, указанной в Serial.begin() в скетче.
  • Значения не меняются при наклоне. Проверьте, что пины X out/Y out подключены именно к пинам 2 и 3, а не к аналоговым входам.

Как проверить результат

  1. Загрузите скетч и откройте Serial Monitor (Ctrl+Shift+M).
  2. Положите плату горизонтально — значения по обеим осям должны быть близки к нулю (или к базовому значению, соответствующему 1g под действием гравитации).
  3. Наклоните плату вперёд/назад — значение по оси X начнёт меняться.
  4. Наклоните влево/вправо — изменится значение по оси Y.
  5. Резкое движение платой вверх или вниз вызовет кратковременный всплеск по обеим осям.

Где пригодится

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

Дополнительные материалы

Больше базовых уроков вы найдёте в разделе built-in examples.

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

Последнее обновление: 29.07.2015, SM