====== Аналоговый акселерометр (Troyka-модуль) ======
Используйте [[amp>product/troyka-analog-accelerometer?utm_source=man&utm_campaign=troyka-analog-acceleromer&utm_medium=wiki| аналоговый трёхосный акселерометр (Troyka-модуль)]] для определения ускорения действующее в направлении осей X, Y, Z и применения для определения ориентации объекта в пространстве: углов крена и тангажа.
{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer.1.jpg |}}
===== Видеообзор =====
{{youtube>tT12H-KW_L8?large}}
===== Подключения и настройка =====
Датчик общается с управляющей электроникой по трём аналоговым выходам ''X'',''Y'' и ''Z''.
При подключении к [[amp>collection/arduino?utm_source=man&utm_campaign=troyka-analog-accelerometer&utm_medium=wiki|Arduino]] или [[amp>product/iskra-js?utm_source=man&utm_campaign=troyka-analog-accelerometer&utm_medium=wiki|Iskra JS]] удобно использовать [[amp>/product/arduino-troyka-shield?utm_source=man&utm_campaign=troyka-analog-accelerometer&utm_medium=wiki|Troyka Shield]].
{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_scheme_arduino-troyka-shield.png |}}
В связи с тем, что выходные данные акселерометра завязаны на опорное напряжение управляющей платы, его необходимо [[продукты:troyka-analog-accelerometer#калибровка_акселерометра|калибровать]].
===== Калибровка акселерометра =====
Так как данные с акселерометра завязаны на опорное напряжение управляющей платы, каждый акселерометр необходимо калибровать индивидуально. Рассмотрим калибровку модуля.
==== Железная часть ====
Прошейте управляющую платформу скетчем приведённым ниже. Если вы используете платформу [[amp>collection/arduino?utm_source=man&utm_campaign=troyka-analog-accelerometer&utm_medium=wiki|Arduino]], скачайте и установите библиотеку [[https://github.com/amperka/TroykaAccelerometer|TroykaAccelerometer]].
=== Код для Arduino ===
// библиотека для работы с аналоговым акселерометром
#include
// пины подключения осей акселерометра
#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 ===
==== Программная часть ====
- {{:продукты:troyka-analog-accelerometer:accelcalibration.zip|Скачайте и запустите}} утилиту ''AccelCalibration''.{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_calibration1.png |}}
- В открывшимся окне выберите номер «COM-порта» управляющей платы и нажмите «Open».{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_calibration2x.png |}}
- Последовательно нажимайте на вопросительные знаки и устанавливайте акселерометр в положение, соответствующее всплывающей картинке.{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_calibration3x.png |}}
- После каждого замера сохраняйте текущие значения компаса с помощью кнопки «Save».{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_calibration4x.png |}}
- Далее нажмите на кнопку «Calculate Calibration Data», после чего получите данные по каждой Оси (X, Y, Z) в вольтах:
- Минимальные и максимальные значения ускорения;
- Значения при нулевом ускорении;
- Чувствительность.{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_calibration6x.png |}}
Сохраните полученные значения для дальнейшего использования акселерометра.
===== Примеры для Arduino =====
Для получения данных с аналогового акселерометра скачайте и установите библиотеку [[https://github.com/amperka/Troyka-IMU|TroykaAccelerometer]]. Она переводит полученное напряжения с аналоговых портов в единицы измерения, доступ к которым осуществляется через простые и понятные функции.
В качестве примера выведем в Serial порт направление и величину ускорения свободного падения по осям X, Y, Z.
// библиотека для работы с аналоговым акселерометром
#include
// пины подключения осей акселерометра
#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-модуль) основан на чипе {{:продукты:troyka-analog-accelerometer:adxl335_datasheet.pdf|ADXL335}}, который в свою очередь работает от 3,3 вольт. Это значит, что на выходных пинах модуля будет максимум 3,3 вольта. В итоге с управляющими платами с 5 вольтовой логикой, например [[amp>product/arduino-uno?utm_source=man&utm_campaign=troyka-analog-accelerometer&utm_medium=wiki|Arduino Uno]], мы теряем практически половину значений АЦП, что уменьшаем точность показаний почти в два раза. Мы предлагаем небольшой лайфхак.
По умолчанию за опорное напряжение АЦП берётся опорное напряжение управляющей платы, что в случае Arduino Uno 5 вольт. Это можно изменить, тем самым увеличить точность датчика.
- Возьмём за опорное напряжение АЦП пин ''AREF'' и соединим его с помощью провода [[amp>product/wire-mm?utm_source=man&utm_campaign=troyka-analog-accelerometer&utm_medium=wiki|папа-папа]] с пином 3,3 вольта. {{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_scheme_arduino-troyka-shield_aref.png |}}
- В скетче необходимо сообщить Arduino, что опорное напряжение для АЦП будет браться с пина ''AREf''. Для этого необходимо вызвать метод из библиотеки ''setAnalogReference'' с параметром ''EXTERNAL'':
accel.setAnalogReference(EXTERNAL);
Теперь диапазон АЦП от нуля до 3,3 вольт. Что повышает точность показаний акселерометра почти в два раза.
=== Код прошивки ===
// библиотека для работы с аналоговым акселерометром
#include
// пины подключения осей акселерометра
#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 =====
// создаём объект для работы с акселерометром и передаём ему пины подключения по трём осям
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);
===== Элементы платы =====
{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_annotation.png |}}
==== Аналоговый акселерометр ADXL335 ====
{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_adxl_orientation.png?nolink |}}
==== Преобразователь питания ====
Стабилизатор {{:продукты:troyka-analog-accelerometer:ncp582_datasheet.pdf|NCP582}} с выходом 3,3 вольта. Обеспечивает питание акселерометра {{:продукты:troyka-analog-accelerometer:adxl335_datasheet.pdf|ADXL335}}. Максимальный выходной ток составляет 150 мА.
==== Светодиодная индикация ====
Светодиод ''g'' — индикатор ускорения действующее на ось ''Z''.
* горит, если ускорения положительное.
* не горит, если ускорение отрицательное.
==== Контакты подключения трёхпроводных шлейфов ====
//1 группа//
* Земля (G) — Соедините с пином ''GND'' микроконтроллера.
* Питание (V) — Соедините с пином ''5V'' микроконтроллера.
* Сигнальный (X) — Выход акселерометра по оси ''X''. Подключите к аналоговому входу микроконтроллера.
//2 группа//
* Сигнальный (Y) — Выход акселерометра по оси ''Y''. Подключите к аналоговому входу микроконтроллера.
* Сигнальный (Z) — Выход акселерометра по оси ''Z''. Подключите к аналоговому входу микроконтроллера.
* Не используется.
===== Принципиальная и монтажная схемы =====
{{:продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_schematic.png?direct&350 |}}
{{ :продукты:troyka-analog-accelerometer:troyka-analog-accelerometer_layout.png?direct&300|}}
===== Характеристики =====
* Модуль акселерометра: ADXL335
* Напряжение питания: 3.3–5 В
* Потребляемый ток: 350 мкА
* Выходной интерфейс: три аналоговых пина
* Диапазон измерения:
* в напряжении: 0–3,3 вольт
* в единицах G: ±3g
* Габариты: 25,4×25,4 мм
===== Ресурсы =====
* [[amp>product/troyka-analog-accelerometer?utm_source=man&utm_campaign=troyka-analog-acceleromer&utm_medium=wiki|Акселерометр (Troyka-модуль)]] в магазине
* [[https://github.com/amperka/TroykaAccelerometer|Библиотека для Arduino]]
* [[https://www.espruino.com/ADXL335|Описание библиотеки для Espruino]]
* [[https://github.com/amperka/hardware-drawings/blob/master/troyka-analog-accelerometer.svg|Векторное изображение акселерометра]]
* {{:продукты:troyka-analog-accelerometer:adxl335_datasheet.pdf|Даташит на аналоговый акселерометр}}