Аналоговый акселерометр (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
Программная часть
- Далее нажмите на кнопку «Calculate Calibration Data», после чего получите данные по каждой Оси (X, Y, Z) в вольтах:
- Минимальные и максимальные значения ускорения;
- Значения при нулевом ускорении;
Сохраните полученные значения для дальнейшего использования акселерометра.
Примеры для 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 вольт. Это можно изменить, тем самым увеличить точность датчика.
- Возьмём за опорное напряжение АЦП пин
AREF
и соединим его с помощью провода папа-папа с пином 3,3 вольта. - В скетче необходимо сообщить 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 мм