Зачастую бывает, что некоторые датчики на устройстве под управлением Android перестают работать вовсе, либо делают это некорректно. К примеру, в момент звонка и приближения девайса к уху, экран не гаснет, при включенной авторегулировке яркости на солнце или в помещении дисплей останется одинаковой яркости и таких примеров можно привести масса. За каждое подобное действие отвечает собственный сенсор (датчик), который располагается в определенной части устройства. Сегодня мы постараемся рассказать, как выполнить калибровку сенсорных датчиков, чтобы избежать различных проблем, связанных с их работой.
Как сделать калибровку (сброс) датчика освещённости/приближения
Для этого стоит воспользоваться полезной программой «Датчик приближения Сброс». Скачать, которую можно с нашего сайта.
- Загружаем, устанавливаем и запускаем приложение.
- Следуем инструкции. Сначала нажимаем несколько раз вместе, где расположен датчик. В момент нажатия точка красного цвета будет меняться на зеленый. Это значит, что датчик работает.
- Закройте местоположение датчика приближения/освещенности используя руку и нажмите на стрелочку «вперёд».
- После чего стоит убрать руку с датчика и нажать кнопку далее.
- На этом процедуру калибровки можно считать законченной. Для сохранения настроек достаточно тапнуть по галочке в правом нижнем углу экрана. После последует перезагрузка устройства и все настройки будут сохранены.
О том, как сделать калибровку тачскрина читайте в статье – «Как выполнить калибровку сенсорного экрана».
Какие бывают датчики в смартфоне и зачем они нужны?
Современные мобильные устройства обладают большим набором датчиков, и изредка среди них встречаются необычные варианты вроде измерения температуры и влажности окружающей среды, ультрафиолета и пульса, как это случилось со смартфоном Blackview BV9900.
Но стандартный набор включает в себя совсем другие, более привычные датчики.
Самым популярным из них можно смело назвать акселерометр. Предназначен для измерения ускорения по трем осям координат (X — поперечная, Y — продольная и Z — вертикальная) с учетом силы тяжести. Благодаря полученным данным смартфон словно начинает понимать свое положение в пространстве, и появляются такие функции, как автоповорот экрана или запуск приложений встряхиванием смартфона. Нашел себе применение акселерометр еще в некоторых играх и приложениях — за счет него при наклонах смартфона можно управлять чем-либо на экране. Такой способ управления станет хорошим дополнением сенсорному экрану.
Вторым по популярности идет датчик приближения (или приближенности), который отключает экран при телефонных разговорах, если смартфон находится возле уха (или любой другой части тела). А еще он может, наоборот, предотвратить включение дисплея, когда девайс находится в кармане. Почти все современные смартфоны оснащены отдельным датчиком приближения, но в некоторых устройствах реализован программный метод отключения экрана при разговоре, о котором в статье будет рассказано чуть позже.
Датчик освещенности (освещения) тоже почти всегда используется за исключением редких бюджетных моделей. Он измеряет уровень внешнего освещения в люксах, и отвечает за автоматическую настройку яркости в зависимости от внешних условий. Более того, в некоторых смартфонах автояркость неотключаемая, а вместе с подсветкой может изменяться и насыщенность цветовых оттенков.
Через магнитометр (компас) измеряется внешнее магнитное поле, а точнее его напряженность по трем осям. Как нетрудно догадаться, компас нужен для определения сторон света, а также он упрощает работу с приложениями-навигаторами — на картах гораздо быстрее получается определить направление движения. Магнитометр, к сожалению, есть уже не во всех смартфонах, но вполне может обнаружиться в бюджетном устройстве.
Гироскоп, который иногда путают с акселерометром, на самом деле работает с ним в паре и пригодится для измерения скорости вокруг осей X, Y и Z. Без гироскопа невозможно смотреть 360-градусные видеоролики и пользоваться технологией VR, так как смартфон не сможет отследить и зафиксировать движения в трехмерном пространстве. Без гироскопа нельзя комфортно играть и в некоторые игры. Самым популярным примером является Pokemon Go, в которой пользователи с девайсами, у которых нет гироскопа, не могут включить режим дополненной реальности и ловить покемонов через камеру.
Заметка о калибровке датчиков положения в домашних условиях
Для некоторых датчиков ускорения требуется дополнительная калибровка нуля после монтажа на плату. Когда я увидел несколько исходников с калибровкой датчиков ускорения, где составляющая G учитывалась просто путём вычитания из оси Z величины = 9,8 м/с2 — появилась идея написать данную заметку.
Структура публикации
- Проблема
- Постановка задачи и способ решения
- Как правильно получить точки?
- Как вычислить центр шара?
- Как ускорить поиск центра шара?
- Как ещё ускорить поиск центра шара?
- Об ошибках при замерах
- Итог
Проблема
В чём проблема — МЕМС-датчики после монтажа в плату претерпевают незначительные деформации, которые влияют на:
- положение нуля;
- масштабирование измеряемых величин;
- перпендикулярность осей к друг-другу.
И если масштабирование и перпендикулярность нарушаются не так заметно, то положение нуля сбивается ощутимо. Например, если перевести типичную величину смещения нуля для акселерометра датчика MPU9250 в м/с2, то это получается в районе 0,2 м/с2. Т. е. датчик неподвижен, но при этом показывает ускорение, а через 5 секунд мы получаем скорость в 1 м/с. С одной стороны, все данные датчиков всегда пропускают через какой-либо фильтр (например такой). Но с другой стороны зачем фильтру постоянно компенсировать это смещение? Ведь датчик будет показывать движение там, где его нет. Это снижает точность результата. А всего то нужно один раз найти величину смещения и потом во время работы датчика вычитать эту величину из его показаний.
Простейшее решение для поиска величины смещения нуля, которое сразу приходит в голову — это создать условия, при которых датчик точно должен показывать ноль. Значение, регистрируемое на датчике — это и есть величина смещения нуля! Так? Но нет — на акселерометр постоянно действует сила тяжести. Чтобы её избежать, понадобится невесомость (подбрасывание не подойдёт). На компас действует магнитное поле Земли, а на гироскоп её вращение. Так что, если у вас нет персонального звездолёта, то придётся что-то придумать.
Второе решение, которое сразу приходит в голову — это поставить датчик (а точнее его оси) в такое положение, при котором мы точно будем знать, что должен показывать датчик. Разница между тем, что датчик показывает и тем, что он должен показывать — и будет смещение нуля! Так? Например, мы знаем, что если акселерометр поставить в уровень с горизонтом, то по идее, вектор ускорения свободного падения будет направлен точно вдоль оси Z датчика. Величину вектора ускорения мы знаем.
Однако есть проблема. Заключается она в том, что мы не можем точно установить оси датчика в уровень с горизонтом. Дело в том, что поверхность на которую мы будем опираться не параллельна печатной плате. Та в свою очередь не параллельна площадке на которой расположен датчик. Сам датчик не ровно стоит на своей площадке и оси внутри датчика не параллельны корпусу датчика. Погрешность в установки оси относительно горизонта на 1 градус, даёт проекцию, сопоставимую по размерам с величиной самого смещения нуля, которое мы хотим найти. В случае магнитометра, мы вдобавок не знаем, куда направлен вектор магнитного поля. В теории — на север. Но на практике, само магнитное поле Земли неоднородно по напряжённости и направлению. Плюс ближайшие металлические предметы вносят свои коррективы.
Постановка задачи и способ решения
Задача звучит так: нужно определить вектор смещения нуля, используя показания датчика, который всегда будет регистрировать вектор смещения + постоянный вектор внешнего воздействия (ускорение свободного падения, вращение Земли, магнитное поле Земли), величину и направление которого мы не знаем (в случае с акселерометром величину мы знаем, но опять же масштаб датчика может быть не равен 1).
Способ решения. В данной статье предлагается определять вектор смещения следующим образом. Мы берём и крутим датчик по всякому и регистрируем показания датчика. После N измерений, величины взятые с датчика и расположенные на графике будут представлять собой шар, радиус которого — это величина внешнего воздействия, а центр — это как раз искомая величина смещения нуля.
Как правильно получить точки?
Для облегчения самой процедуры измерения, можно написать простенькую программу. Она должна фиксировать показание датчиков, когда прибор неподвижен. Нам останется только поворачивать прибор в нужные положения. Для того, чтобы определить неподвижное состояние, подходит и не калиброванный акселерометр — просто берём разницу между текущим значением и предыдущим. И если больше уровня шума, то значит фиксируем движение. У меня порог получается в районе 0,07G. Если держите руками, будет получаться больше этого значения. Я использовал для фиксации положения малярный скотч. Если всё-равно не получается — проверьте, нет ли рядом холодильника, вентилятора или чего-то подобного. Как это может быть в коде
// здесь у вас глобальные по модулю переменные static TSumSensorsData g_sens_data[2]; static int32_t g_sens_data_sum_cnt[2]; static uint8_t g_sens_data_num; // здесь какое-то прерывание, при получении данных с датчиков IS_INTERRUPT void on_dma_raw_ready_calibrate_step1() { SensorRawBuffer *raw = sensor_get_raw_buffer(); g_sens_data
Итог
У метода довольно хорошая точность. Метод позволяет обходиться простыми подручными средствами (мяч, банка и т. п.). Достаточно быстро работает. Простой код. Во многих датчиках есть специальные регистры, куда можно записать найденное значение, и датчик будет сам на лету его вычитать. Такие регистры обычно имеют префикс «TRIM», как в MPU9260, или «OFFSET», как в LSM303. А вот всем известный LIS302DL таких регистров не имеет.
Не забывайте ставить плюсик, если понравилось. Пишите в комментариях свои способы калибровки датчиков.
В чем заключается ошибка его работы
Причин некорректной работы может быть несколько:
- в настройках Мейзу Global или Mini датчик отключен;
- после падения прибор изменил положение и стоит неровно;
- отсутствует уплотнитель, мелкая деталь теряется после снятия экрана;
- прибор поврежден или перегорел;
- устройство может на время переставать корректно работать из-за сбоя в прошивке или загрузчике;
- некорректная установка при ремонте.
Ошибка калибровки датчика приближения Meizu может появляться из-за грязи на дисплее. Также рекомендуется снять защитный аксессуар и попробовать совершить звонок без него. В настройках Андроид стоит проверить, включен ли элемент. Если ситуация не изменилась, можно переходить к калибровке.
Как выполнить калибровку акселерометра
Данный датчик является одним из самых полезных, ведь с его помощью определяется ориентация устройства в пространстве, да и многое игры используют данный сенсор для управления, к примеру, для контроля автомобиля на трассе. Если по каким-то причинам он работает не корректно вам стоит выполнить следующие действия. Для выполнения данного действия вам потребуется программа GPS Status & Toolbox.
- Скачиваем, устанавливаем и запускаем приложение.
- Теперь необходимо положить смартфон/планшет на ровную поверхность, чтобы в дальнейшем откалибровать датчик как можно правильнее. Значения наклона должны приравниваться к нулю, как показано на скриншоте.
- Нажимаем на левый верхний угол и попадаем в основное меню, где необходимо выбрать раздел «Калибровка акселерометра»
. - Убедитесь в том, что устройство лежит на идеально ровной поверхности и выберете пункт «Откалибровать»
. - Практически мгновенно программа выполнит необходимые действия, а на экране устройства появится надпись «Акселерометр откалиброван»
.
Возможные проблемы
При эксплуатации смартфона вы можете столкнуться с разного рода проблемами, которые касаются G-Sensor. К примеру, многие жалуются на то, что у них G-Sensror попросту не работает на Андроиде, то есть устройство не выполняет автоповорот, а также не определяет количество шагов и скорость движения. В подобной ситуации нужно действовать так:
- Убедитесь, что в вашем устройстве действительно есть данный сенсор. Для этого воспользуйтесь приложением «Датчикер».
- Проверьте, не была ли принудительно отключена функция автоповорота экрана.
- Если вы пользуетесь смартфоном на кастомной прошивке, то установите официальную версию оболочки.
Если речь идет о частичной неисправности сенсора, когда положение смартфона определяется некорректно, то решить проблему удается калибровкой датчика. Если же ни одна из рекомендаций вам не помогла, то не исключено, что G-Sensor вышел из строя, и его придется заменить, обратившись в сервисный центр.
Расположение датчика и функциональные особенности
Сенсор датчика приближения располагается на верхней плашке лицевой стороны устройства. Обычно там расположены динамик, камера, сенсоры приближения и освещения. В последний моделях эти сенсоры объединяют в один.
Как узнать где расположен датчик? Позвоните другу и поднесите палец вплотную к сенсору (пример расположения на скриншоте ниже). Когда экран потухнет — поздравляем это и есть датчик приближения.
Расположение датчика приближения
Основная функция этого сенсора — реакция ни приближение объекта к экрану телефона. Такая технология придумана для автоматической блокировки дисплея во время разговоров по телефону, общению по Viber или WhatsApp. При следующем звонке обратите внимание, как экран тухнет если поднести аппарат к уху и затем загорается после завершения разговора.
Сам сенсор отправляет сигнал инфракрасного света для определения на каком расстоянии находится объект и при приближении производит блокировку.
Устройство сенсора приближения
При таком подходе получаем сразу два больших плюса:
- Блокирована экрана от случайных нажатий ухом, что предотвращает случайную завершению разговора, включение громкой связи, так же случайно можно перевести звонок в режим ожидания и тп;
- Второй момент — экономия заряда батареи смартфона. Дисплей телефона — основной источник потребления питания, при включенном экране — расход увеличивается и батарея быстро садится. При звонке с выключенным экраном батарея живет дольше;