Taiming J Ответов: 1

Обнаружение акселерометр в MacBook


Я хочу создать настольное приложение Mac, которое воспроизводит звук, когда обнаруживает внезапное движение MacBook.
Просто я видел статью о том, что когда я использую SMSLib (Sudden Motion Sensor), приложение может обнаруживать акселерометр.

Может ли кто-нибудь помочь мне узнать, как обнаружить внезапное движение MacBook?
Полезна ли для этого библиотека SMSLib?

Что я уже пробовал:

Просто я пытаюсь использовать SMSLib, но не знаю, Может ли это быть полезно.

1 Ответов

Рейтинг:
6

Jochen Arndt

Это должно быть возможно путем периодического опроса датчика и сравнения данных датчика с данными предыдущего опроса. Однако опрос требует значительного количества системных ресурсов, когда он выполняется через короткие промежутки времени, которые необходимы для обнаружения коротких резких движений.

Большинство акселерометров имеют возможность генерировать прерывания в определенных условиях. Но для их использования требуется, чтобы устройство (MacBook) поддерживало их, а акселерометр можно было запрограммировать с помощью библиотеки (источники библиотеки должны показать, возможно ли это).

Если MacBook лежит на столе, данные датчика должны быть близки к нулю для осей X и Y и 1,0 для оси Z (или -1,0). Когда он будет перемещен, данные изменятся соответствующим образом.

Поскольку данные зашумлены, может возникнуть необходимость фильтровать их при обнаружении медленных и небольших движений. Простой фильтр использует коэффициент ниже 1,0 (для каждой оси):

filtered = actual_value * factor - prev_value * (1 - factor)
prev_value = filtered_value


Затем вы можете дополнительно рассчитать тангаж и крен:
x_norm = x / sqrt(x^2 + y^2 + z^2)
y_norm = y / sqrt(x^2 + y^2 + z^2)
pitch = asin(x_norm)
roll = asin(y_norm / cos(pitch))


Я предлагаю написать простое приложение, которое опрашивает датчик и распечатывает исходные и расчетные значения. Затем вы можете играть с ним, чтобы узнать необходимые ограничения при перемещении.


Taiming J

Не могли бы вы привести пример кода или образцы, чтобы сделать это?
Я буду очень благодарен, если вы его предоставите.
Спасибо

Jochen Arndt

https://github.com/liangqi/SMSLib:

"Вызовите smsGetData (), чтобы получить калиброванные SMS-данные."

"См. smslib.m и SMSTester.m для примера этого."