Акселерометры измеряют ускорение, часто вызываемое движением.Но когда они стоят на месте, единственное ускорение, которое ощущает акселерометр, происходит из-за того, что на него надвигается сила тяжести.
Представьте себе коробку с маленькими пружинами, торчащими прямо из боковых сторон коробки, и которую акселерометр измеряеткак сильно гравитация растягивает эти источники.Все боковые пружины изгибаются одинаково, пружина снизу все вытянута, а верхняя совсем не растянута (потому что пружина втягивается обратно в себя), поэтому акселерометр видит это какне чувствуя гравитации, или 0g (гравитация).Если повернуть коробку на 90º и следовать пружине сверху.Сейчас он сбоку и немного свисает, и датчик видит, что теперь чувствует себя .5g.Поверните еще раз на 90º, и он внизу растянется и почувствует 1г.Поверните снова на 90º, и мы снова окажемся на стороне, чувствуя, что 5 г, и снова на 90 °, мы снова на вершине, и мы чувствуем 0g.Итак, мы сделали полный оборот, и акселерометр увидел это: 0g-> .5g -> 1g -> .5g -> 0g.
Если вы посмотрите на это, это означает, что акселерометр действительно может чувствовать только различияв 180º движения, так как остальные 180 градусов - это просто зеркальное отражение.Итак, как мы можем ощутить движение на 360 градусов?
Хитрость в том, что хотя одна ось может воспринимать только разницу в 180 градусов, то же самое можно сказать и о другой оси, но они чувствуют ее по-разному.Если вы посмотрите на график справа, вы можете увидеть измеренные значения, вращаясь вокруг оси X.(X никогда не меняется, потому что он всегда направлен в одно и то же направление). Таким образом, мы можем объединить значения y и z, чтобы найти x, используя функцию тригонометрии Atan2, которая затем возвращает нам значения от -180º до 180º (но в радианах,так что это от -π до π, и мы должны его охранять).