Исследовательский анализ данных датчиков MEMS

Анализ данных датчиков MEMS

Чтение, сбор и анализ данных из датчика MPU6050

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

Начнем.

Аппаратное обеспечение

MPU-6050 – это 6-осевой датчик, который объединяет 3-осевой гироскоп, 3-осевой акселерометр и интерфейс I2C. Как указано в техническом описании, он широко используется для планшетов и смартфонов. Когда наш смартфон или смарт-часы рассчитывают шаги и калории во время тренировки, фактически используются данные с датчиков MEMS. Но такие датчики могут использоваться не только для спорта. Я решил установить датчик в своей квартире на несколько дней и выяснить, смогу ли я обнаружить и проанализировать различные вибрации в здании, где я живу.

Если мы хотим собирать данные в течение нескольких дней, Raspberry Pi – хорошее решение для этого. Raspberry Pi – это недорогой (30-50$) одноплатный компьютер; он имеет низкое энергопотребление и множество выводов для подключения различных типов оборудования. Прототипировочная плата MPU-6050 может быть заказана на Amazon за 3-5$. Сам датчик использует шину I2C для передачи данных и может быть подключен к Raspberry Pi с помощью всего 4 проводов:

Диаграмма подключения, Изображение автора

Перед использованием датчика шина I2C должна быть включена в операционной системе Raspbian (есть достаточно учебников о том, как подключить MPU6050 к Raspberry Pi, поэтому я пропущу здесь “аппаратные” детали). После подключения датчика я создал простое приложение на Python, которое считывает данные с датчика и записывает их “как есть” в файлы журнала:

from datetime import datetimeimport smbusimport mathimport time# Регистры MPU6050PWR_MGMT_1   = 0x6BSMPLRT_DIV   = 0x19CONFIG       = 0x1AGYRO_CONFIG  = 0x1BINT_ENABLE   = 0x38ACCEL_XOUT_H = 0x3BACCEL_YOUT_H = 0x3DACCEL_ZOUT_H = 0x3FGYRO_XOUT_H  = 0x43GYRO_YOUT_H  = 0x45GYRO_ZOUT_H  = 0x47bus = smbus.SMBus(1)address = 0x68def device_init():    """ Инициализация MPU-6050 """    bus.write_byte_data(address, SMPLRT_DIV, 0x4)...