Проверьте датчики движения телефона или планшета: пузырьковый уровень на акселерометре, пошаговая проверка осей, обход компаса и измерение дрейфа, пока устройство лежит неподвижно. Всё выполняется в браузере.
Ждём первого показания
Возьмите устройство и подвигайте им. О датчике ничего не утверждается, пока он действительно что-то не сообщил: те же события браузер выдаёт и на настольном компьютере, где никакого акселерометра нет, наполняя их пустыми значениями.
Показаний акселерометра пока нет
Пузырьковому уровню нужна сила тяжести, а она приходит с акселерометра. Подвигайте устройство или проверьте, разрешён ли доступ к движению выше.
Откройте эту страницу на том устройстве, которое хотите проверить. У настольного компьютера этих датчиков нет, и ни один браузер их не придумает.
Определение движения в телефоне — это три отдельные детали, притворяющиеся одним устройством: чип, чувствующий, где низ, чип, чувствующий поворот, и чип, чувствующий магнитное поле Земли. Каждая отказывает по-своему, и каждая проверяется выше отдельно.
Акселерометр измеряет силу, а в покое эта сила — сила тяжести: так телефон понимает, где верх, и одного этого хватает для поворота экрана и шагомера. Гироскоп измеряет вращение, и именно он ведёт камеру через быструю панораму, а шлем — через поворот головы, потому что откликается за миллисекунды там, где сила тяжести устанавливается заметно дольше. Магнитометр измеряет поле Земли и даёт двум остальным север, за который можно держаться. В недорогих телефонах стоит один акселерометр; когда игра пишет, что устройство не поддерживается, не хватает обычно как раз гироскопа.
У любого акселерометра есть смещение — небольшая постоянная, которую он добавляет к измеренному, — и телефон вычитает заводское значение. Уроните телефон или замените экран, и система координат датчика сместится относительно корпуса, по которому его калибровали, — поправка перестанет совпадать. В результате уровень показывает градус-другой на идеально ровной поверхности, и по одному измерению этого не видно. Разделить одно от другого позволяет разворот устройства на 180°, и именно это делает проверка выше.
Гироскоп в покое сообщает небольшое ненулевое вращение, и всё, что на нём построено, должно постоянно вычитать это число. Пока оно стабильно, вычитание работает и никто ничего не замечает. Когда оно растёт — со временем, от нагрева, после удара — поправка за ним не поспевает, и вы получаете камеру, которая уползает в игре, компас, который поворачивается, пока телефон лежит, и шлем, чей мир медленно вращается. Двадцати секунд бездействия достаточно, чтобы это измерить.
Магнитометр измеряет поле около половины гаусса, и почти всё вокруг сильнее: чехол с магнитной застёжкой, автомобильный держатель, динамик, крышка ноутбука, арматура в полу. Большая часть того, что выглядит как сломанный компас, — это помехи, а восьмёрка, которую просят описать картографические приложения, — это перестройка поправки по свежему набору направлений. Настоящая неисправность выглядит иначе: курс не идёт плавно, а прыгает. Поэтому тест выше — полный оборот, а не одно измерение.
Датчики стоят на материнской плате, а системы координат, по которым их калибруют, принадлежат корпусу. Замена экрана, замена аккумулятора или корпус, который вскрывали и закрывали, могут сдвинуть и то, и другое. Уровень, который вдруг стал врать, компас, который постоянно требует калибровки, и гироскоп, который раньше не дрейфовал, — всё это стоит проверять вместе на устройстве, которое только что вскрывали.
По данным о движении можно понять, что человек набирает на клавиатуре, и опознать устройство по неповторимым погрешностям его датчиков, поэтому WebKit перестал раздавать их даром: на iPhone и iPad страница обязана спросить, из настоящего касания, по https. Chrome на Android не спрашивает — поэтому кнопка появляется на одном и не появляется на другом. В любом случае показания остаются в странице: отсюда ничего никуда не отправляется.