- Акселерометр в телефоне: что это такое, принцип действия, настройка и калибровка
- Принцип действия датчика
- Применение устройства
- Включение и отключение датчика
- Настройка и калибровка
- Выводы
- Использование акселерометра на Android
- Вступление
- 1. Начало работы
- Шаг 1: Настройка проекта
- Работа с датчиками в Android, или сервис для записи показаний с акселерометра
- Введение
- Как оказалось, не все так просто
- Про сервисы в Android
- Запуск сервиса, получение показаний с акселерометра, запись в файл
- Android: измерение скорости и расстояния с помощью акселерометра
Акселерометр в телефоне: что это такое, принцип действия, настройка и калибровка
Современные смартфоны и планшеты на ОС Android и других платформах, обеспечивают своим владельцам огромное количество возможностей, которые уже давно вышли за пределы обычного общения и интернет-сёрфинга. Для повышения функциональности гаджетов применяется множество дополнительных устройств – от такого приспособления как датчик приближения до акселерометра и гироскопа.
С их помощью удобнее разговаривать по мобильной связи, делать фото и даже играть. Некоторые функции таких датчиков похожи, но в основном они дополняют друг друга – поэтому установленный акселерометр в телефоне не исключает наличие в конструкции и гироскопа.
Принцип действия датчика
Пользователь, впервые столкнувшийся с термином «акселерометр» в списке характеристик смартфона, может заинтересовать, что это такое, как работает и выглядит. Ответить на эти вопросы несложно – устройство, получившее название от латинского слова «accelero» («ускоряю»), применяется для измерения кажущегося ускорения.
Определяя этот параметр, датчик помогает программному обеспечению контролировать положение телефона в пространстве и расстояние, на которое был перемещён мобильный гаджет.
Между тем, даже зная, что такое акселерометр, некоторые пользователи не отличают его от гироскопа. На самом деле оба датчика могут измерять одни и те же величины, но полностью заменить друг друга не способны.
При этом гироскоп в телефоне необходим для определения угла поворота гаджета относительно определённой плоскости. А акселерометр требуется для контроля положения в пространстве путём измерения ускорения движения. Совместное использование устройств помогает программному обеспечению гаджета получить более точные результаты.
Рис. 1. Один из примеров работы акселерометра.
Рассматривая действие акселерометра и что это такое по большому счёту, стоит познакомиться с принципом действия классического приспособления:
- Основная часть датчика представляет собой инертную массу (например, грузик), прикреплённую к упругому элементу.
- Упругая деталь типа пружины фиксируется на неподвижном элементе.
- Пружина зафиксирована на неподвижной части конструкции.
- Колебания груза подавляются демпфером.
- При наклонах, встряске и поворотах гаджета инертная масса реагирует на силу инерции.
- Чем больше интенсивность и сила наклона, встряски или поворота, тем сильнее деформируется пружина.
- После возвращения массы на место под воздействием пружины уровень смещения относительно обычного положения фиксируется специальным датчиком.
Рис. 2. Конструкция стандартного акселерометра.
С другой стороны, ответ на вопрос по поводу акселерометра в телефоне – что это и как выглядит, будет немного отличаться. В данном случае он представляет собой миниатюрный элемент на плате с расположенной внутри инертной массой и выглядит обычно как маленький чёрный квадрат.
Основной принцип работы элемента мало отличается от стандартного – при изменении положения инертной массы определяется величина смещения, по которому рассчитываются показатели положения гаджета. Такие датчики стоят практически на любом виде мобильной техники – на телефоне или планшете.
Рис. 3. Внешний вид датчика для смартфона.
Применение устройства
Определившись с тем, что представляет собой акселерометр в телефоне, стоит узнать и как им пользоваться – для этого можно привести несколько примеров:
С помощью датчика осуществляется управление в играх – смена положения мобильного устройства вызывает определённые действия со стороны игрового персонажа или управляемого игроком транспортного средства. Так, например, наклоном телефона можно изменять направление движения автомобиля в гоночных симуляторах.
Рис. 4. Игра Asphalt 8, управление в которой выполняется с помощью акселерометра.
Во время спортивной пробежки акселерометр используется в смартфонах и планшетах для контроля пройденной дистанции. При этом определяется примерное количество сделанных шагов – и, хотя погрешность может быть довольно высокой (зависит от скорости движения), полученные результаты можно использовать для повышения результатов тренировки.
Наличие таких датчиков на смартфонах и планшетах позволяет изменять ориентацию изображения. Расположив мобильный гаджет горизонтально, пользователь при помощи акселерометра автоматически получает альбомный формат картинки или текста. При вертикальном расположении экрана ориентация изменится на книжную.
В других устройствах датчик применяют и для выполнения тех же задач, для чего нужен акселерометр на телефонах, и для других целей. Так, в авиации он необходим для работы навигационных систем, а в промышленности используется в качестве вибропреобразователя.
В системах управления жёсткими дисками HDD акселерометр требуется для компенсации вызываемых ускорениями объекта колебаний и защиты хранящихся на накопителе данных.
Видеорегистраторы с помощью этого датчика способны определять время ускорения и торможения, фиксировать остановки и столкновения. На джойстиках игровой приставке акселерометр необходим для управления игровым процессом.
Включение и отключение датчика
Способ, как узнать есть ли акселерометр на телефоне, заключается в повороте экрана в другое положение. Если изображение при этом не изменилось, значит датчик отсутствует – или на смартфоне просто отключена функция «Автоповорота».
У большинства моделей поворот экрана при изменении положения автоматически включается и выключается с помощью меню настроек или верхней панели на главном экране:
В первом случае следует перейти в «Настройки», выбрать пункт «Экран» и включить поворот изображения.
Рис. 5. Включение через настройки.
Во второй ситуации достаточно потянуть пальцем за верхнюю панель, увеличив её размер на весь экран, и включить соответствующую функцию.
Рис. 6. Включение через верхнюю панель.
Настройка и калибровка
Практически все новые телефоны с гироскопом имеют и встроенный датчик контроля ускорения. При отсутствии акселерометра в телефоне, что говорит о бюджетной стоимости модели или её выпуске много лет назад, добавить эту функцию не получится ни перепрошивкой, ни изменением настроек.
Зато при наличии датчика, если он не работает или неправильно реагирует на изменение положения устройства, можно выполнить его калибровку.
Автоматическая настройка Андроид акселерометра выполняется в три этапа:
Рис. 7. Меню приложения.
На дисплее гаджета появится сообщение о необходимости установки на ровную поверхность. После подтверждения запускается калибровка. Завершение процесса сопровождается появлением соответствующей надписи.
Рис. 8. Работа приложения GPS Status & Toolbox.
Выводы
Зная, что такое акселерометр, можно сделать определённые выводы по поводу его наличия в современных мобильных устройствах. Наличие датчиков определения положения смартфонов и планшетов позволяет упростить просмотр на телефоне видео или чтение книг, а иногда даже помогает в игровом процессе.
Однако перед использованием акселерометра его иногда приходится настраивать. На это потребуется всего несколько минут и скачивание бесплатной утилиты.
Источник
Использование акселерометра на Android
В этом уроке мы собираемся изучить, как использовать акселерометр, один из многих аппаратных датчиков современных смартфонов, в приложении для Android. Я объясню, что такое акселерометр и почему его можно использовать в своих приложениях для Android.
Вступление
До рассвета смартфонов одним из немногих аппаратных компонентов, с которыми могли взаимодействовать приложения, была клавиатура. Но времена изменились, и взаимодействие с аппаратными компонентами становится все более распространенным.
Использование жестов часто кажется более естественным, чем взаимодействие с пользовательским интерфейсом с помощью мыши и клавиатуры. Это особенно актуально для сенсорных устройств, таких как смартфоны и планшеты. Я считаю, что использование жестов может оживить приложение Android, сделав его более интересным и интересным для пользователя.
В настоящее время довольно много приложений используют акселерометр. Например, посмотрите на эти шаблоны приложений на Envato Market, которые включают в себя игру скоростных гонок и шейкер случайных чисел .
В этом уроке мы будем использовать жест, который вы найдете во многих мобильных приложениях, жест встряхивания. Мы будем использовать жест встряхивания, чтобы случайным образом сгенерировать шесть номеров лотереи и отобразить их на экране, используя симпатичную анимацию.
1. Начало работы
Шаг 1: Настройка проекта
Запустите новый проект Android в вашей любимой среде разработки (интегрированная среда разработки) для разработки под Android. Для этого урока я буду использовать IntelliJ IDEA .
Если ваша IDE поддерживает разработку Android, она создаст для вас Main класс. Имя этого класса может отличаться в зависимости от того, какую IDE вы используете. Класс Main играет ключевую роль при запуске вашего приложения. В вашей среде IDE также должен быть создан основной файл макета, который класс Main использует для создания пользовательского интерфейса приложения.
Поскольку мы собираемся использовать жест встряхивания, рекомендуется заблокировать ориентацию устройства. Это гарантирует, что пользовательский интерфейс приложения не будет постоянно переключаться между книжной и альбомной ориентацией. Откройте файл манифеста проекта и установите для параметра screenOrientation значение screenOrientation .
Источник
Работа с датчиками в Android, или сервис для записи показаний с акселерометра
Введение
Год назад, на хабре публиковалась статья «Собираем показания датчиков с Android смартфона», где рассматривался способ получения данных с акселерометра (кстати говоря, есть пост более старый, в котором рассказывается все то же самое). Недавно передо мной была поставлена похожая задача. Необходимо было создать приложение (решил назвать его «Sensor Logger»), записывающее показания с акселерометра в файл в фоновом режиме. В данной статье постараюсь показать, как можно использовать сервисы и намерения, как работать с текстовыми файлами, а также каким образом отправлять данные из сервиса в Activity.
Рассказывать о снятии показаний с датчиков, классах SensorEventListener и SensorManager не вижу особого смысла, т.к. привел выше две статьи, в которых подробно об этом говорится.
Предполагается, что для читателя данный проект будет являться учебным, поскольку для меня он именно таким и являлся. До текущего момента я никогда не писал на Java и не работал с Android SDK.
Как оказалось, не все так просто
В приведенных выше статьях рассматривались примеры, когда показания датчиков снимались в главном Activity. Они оказались лишь отчасти применимыми к моей задаче. Ибо есть ложка дегтя: жизненный цикл Activity. Очевидно, что не удастся записывать в файл данные в фоновом режиме, если этим будет заниматься класс Activity, поэтому, прочитав ряд статей, было решено написать сервис, который и будет заниматься записью показаний датчиков.
Про сервисы в Android
В Android существует класс Service, который позволяет выполнять задачи приложения в фоновом режиме (стоит отметить, что сервис и Activity работают в одном потоке) в то время, когда телефон заблокирован, или приложение свернуто. Сервис не требует наличия UI, но он может передавать информацию в Activity (например для отображения) или другие сервисы.
Запуск сервиса, получение показаний с акселерометра, запись в файл
Рассмотрим процесс запуска сервиса (метод onStartCommand )
При запуске сервиса происходит инициализация объекта типа SensorManager (переменная sm ). Данный класс в Android предназначен для работы с датчиками (об этом можно почитать в приведенных статьях во введении, а также в документации).
На следующем этапе сервис получает имя директории (с помощью Intent — намерения), в которую необходимо записывать файлы с показаниями (в случае не существования таковой, программа создаст необходимую папку) и открывает для записи файл, именем которого являются дата и время запуска сервиса. За генерацию имени файла отвечает метод currentDateToString , возвращающий дату и время в виде строки.
После открытия файла начинаем снимать показания с датчиков.
При изменении состояния какого-либо из датчиков вызывается метод onSensorChanged , внутри которого идет проверка на то, на каком датчике произошло событие, и если это акселерометр, то показания, которые пришли, записываются в файл и оправляются в Activity приложения (создается новое намерение и вызывается функция sendBroadcast ):
В Activity прием сообщений от сервиса реализован при помощи класса BroadcastReciever, который принимает намерения, отправленные с помощью функции sendBroadcast . Рассмотрим метод rec_start из класса Activity:
Объекты button_rec_off, button_rec_on являются объектами класса Button , а x_label, y_label и z_label — TextView .
В данном методе происходит запуск сервиса, инициализация BroadcastReciever и создание фильтра намерений (класс IntentFilter).
Стоит отметить, что в моем коде также предусмотрены методы для остановки процесса записи. Исходный код и *.apk можно скачать в репозитарии. Ссылка ниже.
Источник
Android: измерение скорости и расстояния с помощью акселерометра
С тех пор, как у меня появился гуглофон, периодически бродят в голове мысли «а что бы такого забавного сделать с этим самым телефоном?» Поиграв в игрушки с управлением акселерометром, подумал — а что еще можно с помощью этого датчика сотворить? Конечно же, измерить ускорение! И, как следствие, вычислить скорость и пройденный путь. Разумеется, использование лишь акселерометра накладывает ряд ограничений на измеряемое: во-первых, движение должно быть прямолинейное, во-вторых — ориентация аппарата в пространстве не должна меняться, в третьих — желательно откалибровать датчик перед стартом измерения. Сразу скажу — есть способы смягчить эти требования, но об этом потом.
Главный вопрос, как обычно, «зачем?». Зачем это, если есть GPS? Что ж, верное замечание. Однако, GPS работает не везде, а акселерометр — он с собой в телефоне. Например, пробовали поймать спутники в метро.
С «Зачем» разобрались, переходим к «Как».
Для того, чтобы реагировать на изменение ускорения, необходимо реализовать где-нибудь интерфейс SensorEventListener. Так как мы еще не придумали, что с ним делать, создадим абстрактный класс
И, заодно, класс для хранения показания счетчика датчика:
И подумаем, что же делать дальше. Период обновления информации с сенсора в режиме SENSOR_DELAY_GAME — примерно 20 миллисекунд. Это достаточно часто, наша задача такого не требует. С другой стороны, снимая показания реже, мы рискуем попасть на «выбросы», и потерять точность. Логично каким-то образом регулярно получать усредненное значение ускорения, скажем, за последнюю секунду. Хранить массив и вычислять среднее значение — накладно, гораздо проще складывать все получаемые значения и делить на количество. Также, предусмотрим dX, dY, dZ — нашу еще не реализованную калибровку.
Вот что получится:
С Вашего позволения, я пропущу описания методов калибровки датчика. Достаточно сказать, что необходимо в течении некоторого времени снимать покания, затем установить у нашего XYZAccelerometer соответствующие dX, dY, dZ. Пренебрегать этой процедурой нельзя, т.к. пока мы спим постоянно действует ускорение свободного падения, и датчик его измеряет.
Для пущей важности, обзаведемся классом для хранения и вычисления параметров движения на интервале:
И классом для хранения информации обо всем эксперименте:
Думаю, тут все просто и понятно. Осталось только использовать это в нашей Activity… которой, кстати, еще нет. Начнем с layout:
Вот и все. Удивительно, но на ровной траектории такой метод дает весьма неплохую точность измерения.
Прилагаю график одного эксперимента: синяя линяя — скорость, расчитанная акселерометром, красная — снимаемая с GPS с максимальной частотой. Черная клякса — скорость по спидометру в конце эксперимента.
Источник