Для чего нужны и как работают акселерометр, гироскоп, магнитометр и GPS.
Ваш смартфон - настоящее произведение инженерного искусства. Он сочетает в себе функции по меньшей мере десятка разных гаджетов. И большей частью своих удивительных возможностей он обязан разнообразным сенсорам. Но каким именно и как они устроены?
Как телефон подсчитывает ваши шаги? Расходует ли GPS ваш трафик? На какие датчики нужно обратить внимание при выборе нового телефона? Вот все, что вам нужно знать о современном смартфоне.
Один из наглядных примеров работы акселерометра - анимированные стикеры Snapchat
Акселерометр отслеживает изменение скорости движения устройства и его повороты вокруг своей оси. Такие датчики устанавливаются не только в телефонах, но и в фитнес-трекерах - именно с их помощью смартфон может подсчитывать ваши шаги, даже если у вас нет никаких носимых гаджетов.
Анализируя данные акселерометра, приложения могут определить, в какую сторону направлен телефон, - эта технология находит все более широкое применение с распространением дополненной реальности.
Существуют различные типы акселерометров, но самый распространенный - пьезоэлектрический. В таких акселерометрах сенсор представляет собой микроскопический кристалл, который деформируется под действием сил ускорения. При этом кристалл вырабатывает электрический ток. Анализируя силу тока, система определяет, как быстро и в каком направлении движется ваш телефон. Поэтому Snapchat добавляет на карту забавный стикер с автомобилем, когда вы используете приложение за рулем.
Акселерометр является одним из самых важных датчиков вашего телефона: без него вы не могли бы пользоваться автоматическим поворотом экрана, а навигационные приложения не могли бы определять текущую скорость.
Гироскоп дает точные данные о положении смартфона в пространстве, что бывает полезно в играх и при создании 360-градусных фотографий
Гироскоп помогает акселерометру с гораздо более высокой точностью определить, как именно ваш телефон ориентирован в пространстве. Поэтому 360-градусные панорамы выглядят так впечатляюще.
Всякий раз, когда вы запускаете на смартфоне гоночный симулятор и наклоняете экран, чтобы повернуть руль, именно гироскоп помогает приложению понять, что вы делаете. Поскольку при этом вы не перемещаетесь в пространстве, этих условий было бы недостаточно недостаточно для работы акселерометра.
Гироскопы используются не только в телефонах. Их можно найти в самолетах, где они помогают определить высоту и положение, и в системах стабилизации, которые позволяют фото- и видеокамерам делать плавную съемку в движении.
Старые гироскопы, которые еще можно найти в самолетных высотомерах, используют механическое движение маховика, но гироскоп в вашем смартфоне представляет собой микроэлектромеханическую систему (МЭМС) - крошечный инерциальный датчик, который может поместиться на печатной плате.
Впервые МЭМС-гироскопы были использованы в iPhone 4 в 2010 году - и произвели фурор: никогда еще телефон не умел определять свою ориентацию в пространстве с такой точностью. Сегодня мы считаем это чем-то само собой разумеющимся.
Именно благодаря магнитометру работает компас в вашем телефоне.
Последний из трех главных датчиков, ответственных за определение положения телефона в пространстве, - это магнитометр. Его название говорит само за себя: он регистрирует магнитные поля и таким образом может определить, в каком направлении находится север.
Когда вы включаете режим компаса на Картах Apple или в Google Maps, именно магнитометр определяет, как нужно развернуть карту. Существуют и отдельные приложения, которые эмулируют работу компаса.
Магнитометры также можно найти в металлодетекторах - они могут обнаруживать магнитные металлы. Существуют даже приложения-металлодетекторы для смартфона!
Сам по себе этот датчик мало на что способен, но если соединить его показания с данными, поступающими с акселерометра и модуля GPS, можно точно определить ваше расположение, что очень полезно при построении маршрутов.
Спутники GPS всегда знают, где находится ваш телефон.
Ах, GPS, где бы мы были без тебя? Вероятно, блуждали бы где-то в глуши, проклиная день, когда решили сменить бумажные карты, компас и секстант на электронные устройства.
GPS-модуль в вашем телефоне связываются со спутниками на орбите, чтобы определить, где именно на поверхности планеты вы находитесь. Для этого даже не нужна сотовая сеть: если ваш телефон потерял сигнал, вы все равно можете видеть свое местоположение, хотя загрузить подробную карту вам, скорее всего, не удастся.
Фактически телефон поочередно связывается с несколькими спутниками, а затем вычисляет, где вы находитесь, по задержке сигнала. Если связаться со спутниками не удается, - например, когда вы находитесь в помещении или под очень плотной облачностью, - определить ваше положение не получится.
GPS не расходует трафик, но связь со спутниками и вычисления могут сильно сказаться на заряде батареи, поэтому многие руководства рекомендуют отключать GPS-навигацию, чтобы дольше оставаться на связи. По этой же причине модуль GPS обычно не включается в более мелкие устройства - например, в большинство смарт-часов.
GPS- не единственный способ определить ваше положение на карте: его можно приблизительно установить по расстоянию до сотовых вышек. Однако высокой точности без него не добиться. Современные GPS-модули объединяют данные от спутников с показаниями компаса и уровнем сигнала сети, чтобы определить ваше местоположение с точностью до нескольких метров.
Если хотите, ваш телефон будет регулировать яркость экрана в соответствии с окружающим освещением.
Акселерометр измеряет ускорение и позволяет смартфону определять характеристики движения и положения в пространстве. Именно этот датчик работает, когда вертикальная ориентация меняется на горизонтальную при повороте устройства. Он же отвечает за подсчёт шагов и измерение скорости движения во всевозможных приложениях-картах. Акселерометр даёт информацию о том, в какую сторону повёрнут смартфон, что становится важной функцией в различных приложениях с .
Этот сенсор сам состоит из маленьких датчиков: микроскопических кристаллических структур, под влиянием сил ускорения переходящих в напряжённое состояние. Напряжение передаётся акселерометру, который интерпретирует его в данные о скорости и направлении движения.
Этот датчик помогает акселерометру ориентироваться в пространстве. Он, например, позволяет делать на смартфон . В играх с гонками, где управление происходит с помощью перемещения устройства, работает как раз гироскоп. Он чувствителен к поворотам устройства относительно своей оси.
В смартфонах используются микроэлектромеханические системы, а первые подобные приборы, сохраняющие ось при поворотах, появились ещё в начале XIX века.
Последний в тройке сенсоров для ориентации в пространстве - магнитометр. Он измеряет магнитные поля и, соответственно, может определить, где находится север. Функция компаса в различных приложениях с картами и отдельные программы-компасы работают с помощью магнитометра.
Подобные датчики есть в металлодетекторах, так что можно найти специальные приложения, превращающие смартфон в такой прибор.
Магнитометр действует в тандеме с акселерометром и GPS для определения географического положения и навигации.
Где бы мы были без технологии GPS (Global Positioning System)? Смартфон соединяется с несколькими спутниками и высчитывает своё положение на основании углов пересечения. Бывает, что спутники недоступны: например, при большой облачности или внутри помещений.
GPS не использует данные мобильной сети, поэтому геолокация работает и вне зоны покрытия сотовой связи: даже если саму карту загрузить не получится, точка геолокации всё равно будет.
При этом функция GPS тратит много заряда аккумулятора, поэтому лучше её отключать вне надобности.
Ещё один способ геолокации, хотя и не очень точный, - это определение расстояния от вышек сотовой связи. Смартфон добавляет к данным GPS другую информацию, например силу мобильного сигнала, для уточнения местоположения.
Многие смартфоны, в том числе iPhone, имеют этот сенсор, измеряющий атмосферное давление. Он нужен для регистрации изменения погоды и определения высоты над уровнем моря.
Этот сенсор обычно находится около динамика в верхней части смартфона и состоит из инфракрасного диода и датчика света. Он использует невидимый человеку луч, чтобы определить, находится ли устройство возле уха. Так смартфон «понимает», что во время разговора по телефону нужно отключить дисплей.
Как можно догадаться по названию, этот сенсор измеряет уровень освещённости окружающей среды, что позволяет автоматически настраивать комфортную яркость дисплея.
Датчики с каждым новым поколением смартфонов становятся всё более эффективными, маленькими и менее энергозатратными. Поэтому не стоит думать, что, например, функция GPS в устройстве, которому уже несколько лет, будет работать так же хорошо, как в новом. И даже если в информации о новых смартфонах не указывают характеристики всех этих датчиков, будьте уверены, что именно они позволяют вам пользоваться многими впечатляющими функциями современных гаджетов.
Статьи и Лайфхаки
Итак, для чего нужен датчик расстояния на телефоне? Если приблизить телефон к уху, что происходит с экраном? Не видели? Если заглянуть, то видно что дисплей гаснет, но не только это, он еще и отключает сенсор экрана. Вот и первый ответ на поставленный вопрос.
Для чего это нужно? Со включенным дисплеем разговаривать по телефону не удобно. Любое неаккуратное движение, и случайное прикосновение уха к экрану сослужит нехорошую службу. Кроме того, экономится заряд батареи.
Если и после калибровки сенсор не работает некорректно, то самое лучшее решение – обращение в сервисный центр.
Современный смартфон уже сложно назвать просто компьютером, ведь он умеет гораздо больше своего стационарного предка: и температуру может измерить, и высоту над уровнем моря подсказать, и влажность воздуха определить, а если вдруг забудешь свою ориентацию в пространстве или силу тяжести потеряешь - все исправит. А помогают ему в этом, как ты уже, наверное, догадался, датчики aka сенсоры. Сегодня мы познакомимся с ними поближе, а заодно и проверим, действительно ли мы находимся на Земле. 😉
Для работы с аппаратными датчиками, доступными в устройствах под управлением Android, применяется класс SensorManager , ссылку на который можно получить с помощью стандартного метода getSystemService :
SensorManager sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
Чтобы начать работать с датчиком, нужно определить его тип. Удобнее всего это сделать с помощью класса Sensor , так как в нем уже определены все типы сенсоров в виде констант. Рассмотрим их подробнее:
Перечисленные датчики являются аппаратными и работают независимо друг от друга, часто без всякой фильтрации или нормализации значений. «Для облегчения жизни разработчиков»™ Google ввела несколько так называемых виртуальных сенсоров, которые предоставляют более упрощенные и точные результаты.
Например, датчик Sensor.TYPE_GRAVITY пропускает показания акселерометра через низкочастотный фильтр и возвращает текущие направление и величину силы тяжести по трем осям, а Sensor.TYPE_LINEAR_ACCELERATION использует уже высокочастотный фильтр и получает показатели ускорения по трем осям (без учета силы тяжести).
При разработке приложения, эксплуатирующего показания сенсоров, вовсе не обязательно бегать по улице или прыгать в воду с высокой скалы, так как эмулятор, входящий в поставку Android SDK, умеет передавать приложению любые отладочные значения (рис. 2–3).
Чтобы узнать, какие сенсоры есть в смартфоне, следует использовать метод getSensorList объекта SensorManager :
List
Полученный список будет включать все поддерживаемые датчики: как аппаратные, так и виртуальные (рис. 4). Более того, некоторые из них будут иметь различные независимые реализации, отличающиеся количеством потребляемой энергии, задержкой, рабочим диапазоном и точностью.
Для получения списка всех доступных датчиков конкретного типа необходимо указать соответствующую константу. Например, код
List
вернет все доступные барометрические датчики. Причем аппаратные реализации окажутся в начале списка, а виртуальные - в конце (правило действует для всех типов датчиков).
Чтобы получить реализацию датчика по умолчанию (такие датчики хорошо подходят для стандартных задач и сбалансированы в плане энергопотребления), используется метод getDefaultSensor :
Sensor defPressureSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
Если для заданного типа датчика существует аппаратная реализация, по умолчанию будет возвращена именно она. Когда нужного варианта нет, в дело вступает виртуальная версия, ну а если, увы, ничего подходящего в девайсе не окажется, getDefaultSensor вернет null .
О том, как самолично выбирать реализацию датчиков по критериям, написано во врезке, мы же плавно двигаемся дальше.
Чтобы получать события, генерируемые датчиком, необходимо зарегистрировать реализацию интерфейса SensorEventListener с помощью того же SensorManager . Звучит сложновато, но на практике реализуется одной строчкой:
Sensor defPressureSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE); sensorManager.registerListener(workingSensorEventListener, defPressureSensor, SensorManager.SENSOR_DELAY_NORMAL);
Здесь мы полученный ранее барометр по умолчанию регистрируем с помощью метода registerListener , передавая в качестве второго параметра сенсор, а в качестве третьего - частоту обновления данных.
В классе SensorManager определены четыре статические константы, определяющие частоту обновления:
Нужно сказать, что, указывая частоту обновления, не стоит ожидать, что она будет строго соблюдаться. Как показывает практика, данные от сенсора могут приходить как быстрее, так и медленнее.
Оставшийся нерассмотренным первый параметр представляет собой реализацию интерфейса SensorEventListener , где мы наконец-то получим конкретные цифры:
Private final SensorEventListener workingSensorEventListener = new SensorEventListener() { public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void onSensorChanged(SensorEvent event) { // Получаем атмосферное давление в миллибарах double pressure = event.values; } };
В метод onSensorChanged передается объект SensorEvent , описывающий все события, связанные с датчиком: event.sensor - ссылка на датчик, event.accuracy - точность значения датчика (см. ниже), event.timestamp - время возникновения события в наносекундах и, самое главное, массив значений event.values . Для датчика давления передается только один элемент, тогда как, например, для акселерометра предусмотрено сразу три элемента для каждой из осей. В следующих разделах мы рассмотрим примеры работы с различными датчиками.
Метод onAccuracyChanged позволяет отслеживать изменение точности передаваемых значений, определяемой одной из констант: SensorManager.SENSOR_STATUS_ACCURACY_LOW - низкая точность, SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM - средняя точность, возможна калибровка, SensorManager.SENSOR_STATUS_ACCURACY_HIGH - высокая точность, SensorManager.SENSOR_STATUS_UNRELIABLE - данные недостоверны, нужна калибровка.
После того как отпадает необходимость работы с датчиком, следует отменить регистрацию:
SensorManager.unregisterListener(workingSensorEventListener);
Весь код для работы с датчиком давления мы уже написали в предыдущем разделе, получив в переменной pressure вполне себе значение атмосферного давления в миллибарах.
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов.