Акселерометр — прибор измеряющий ускорение. Если говорить простым языком, то ускорение это скорость изменения скорости чего-либо. К примеру лежит на столе предмет. Пока его ни кто не двигает ускорение равно нулю. Когда предмет начнут перемещать ускорение будет расти. После того как предмет будет перемещаться с постоянной скоростью ускорение вновь станет нулевым. При уменьшении скорости движения ускорение тоже будет расти но уже с отрицательным знаком. Однако этот  акселерометр фиксирует даже незначительные изменения ускорения в зависимости от его положения в пространстве несмотря на то что сам находится в покое. Такие приборы нашли широкое применение в мобильных телефонах. Именно благодаря акселерометру, в телефонах есть возможно разворачивать дисплей в зависимости от того как повернут телефон. Еще говорят, что акселерометры можно встретить в некоторых моделях жестких дисков от ноутбуков. Поскольку ноутбуки эксплуатируются в самых разных условиях, то в случае резкой встряски или падения жесткий диск своевременно паркует головку. Это позволяет избежать повреждения поверхности диска внутри винчестера. Поскольку используются акселерометры в портативной технике, то их размер не внушает оптимизма — запаять такую мелкоту с первого раза не всегда просто. Без фена я бы даже не рискнул наверное :-) Смотрите сами:

Для более удобного его изучения я спаял небольшую платку с 8-ю штырьками на которые выведены питание и все выводы акселерометра необходимые для работы с ним. Кроме акселерометра, на плате еще есть конденсаторы которые рекомендует даташит. Ставить их обязательно надо. Ибо датчик очень восприимчив к помехам по питанию. От импульсного преобразователя  на 3.3 вольта  датчик работал но привирал, пришлось поставить линейный стабилизатор. Запаивать датчик надо так: Сначала лудим плату. Потом на контактные площадки наносим небольшие шарики припоя. После этого смазываем всё это дело флюсом. Я использовал ЛТИ-120 как самый липкий из всех что у меня есть. Теперь ставим наш датчик на плату и прогреваем феном. Фен я ставил на 380 градусов. Если даже датчик был поставлен немного криво то он сам встанет как надо после того как шарики припоя расплавятся. В результате получилась платка которую без проблем можно припаять куда надо:

Теперь перейдем непосредственно к самому акселерометру. Акселерометр этот трёхосевой. Это значит, что ускорение может одновременно измеряться в трёх осях X,Y и Z. В даташите большими буквами написано что акселерометр боится статики. Думаю что написано это неспроста, так что будьте с ним поосторожней на всякий случай. Для связи с внешним миром у него есть аж целых два интерфейса SPI и I2C. Тут есть один важный момент. Если используется интерфейс I2C то вывод CS нужно привязать к питанию. Я этого не знал и очень долго ломал голову почему датчик не отзывается на свой адрес. Для управления акселерометром существуют 32 (!) регистра. Описывать тут каждый регистр смысла особого нет (есть даташит), да и я с ума сойду от писанины. На практике нужно всего лишь несколько основных регистров о которых я хочу рассказать.

Основные регистры MMA7455L

Mode Control Register (0x16) — Основное назначение этого регистра управления питанием и пределом измерений. После включения питания в этом регистре 0. Это значит что акселерометр выключен и считывать показания бессмысленно. Для того чтобы запустить акселерометр надо записать в нулевой бит этого регистра единицу. Что бы выбрать предел измерений нужно изменить второй и третий биты (см даташит стр. 25).  Есть три предела: 2G, 4G, 8G. Если выбран 2G то чувствительность максимальная.

Регистры значения ускорения (0x00 — 0x08) — Из этих регистров считывается само ускорение. Первые шесть регистров хранят ускорение по всем трем осям в 10 битном виде (по два регистра на ось). Остальные три в 8-ми битном. Мне большая точность была не нужна, читал только восьмибитные, да и подозреваю что в младших разрядах десятибитных регистров будет много шума.

Вот и всё! Этих регистров вполне достаточно чтоб начать работу с акселерометром.

Практическое применение акселерометра

Чтоб посмотреть как акселерометр работает в действии я решил сотворить электронный строительный уровень. Если кто не в курсе, строительный уровень показывает отклонение  элементов различных конструкций от горизонтального или вертикального положения. Моя конструкция скорее игрушка чем настоящий уровень, и применять её в строительстве не рекомендуется  :-) Если очень хочется, то нужно увеличить число светодиодов и немного переписать код.

Самой дефицитной деталью тут пожалуй является сам акселерометр. Всё остальное вполне доставаемо. Плата для данного устройства не разрабатывалась, а само устройство было демонтировано сразу же после окончания экспериментов. Видеоролик работы прилагается:

Программный код написан на ассемблере под контроллер атмега32 (частота 1мгц). Тут вполне можно обойтись тини2313, а мегу я использовал только потому что она у меня стояла в отладочной плате. Подозреваю что флеш память у этого контроллера скоро протрётся до дыр :-) Очень уж часто я его перезаписываю. Вопросы по программе и не только принимаются в комментариях.

Исходник

Даташит на MMA7455L

Плата для датчика (Не открывается? Обновляем протеус)