Как работает акселерометр? Взаимодействие ADXL335 с Arduino
Вы когда-нибудь задумывались, как ваш смартфон отличает верх от низа? Это одна из самых классных функций современных смартфонов. У всех из них есть встроенное в схему крошечное устройство под названием акселерометр, которое может понимать, когда вы наклоняете его с одной стороны на другую. Таким образом, ваш смартфон автоматически определяет, когда нужно переключить положение экрана с портретного на альбомное.
Как работает акселерометр? Взаимодействие ADXL335 с Arduino
Акселерометры широко используются в чувствительных к движению и наклону приложениях с низким энергопотреблением, таких как мобильные устройства, игровые системы, защита дисков, стабилизация изображений, спортивные и медицинские устройства.
Давайте внимательнее посмотрим, что это, что они делают, и как работают.
Что такое ускорение?
Блестящий ученый Исаак Ньютон в своем втором законе движения определил ускорение, связав его с массой и силой.
Если у вас есть определенная сила (скажем, сила в вашей ноге, когда вы пинаете ею), и вы применяете ее к массе (футбольный мяч), вы заставляете массу ускоряться (мяч отлетит в воздухе).
Сила = Масса х Ускорение
Ускорение = Сила / Масса
Другими словами, ускорение – это количество силы, которое нам нужно для перемещения каждой единицы массы.
Как работает акселерометр?
Чтобы узнать, как работают акселерометры, полезно представить шар внутри трехмерного куба.
Рисунок 1 – Невесомость
Предположим, что куб находится в космическом пространстве, где всё находится в невесомом состоянии, шар просто будет плавать в середине куба.
Теперь давайте представим, что каждая стена представляет определенную ось.
Если мы внезапно переместим куб влево с ускорением 1g (единичное усилие 1g эквивалентно гравитационному ускорению 9,8 м/с 2 ), без сомнения, мяч ударится в стену X. Если мы измерим силу, которую мяч применяет к стене X, мы можем получить выходное значение 1g по оси X.
Рисунок 2 – Внезапное движение
Давайте посмотрим, что произойдет, если мы перенесем этот куб на Землю. Мяч просто упадет на стенку Z и применит силу 1g, как показано на рисунке ниже:
Рисунок 3 – Сила тяжести
В этом случае куб не перемещается, но мы всё равно получаем значение 1g по оси Z. Это потому, что сила тяжести тянет шар вниз с силой 1g.
Акселерометр измеряет статическое ускорение силы тяжести в приложениях, чувствительных к наклону, а также динамическое ускорение, возникающее в результате движения, удара или вибрации.
Как работает MEMS акселерометр?
Акселерометр MEMS (Micro Electro Mechanical Systems) состоит из микромеханической структуры, построенной поверх кремниевой пластины.
Рисунок 4 – Внутренняя работа MEMS акселерометра ADXL335
Эта конструкция подвешена на поликремниевых пружинах. Это позволяет конструкции отклоняться, когда к определенной оси применяется ускорение.
Из-за прогиба емкость между неподвижными пластинами и пластинами, прикрепленными к подвешенной конструкции, изменяется. Это изменение емкости пропорционально ускорению по этой оси.
Датчик обрабатывает это изменение емкости и преобразует его в аналоговое выходное напряжение.
Обзор аппаратного обеспечения акселерометра ADXL335
Основой модуля является небольшой трехосный MEMS акселерометр с низким энергопотреблением и с чрезвычайно низким уровнем шума от Analog Devices – ADXL335. Датчик имеет полный диапазон чувствительности ±3g. Он может измерять статическое ускорение, вызванное силой тяжести в приложениях, чувствительных к наклону, а также динамическое ускорение, вызванное движением, ударом или вибрацией.
Рисунок 5 – Обзор аппаратного обеспечения модуля акселерометра ADXL335
Датчик работает при питании от 1,8 до 3,6 В (оптимально 3,3 В) и обычно потребляет ток всего 350 мкА. Однако встроенный стабилизатор 3,3 В делает его идеальным выбором для взаимодействия с микроконтроллерами 5 В, такими как Arduino.
Эта дружественная макетная плата разводит каждый вывод ADXL335 на 6-выводный разъем с шагом 0,1 дюйма. Сюда входят 3 аналоговых выхода для измерений по осям X, Y и Z, 2 вывода питания и вывод самотестирования, который позволяет проверить работу датчика в конечном приложении.
Аналоговые выходы являются относительными, что означает, что выходной сигнал 0g номинально равен половине напряжения питания 3,3 В (1,65 В), -3g соответствует выходному напряжению 0 В, и 3g соответствует 3,3 В с полным масштабированием между ними.
Ниже приведена таблица с основными характеристиками микросхемы акселерометра ADXL335.
Рабочее напряжение | 1,8 В — 3,6 В |
---|---|
Рабочий ток | 350 мкА (типовой) |
Диапазон чувствительности | ±3g (полная шкала) |
Диапазон температур | от -40° до + 85° C |
Чувствительные оси | 3 оси |
Чувствительность | от 270 до 330 мВ/g (относительно) |
Ударопрочность | до 10000g |
Размер | 4мм х 4мм х 1,45 мм |
Для более подробной информации обратитесь к техническому описанию по ссылке ниже.
Распиновка акселерометра ADXL335
Прежде чем погрузиться в подключения и примеры кода, давайте сначала взглянем на распиновку модуля акселерометра.
Рисунок 6 – Распиновка модуля акселерометра ADXL335
Вывод VCC обеспечивает питание для акселерометра, который может быть подключен к 5 В на Arduino.
Вывод Выход X выводит аналоговое напряжение, пропорциональное ускорению, приложенному к оси X.
Вывод Выход Y выводит аналоговое напряжение, пропорциональное ускорению на оси Y.
Вывод Выход Z выводит аналоговое напряжение, пропорциональное ускорению на оси Z.
Вывод GND подключается к выводу GND на Arduino
Вывод ST (Self-Test) контролирует функцию самопроверки. Эта функция подробно обсуждается в конце.
Подключение акселерометра ADXL335 к Arduino UNO
Теперь, когда у нас есть полное представление о том, как работает акселерометр ADXL335, мы можем начать подключать его к нашей плате Arduino.
Подключение довольно простое. Начните с установки акселерометра на макетной плате. Подключите вывод VCC к выводу 5V на Arduino, а вывод GND – к выводу GND на Arduino. Также подключите выходы X, Y и Z к аналоговым выводам A0, A1 и A2 на Arduino.
Для получения точных результатов, нам нужно изменить опорное аналоговое напряжение (AREF) на Arduino. Это можно сделать, подключив вывод 3,3V на Arduino к выводу AREF.
Когда вы закончите, у вас должно получиться что-то похожее на показанное на рисунке ниже.
Рисунок 7 – Подключение модуля акселерометра ADXL335 к Arduino UNO
Итак, теперь, когда мы подключили наш акселерометр, пришло время написать код и протестировать его.
Код Arduino – чтение показаний акселерометра ADXL335
Скетч довольно прост. Он просто отображает калиброванное выходное напряжение датчика для каждой оси через последовательный интерфейс. Протестируйте скетч, прежде чем мы начнем его подробный разбор.
Скетч начинается с объявления аналоговых входных выводов Arduino, к которым подключены выходные выводы X, Y и Z датчика.
Далее мы определяем минимальные и максимальные значения, которые Arduino собирается предоставить. Поскольку плата Arduino содержит 10-разрядный аналого-цифровой преобразователь, она отобразит выходные напряжения датчика в диапазоне от 0 до 3,3 В в целочисленные значения в диапазоне от 0 до 1023. Именно поэтому для RawMin установлено значение 0, а для RawMax установлено значение 1023.
Переменная sampleSize указывает Arduino брать 10 отсчетов каждого преобразования, чтобы получить более точные результаты.
В функции setup() мы должны установить аналоговое опорное напряжение на EXTERNAL , так как мы подключили 3,3 В к выводу AREF на Arduino. Это делается путем вызова analogReference(EXTERNAL) .
Кроме этого, мы инициализируем здесь и последовательную связь с компьютером.
ПРЕДУПРЕЖДЕНИЕ
Если вы не вызовите analogReference(EXTERNAL) , вы закоротите вместе активный источник опорного напряжения (внутренний) и вывод AREF, что, возможно, приведет к повреждению микроконтроллера на плате Arduino..
В функции loop() мы считываем аналоговые выходы датчика каждые 200 мс. Вместо вызова функции analogRead() мы вызываем пользовательскую функцию ReadAxis() . Эта функция просто берет 10 выборок АЦП и возвращает среднее значение.
Преобразование показаний ADXL335 в ускорение (g)
Следующий фрагмент кода является наиболее важной частью программы. Он преобразует аналоговые выходные напряжения датчика в ускорение свободного падения (g).
Встроенная в IDE функция map() выполняет фактическое преобразование. Таким образом, когда мы вызываем map(xRaw, RawMin, RawMax, -3000, 3000) , значение RawMin будет преобразовываться в -3000 , значение RawMax – в 3000 , а значения между ними – в промежуточные значения.
Значения -3000 и 3000 не являются произвольными. Они фактически представляют ускорение свободного падения (в милли-g, которое составляет 1/1000 g), измеренное датчиком, то есть ± 3g (от -3000 до 3000 милли-g).
- Когда датчик выдает 0 вольт на оси x, то есть xRaw = 0, функция map() возвращает -3000, представляющие -3g.
- Когда датчик выдает 3,3 вольта по оси x, то есть xRaw = 1023, функция map() вернет 3000, представляющие +3g.
- Когда датчик выдает 1,65 В на оси x, т.е. xRaw = 511, функция map() вернет 0, представляющий 0g.
Термин относительный будет иметь больше смысла, когда выходное напряжение будет увеличиваться линейно с ростом ускорения в заданном диапазоне.
Наконец, выходной сигнал датчика уменьшается до дробного значения g с помощью деления на 1000 и выводится в монитор последовательного порта.
На следующих рисунках показан вывод данных акселерометра в монитор последовательного порта в разных положениях.
Рисунок 8 – Вывод акселерометра ADXL335 на оси X —
Рисунок 9 – Вывод акселерометра ADXL335 на оси Y +
Рисунок 10 – Вывод акселерометра ADXL335 на X +
Рисунок 11 – Вывод акселерометра ADXL335 на оси Y —
Рисунок 12 – Вывод акселерометра ADXL335 на оси Z +
Рисунок 13 – Вывод акселерометра ADXL335 на оси Z —
Функция самотестирования ADXL335
Акселерометр ADXL335 имеет функцию самопроверки, которая позволяет проверить работу датчика в конечном приложении.
Рисунок 14 – Вывод ST (самопроверка) на модуле управляет этой функцией
Когда контакт ST подключен к 3,3 В, на пластину акселерометра внутри действует электростатическая сила. Результирующее движение пластины позволяет пользователю проверить работоспособность акселерометра.
Типичное изменение выходного сигнала:
- -1,08 g (-325 мВ) по оси X
- +1.08 g (+325 мВ) по оси Y
- +1,83 g (+550 мВ) по оси Z
Этот вывод ST при нормальном использовании может быть подключен к земле или оставлен «висеть» в воздухе.
ПРЕДУПРЕЖДЕНИЕ
Подача на вывод ST напряжения выше 3,6 В может привести к повреждению акселерометра.
Обзор модуля GY-521 (MPU-6050)
Наверное задумывались, как телефон определяет вверх и низ, а так же наклоны. Все это стало возможно с появлением устройств акселерометр и гироскопу. Таким образом, телефон автоматически определяет, когда нужно переключить расположение экрана с портретного на альбомное. В статье расскажу о модуле GY-521 на чипе MPU-6050, который содержит в себе MEMS гироскоп и MEMS акселерометр и датчик температуры.
Технические параметры.
► Основная микросхема: MPU-6050
► Напряжение питания: 3.3 и 5 В
► Режимы для акселерометра: ±2g, ±4g, ±6g, ±8g, ±16g;
► Режимы для гироскопа: ±250°, ±500°, ±1000°, ±2000°;
► Ширина шины IIC: 16 бит;
Общие сведения.
Основная микросхема модуль GY-521 чип MPU-6050 , который содержит в себе акселерометр и гироскоп, а так же датчик температуры. Обработка данных осуществляется с помощью 16-битное АЦП (Аналого-цифровой преобразователь) на каждый канал, поэтому он обрабатывает значение x, y и z одновременно. Встроенный датчик температуры предназначен для измерения температуры и имеет диапазон измерений от -40 ° С до + 85 ° С.
Для взаимодействия с Arduino используется шина I2C и датчик MPU-6050 всегда выступает в качестве подчиненного устройства. Но кроме обычной шины I2C, есть собственный контроллер I2C, в котором MPU-6050 ведомый, выводы SDA и XDA и с помощью это шины можно управлять например магнитометром и передавать данные на Arduino.
Гироскоп – инструмент, который позволяет измерить реакцию тела на перемещение углов и вообще ориентации. Акселерометр же служит измерителем проекции ускорения, которое только кажется.
Датчика MPU-6050 работает от напряжение
2.4 — 3.5 В и чтобы стабилизировать питание, на модуле GY-521 добавили стабилизатор напряжения на 3.3 В с малым падением напряжении, поэтому модуль можно подключить к напряжению 5 В и 3.3 В.
На плате установлен один ряд разъема, шагом 2,54 мм, назначение каждого можно посмотреть ниже.
Назначение выводов:
► VCC – «+» питание модуля 3.3 В до 5 В
► GND – «-» питание модуля
► SCL – линия синхронизации для протокола I2C
► SDA – линия передачи данных протокола I2C
► XDA – линия передачи данных протокола при работе в режиме мастера
► XCL – линия синхронизации для протокола I2C при работе в режиме мастера
► AD0 – если вывод лог «0» адрес I2C будет 0x68, если вывод лог «1» адрес I2C будет 0x69
► INT – прерывание
Подключение GY-521 к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► 3-осевой гироскоп акселерометр GY-521 x 1 шт.
Подключение:
В примере будем использовать только первые четыре контакта VCC, GND, SDA и SCL. Сначала подключаем VCC и GND модуля GY-521 к 5V и GND. Далее нужно установить соединение I2C между модулем GY-521 и Arduino, для этого подключите вывод SCL модуля к выводу А4 Arduino и вывод модуля SCL к выводу A5 Arduino. Для удобства приведу схему подключение.
Программа:
Чтобы протестировать модуль GY-521 сначала необходимо установить библиотеку «MPU6050» , скачать ее можно в конце статьи. Если все сделали правильно, при открытии Arduino IDE вы можете увидеть «MPU6050» в «Файл» -> «Примеры».
Урок 11. Подключение гироскопа GY-521 MPU-6050 к Arduio.
Модуль Gy-521 выполнен на базе микросхемы MPU6050, это 3-осевой гироскоп и акселерометр. Данную модель можно использовать для определения положения в пространстве.
В данном уроке нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
В данном уроке рассмотрим библиотеку, которая позволяет преобразовать показания координат X и Y.
Подключение модуля производится следующим образом.
Gy-521 (mpu6050) | Arduino (Uno) |
---|---|
VCC | 3.3 V |
GND | GND |
SCL | A5 |
SDA | A4 |
Для питания модуля необходимо использовать строго 3.3V! Для этого можно использовать преобразователь напряжения на 3.3V.
Пришло время записать следующий скетч в нашу Arduino:
Данный пример пересчитывает координату X и Y и выводит в консоль (Монитор последовательного порта)
Когда X и Y равны 180, значит гироскоп находится в горизонтальной плоскости.
Подключения акселерометра ADXL345 к Arduino
Статья о принципах работы модуля GY-291 на микросхеме ADXL345. Это цифровой трехосевой акселерометр.
Акселерометры используют для определения вектора ускорения. Акселерометр ADXL335 имеет три оси, и благодаря этому он может определять вектор ускорения в трёхмерном пространстве. Ввиду того, что сила земного притяжения — это тоже вектор, то акселерометр может определять свою собственную ориентацию в трёхмерном пространстве относительно центра Земли.
На иллюстрации приведены рисунки из паспорта на акселерометр ADXL335.
Посмотреть даташит микросхемы ADXL345 (формат PDF размер 847 КБ)
Здесь изображены координатные оси чувствительности акселерометра по отношению к геометрическому размещению корпуса устройства в пространстве, а также таблица значений напряжения с 3-х каналов акселерометра в зависимости от его ориентации в пространстве. Данные в таблице приводятся для находящегося в состоянии покоя датчика.
Рассмотрим подробнее, что же показывает нам акселерометр.
Пусть датчик лежит горизонтально, например, на столе. Тогда проекция вектора ускорения будет равна 1g по оси Z, или Zout = 1g. По остальным двум осям будут нули: Xout = 0 и Yout = 0.
При повороте датчика «на спину», он будет направлен в противоположную сторону относительно вектора силы тяжести, т.е. Zout = -1g.
Аналогично измерения снимаются по всем трём осям.
Понятно, что акселерометр может быть расположен как угодно в пространстве, поэтому со всех трёх каналов мы будем снимать отличные от нуля показания.
Если датчик сильно тряхнуть вдоль вертикальной оси Z, то значение Zout будет больше, чем «1g». Диапазон измерения от 2g до 16g по каждой из осей в любом из направлений (т.е. как с «плюсом», так и с «минусом»).
Чип аналогового акселерометра ADXL335 довольно мелкий и помещён в BGA корпус, и в домашних условиях его сложно смонтировать на плату.
Рассмотрим подключение акселерометра ADXL335 на примере готового модуля GY-291.
Принципиальная схема модуля GY-291 на базе микросхемы ADXL345.
Для питания акселерометра необходимо подать на вывод VCC модуля напряжение 3,3 В или 5 В. Измерительные каналы датчика подключаются к аналоговым выводам Arduino.
Библиотеки для подключения 3-осевого акселерометра GY-291 на чипе ADXL345.