Где верх?
Что мы сделаем в первую очередь?
Проверим здравый смысл!
Вы уже должны уметь написать программу, которая непрерывно выводит данные акселерометра в консоль RTT, — см. главу про I2C. Моя программа находится в examples/show-accel.rs в той главе. Замечаете ли вы что-нибудь интересное, даже если держать плату параллельно полу обратной стороной вверх? (Помните, что акселерометр установлен на обратной стороне платы, так что при таком положении «вверх ногами» ось Z смотрит вверх.)
Держа плату так, вы должны увидеть, что значения X и Y довольно близки к 0, а значение Z — около 1000. Это странно: плата не движется, но её ускорение ненулевое. В чём дело? Наверное, дело в гравитации, верно? Ведь ускорение свободного падения равно 1 g (ага, 1 g = -1000 у акселерометра). Но гравитация тянет предметы вниз, поэтому ускорение по оси Z должно было бы быть положительным, а не отрицательным.
Может, программа перепутала направление оси Z? Нет: можно проверить, поворачивая плату так, чтобы гравитация оказалась вдоль оси X или Y, — но ускорение, которое измеряет акселерометр, всегда направлено вверх.
Происходит вот что: акселерометр измеряет собственное ускорение платы, а не то ускорение, которое наблюдаете вы. Собственное ускорение — это ускорение платы с точки зрения наблюдателя в свободном падении. Наблюдатель в свободном падении движется к центру Земли с ускорением 1g; с его точки зрения плата на самом деле движется вверх (от центра Земли) с ускорением 1g. Вот почему собственное ускорение направлено вверх. Это также означает, что если бы плата находилась в свободном падении, акселерометр показывал бы собственное ускорение, равное нулю. Пожалуйста, не пробуйте это дома. Или пробуйте, если готовы рискнуть своим MB2, уронив его.
Да, физика — штука непростая. Пойдём дальше.