Акселерометр — это прибор, позволяющий измерять ускорение тела под действием внешних сил. Схематически, этот прибор можно изобразить в виде массивного тела, которое способно передвигаться вдоль некоторой оси и соединено с корпусом пружинами. Смещение тела относительно центра оси можно измерить с помощью механической стрелки, как показано на рисунке.
В состоянии покоя тело находится на равном удалении от стенок прибора и стрелка указывает на середину шкалы. Если весь прибор толкнуть вправо (кадр B), то груз сместится по оси влево до момента, когда сила растянутой пружины уравновесит внешнюю силу. В этот момент, стрелка повернется и укажет на некоторое значение на шкале. Чем больше внешняя сила, тем дальше смещается груз, тем большее значение показывает стрелка. Когда сила перестанет действовать на тело, груз вернется на прежнее положение и прибор покажет на нулевое значение шкалы.
1. Электронный МЭМС-акселерометр
Разумеется, внешний вид современного акселерометра отличается от этой простой модели с пружинками, но не сильно. Как и прежде, для измерения ускорения нам требуется какое-то массивное тело, которое будет скользить по направляющей и удерживаться в нейтральном положении пружинками. При этом, всё это должно быть очень миниатюрным, чтобы поместиться в тот же смартфон.
На помощь приходит технология МЭМС (микроэлектромеханические системы). С помощью МЭМС удаётся выращивать механический акселерометр на кремниевой подложке таким же методом, которым создаются и обычные микросхемы.
Так выглядит МЭМС акселерометр на снимке, полученном при помощи микроскопа. Схема работы такого прибора представлена ниже.
Чтобы измерить смещение массивного тела вдоль оси прибора здесь применяется дифференциальный конденсатор. В состоянии покоя, расстояния между центральным электродом и двумя обкладками конденсатора (выделены оранжевым цветом) равны. При воздействии силы эти расстояния меняются, что в дальнейшем фиксируется специальной аналоговой измерительной системой.
Современные акселерометры имеют в своем составе сразу три измерительные оси, направленные перпендикулярно друг к другу. Это позволяет измерять ускорение тела в любом направлении.
2. Измерение углов наклона с помощью акселерометра
Все современные смартфоны умеют определять угол своего наклона относительно горизонта. Эта функция используется для автоматического поворота экрана, а также в различных играх, где управление происходит при помощи наклона. И всё это благодаря акселерометру. Но как устройство, определяющее ускорение, может помочь вычислить угол наклона?
Дело в том, что на акселерометр, как и на все тела на этой планете, действует сила гравитации. Эта сила придаёт телам ускорение когда они падают на землю. Повернем акселерометр так, чтобы его ось оказалась в вертикальном положении. В таких условиях груз сместится вниз, растянув при этом верхнюю пружину и сжав нижнюю. В этот момент акселерометр зафиксирует величину ускорения свободного падения — 9.8 м/с².
Попробуем использовать этот факт для вычисления угла наклона акселерометра относительно горизонта. Изобразим на схеме тело, на котором закреплен трёхосевой акселерометр. Обозначим эти три оси как: Xт, Yт и Zт.
Затем повернём тело на угол a вокруг оси Xт относительно системы координат мира X, Y и Z. Предполагается, что ось мира Z направлена вдоль вектора силы гравитации (вверх), а оси X и Y вдоль горизонта. Мы смотрим на всю эту систему сбоку, так что оси мира — X и тела — Xт смотрят на нас, и мы их не видим.
В таком положении акселерометр, находящийся внутри тела зафиксирует проекции силы гравитации на все три оси: Gxт,Gyт,Gzт. При этом проекция Gxт на ось Xт будет равна нулю, так как эта ось расположена вдоль горизонта. Проекции Gyт (зеленый отрезок) и Gzт можно выразить с помощью теоремы о прямоугольном треугольнике:
Gyт = G * cos(b) [1] Gzт = G * sin(b) [2]
Таким образом, зная G и одну из проекций Gyт или Gzт можно вычислить угол b отклонения акселерометра от вектора гравитации Z (от вертикальной оси):
cos(b) = Gyт/G [3] b = arccos(Gyт/G) [4]
Делая такие вычисления, важно учитывать, что G и Gyт должны измеряться в одинаковых единицах. Например, если мы преобразуем показания акселерометра к единицам гравитации (другими словами G = 1 — земная гравитация), то выражение для угла b примет вид:
b = arccos(Gyт/1) = arccos(Gyт) [5]
И напоследок, вычислим искомый угол a наклона тела относительно горизонта:
a = 90 - b = 90 - arccos(Gyт) [6]
Помним, что Gyт — это число, которое возвращает нам акселерометр.
К размышлению
Итак, мы выяснили, что одного лишь акселерометра вполне достаточно, чтобы вычислить угол наклона тела относительно горизонта. В следующем уроке мы рассмотрим конкретный пример работы с датчиком MPU6050 на Ардуино.
Однако, следует учитывать, что вычисление углов с помощью акселерометра возможно только тогда, когда прибор находится в состоянии покоя. Ведь если на прибор во время измерения подействует любая другая сила, акселерометр непременно её зафиксирует и тем самым внесет ошибку в расчеты.
Частично снять это вредное воздействие внешних сил можно с помощью фильтра низких частот, о котором мы уже рассказывали. Можно пойти вообще по другому пути — использовать не акселерометр, а гироскоп. С помощью него тоже можно вычислять углы наклона. А самый правильный способ — объединить вместе показания разных датчиков, о чем можно узнать в статье про комплементарный фильтр.
cos(b) = Gxт/G [3]
b = arccos(Gxт/G) [4]
Нет ли здесь ошибки? Ведь ось Gxт даже не построена. Я думаю:
cos(b) = Gyт/G [3]
b = arccos(Gyт/G) [4]
и далее:
b = arccos(Gxт/1) = arccos(Gxт) [5] ?
a = 90 — b = 90 — arccos(Gxт) [6] ?
Помним, что Gxт — это число, которое возвращает нам акселерометр.
Но проекция на Gxт на ось xт равна нулю в нашем случае!
Спасибо за замечание! Это была опечатка, исправили.