====== Аналоговый акселерометр (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|Даташит на аналоговый акселерометр}}