Работа НУБА с MPU-6050

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем ace_bob, 22 апр 2018.

  1. ace_bob

    ace_bob Нуб

    Всем доброго времени суток!
    Прошу подсказок. Я занялся реализацией интересного проекта на Ардуино, в котором будет использоваться IMU-сенсор, а именно MPU-6050. Самая первая промежуточная задача в проекте - это сделать 3D-мышь, т.е. заставить курсор мыши на компьютере двигаться в соответствии с движениями IMU. Просмотрев проекты в интернете, я понял, что как правило люди используют уже готовые, чужие библиотеки, например "MPU-6050.h". Мне очень нужно написать программу самостоятельно, с самого начала, чтобы получить новые для себя знания и в дальнейшем полностью понимать механику ее работы. Может кто-нибудь подсказать мне, с чего начать написание первой действующей программы (примитивной) без использования каких-либо нестандартных библиотек? Мысль зациклилась на том, что нужно соединить в один два примитивных скетча-примера: движение курсора, управляемого джойстиком и получение RAW-значений от MPU-6050 в мониторе последовательного порта.
     
  2. DIYMan

    DIYMan Гуру

    Если хочешь сам, то всё просто: берёшь даташит, читаешь, пишешь код, который работает с устройством согласно даташиту. Именно так и делают авторы библиотек.

    Даташит: http://pdf1.alldatasheet.com/datasheet-pdf/view/517744/ETC1/MPU-6050.html
     
  3. ace_bob

    ace_bob Нуб

    Спасибо!
    Даташиты скачал, перевел, теперь разбираюсь. Пока не все понятно, но со временем, уверен, разберусь.
    Сейчас, хочу написать первую действующую программу, иначе говоря, "скелет", который затем буду улучшать. Первая проблема в понимании - это совершенно рандомные RAW-значения, которые выкидывает MPU-6050, даже в состоянии покоя. Хотя, кажется, они меняются, в соответствии с движениями, "на глаз" не понятно. Величины разных порядков и знаков. Я так понял, что у всех так. Интересует, как лучше задать смещение, чтобы в покое значения были около 0. В интернете часто советуют просто подобрать число для сложения/вычитания, исходя из конкретного датчика, но это не серьезно... Может, использовать деление по модулю % или дополнительную величину, вычисляемую из уравнения, приравниваемого к 0? Или с RAW-значениями вообще так работать не принято?
     
  4. DIYMan

    DIYMan Гуру

    Почитайте про калибровку подобных датчиков - тема обширная и объёмная, в двух словах не расскажешь. Что касается показаний - физика, в показаниях всегда есть дрейф, хотите вы этого или нет. Опять же физика - в некотором окружении датчик будет работать не совсем корректно, для того, чтобы это понимать - надо прочитать даташит и понять, каким образом датчик устроен и на что именно в физической картине мира он реагирует.
     
  5. ace_bob

    ace_bob Нуб

    Буду разбираться дальше, спасибо!
     
  6. sslobodyan

    sslobodyan Гик

    Нет у этого датчика никаких рандомных показаний. Считываются 6 байт и затем группируются в 3 16-битных слова. Это и есть величины ускорения по осям. Затем ложится датчик горизонтально. Та ось, которая выдает около 1 (или -1) будет Z. Затем наклоните датчик вперед на 90 градусов. Та ось, которая стала 1 или -1 - будет осью Х. Оставшаяся - ось У.
     
  7. ace_bob

    ace_bob Нуб

    Вы правы, я уже понял, почему получал большие трудно читаемые значения - не делил значения на "sensitivity scale factor"... Исправил, все стало выглядеть правдоподобно. Теперь нужно каким-то образом преобразовать значения от гироскопов и "сшить" эту программу с управлением курсором мыши на ПК...