Аналоговый акселерометр (Troyka-модуль)

Используйте аналоговый трёхосный акселерометр (Troyka-модуль) для определения ускорения действующее в направлении осей X, Y, Z и применения для определения ориентации объекта в пространстве: углов крена и тангажа.

Видеообзор

Подключения и настройка

Датчик общается с управляющей электроникой по трём аналоговым выходам X,Y и Z. При подключении к Arduino или Iskra JS удобно использовать Troyka Shield.

В связи с тем, что выходные данные акселерометра завязаны на опорное напряжение управляющей платы, его необходимо калибровать.

Калибровка акселерометра

Так как данные с акселерометра завязаны на опорное напряжение управляющей платы, каждый акселерометр необходимо калибровать индивидуально. Рассмотрим калибровку модуля.

Железная часть

Прошейте управляющую платформу скетчем приведённым ниже. Если вы используете платформу Arduino, скачайте и установите библиотеку TroykaAccelerometer.

Код для Arduino

AccelerometerCalibration.ino
// библиотека для работы с аналоговым акселерометром
#include <TroykaAccelerometer.h>
 
// пины подключения осей акселерометра
#define PIN_X A1
#define PIN_Y A2
#define PIN_Z A0
 
// создаём объект для работы с аналоговым акселерометром
TroykaAccelerometer accel(PIN_X, PIN_Y, PIN_Z);
 
void setup() {
  // открываем последовательный порт
  Serial.begin(9600);
}
 
void loop() {
  // выводим сырые некалиброваные значения акселерометра в Serial-порт
  Serial.print(accel.readVoltageX(),3);
  Serial.print(",");
  Serial.print(accel.readVoltageY(),3);
  Serial.print(",");
  Serial.println(accel.readVoltageZ(),3);
  delay(100);
}

Код для Iskra JS

Программная часть

  1. Скачайте и запустите утилиту AccelCalibration.
  2. В открывшимся окне выберите номер «COM-порта» управляющей платы и нажмите «Open».
  3. Последовательно нажимайте на вопросительные знаки и устанавливайте акселерометр в положение, соответствующее всплывающей картинке.
  4. После каждого замера сохраняйте текущие значения компаса с помощью кнопки «Save».
  5. Далее нажмите на кнопку «Calculate Calibration Data», после чего получите данные по каждой Оси (X, Y, Z) в вольтах:
    1. Минимальные и максимальные значения ускорения;
    2. Значения при нулевом ускорении;
    3. Чувствительность.

Сохраните полученные значения для дальнейшего использования акселерометра.

Примеры для Arduino

Для получения данных с аналогового акселерометра скачайте и установите библиотеку TroykaAccelerometer. Она переводит полученное напряжения с аналоговых портов в единицы измерения, доступ к которым осуществляется через простые и понятные функции.

В качестве примера выведем в Serial порт направление и величину ускорения свободного падения по осям X, Y, Z.

AccelerometerTest.ino
// библиотека для работы с аналоговым акселерометром
#include <TroykaAccelerometer.h>
 
// пины подключения осей акселерометра
#define PIN_X A1
#define PIN_Y A2
#define PIN_Z A0
 
// калибровочные значения одного из акселерометров
// для получения своих калибровочных значений воспользуйтесь скетчем «AccelerometerCalibration»
#define MIN_X   1.20
#define MAX_X   1.80
#define MIN_Y   1.20
#define MAX_Y   1.80
#define MIN_Z   1.25
#define MAX_Z   1.85
 
// создаём объект для работы с аналоговым акселерометром
TroykaAccelerometer accel(PIN_X, PIN_Y, PIN_Z);
 
void setup() {
  // открываем последовательный порт
  Serial.begin(9600);
  Serial.println("Serial begin is OK");
  // каждый акселерометр необходмо калибровать индивидуально
  // для получения калибровочных значений воспользуйтесь скетчем «AcelerometerCalibration»
  // калибруем акселерометр по калибровочным значениям одного из партии
  accel.calibrate(MIN_X, MAX_X, MIN_Y, MAX_Y, MIN_Z, MAX_Z);
}
 
void loop() {
  // выводим направление и величины ускорения в единицах «g»
  Serial.print(accel.readGX());
  Serial.print("\t");
  Serial.print(accel.readGY());
  Serial.print("\t");
  Serial.print(accel.readGZ());
  Serial.print("\t");
  // выводим направление и величины ускорения в «м/с²»
  Serial.print(accel.readAX());
  Serial.print("\t");
  Serial.print(accel.readAY());
  Serial.print("\t");
  Serial.println(accel.readAZ());
  delay(100);
}

Увеличение точности показаний

Акселерометр (Troyka-модуль) основан на чипе ADXL335, который в свою очередь работает от 3,3 вольт. Это значит, что на выходных пинах модуля будет максимум 3,3 вольта. В итоге с управляющими платами с 5 вольтовой логикой, например Arduino Uno, мы теряем практически половину значений АЦП, что уменьшаем точность показаний почти в два раза. Мы предлагаем небольшой лайфхак.

По умолчанию за опорное напряжение АЦП берётся опорное напряжение управляющей платы, что в случае Arduino Uno 5 вольт. Это можно изменить, тем самым увеличить точность датчика.

  1. Возьмём за опорное напряжение АЦП пин AREF и соединим его с помощью провода папа-папа с пином 3,3 вольта.
  2. В скетче необходимо сообщить Arduino, что опорное напряжение для АЦП будет браться с пина AREf. Для этого необходимо вызвать метод из библиотеки setAnalogReference с параметром EXTERNAL:
accel.setAnalogReference(EXTERNAL);

Теперь диапазон АЦП от нуля до 3,3 вольт. Что повышает точность показаний акселерометра почти в два раза.

Код прошивки

AccelerometerTestAref.ino
// библиотека для работы с аналоговым акселерометром
#include <TroykaAccelerometer.h>
 
// пины подключения осей акселерометра
#define PIN_X A1
#define PIN_Y A2
#define PIN_Z A0
 
// калибровочные значения одного из акселерометров
// для получения своих калибровочных значений воспользуйтесь скетчем «AccelerometerCalibration»
#define MIN_X   1.20
#define MAX_X   1.80
#define MIN_Y   1.20
#define MAX_Y   1.80
#define MIN_Z   1.25
#define MAX_Z   1.85
 
// создаём объект для работы с аналоговым акселерометром
TroykaAccelerometer accel(PIN_X, PIN_Y, PIN_Z);
 
void setup() {
  // открываем последовательный порт
  Serial.begin(9600);
  Serial.println("Serial begin is OK");
  // каждый акселерометр необходмо калибровать индивидуально
  // для получения калибровочных значений воспользуйтесь скетчем «AcelerometerCalibration»
  // калибруем акселерометр по калибровочным значениям одного из партии
  accel.calibrate(MIN_X, MAX_X, MIN_Y, MAX_Y, MIN_Z, MAX_Z);
  // изменяем источник опорного напряжения, на пин AREF
  accel.setAnalogReference(EXTERNAL);
}
 
void loop() {
  // выводим направление и величины ускорения в единицах «g»
  Serial.print(accel.readGX());
  Serial.print("\t");
  Serial.print(accel.readGY());
  Serial.print("\t");
  Serial.print(accel.readGZ());
  Serial.print("\t");
  // выводим направление и величины ускорения в «м/с²»
  Serial.print(accel.readAX());
  Serial.print("\t");
  Serial.print(accel.readAY());
  Serial.print("\t");
  Serial.println(accel.readAZ());
  delay(100);
}

Пример для Espruino

accelerometer-test.js
// создаём объект для работы с акселерометром и передаём ему пины подключения по трём осям
var accel = require("ADXL335").connect(A1, A2, A0);
  setInterval(function() {
    // считываем данные с акселерометра в единицах g
    var data = accel.readG();
    // выводим данные в консоль
    console.log("x: " + data[0] + " y: " + data[1] + " z: " + data[2]);
  }, 100);

Элементы платы

Аналоговый акселерометр ADXL335

Преобразователь питания

Стабилизатор NCP582 с выходом 3,3 вольта. Обеспечивает питание акселерометра ADXL335. Максимальный выходной ток составляет 150 мА.

Светодиодная индикация

Светодиод g — индикатор ускорения действующее на ось Z.

  • горит, если ускорения положительное.
  • не горит, если ускорение отрицательное.

Контакты подключения трёхпроводных шлейфов

1 группа

  • Земля (G) — Соедините с пином GND микроконтроллера.
  • Питание (V) — Соедините с пином 5V микроконтроллера.
  • Сигнальный (X) — Выход акселерометра по оси X. Подключите к аналоговому входу микроконтроллера.

2 группа

  • Сигнальный (Y) — Выход акселерометра по оси Y. Подключите к аналоговому входу микроконтроллера.
  • Сигнальный (Z) — Выход акселерометра по оси Z. Подключите к аналоговому входу микроконтроллера.
  • Не используется.

Принципиальная и монтажная схемы

Характеристики

  • Модуль акселерометра: ADXL335
  • Напряжение питания: 3.3–5 В
  • Потребляемый ток: 350 мкА
  • Выходной интерфейс: три аналоговых пина
  • Диапазон измерения:
    • в напряжении: 0–3,3 вольт
    • в единицах G: ±3g
  • Габариты: 25,4×25,4 мм

Ресурсы