Всем доброго времени суток! Прошу подсказок. Я занялся реализацией интересного проекта на Ардуино, в котором будет использоваться IMU-сенсор, а именно MPU-6050. Самая первая промежуточная задача в проекте - это сделать 3D-мышь, т.е. заставить курсор мыши на компьютере двигаться в соответствии с движениями IMU. Просмотрев проекты в интернете, я понял, что как правило люди используют уже готовые, чужие библиотеки, например "MPU-6050.h". Мне очень нужно написать программу самостоятельно, с самого начала, чтобы получить новые для себя знания и в дальнейшем полностью понимать механику ее работы. Может кто-нибудь подсказать мне, с чего начать написание первой действующей программы (примитивной) без использования каких-либо нестандартных библиотек? Мысль зациклилась на том, что нужно соединить в один два примитивных скетча-примера: движение курсора, управляемого джойстиком и получение RAW-значений от MPU-6050 в мониторе последовательного порта.
Если хочешь сам, то всё просто: берёшь даташит, читаешь, пишешь код, который работает с устройством согласно даташиту. Именно так и делают авторы библиотек. Даташит: http://pdf1.alldatasheet.com/datasheet-pdf/view/517744/ETC1/MPU-6050.html
Спасибо! Даташиты скачал, перевел, теперь разбираюсь. Пока не все понятно, но со временем, уверен, разберусь. Сейчас, хочу написать первую действующую программу, иначе говоря, "скелет", который затем буду улучшать. Первая проблема в понимании - это совершенно рандомные RAW-значения, которые выкидывает MPU-6050, даже в состоянии покоя. Хотя, кажется, они меняются, в соответствии с движениями, "на глаз" не понятно. Величины разных порядков и знаков. Я так понял, что у всех так. Интересует, как лучше задать смещение, чтобы в покое значения были около 0. В интернете часто советуют просто подобрать число для сложения/вычитания, исходя из конкретного датчика, но это не серьезно... Может, использовать деление по модулю % или дополнительную величину, вычисляемую из уравнения, приравниваемого к 0? Или с RAW-значениями вообще так работать не принято?
Почитайте про калибровку подобных датчиков - тема обширная и объёмная, в двух словах не расскажешь. Что касается показаний - физика, в показаниях всегда есть дрейф, хотите вы этого или нет. Опять же физика - в некотором окружении датчик будет работать не совсем корректно, для того, чтобы это понимать - надо прочитать даташит и понять, каким образом датчик устроен и на что именно в физической картине мира он реагирует.
Нет у этого датчика никаких рандомных показаний. Считываются 6 байт и затем группируются в 3 16-битных слова. Это и есть величины ускорения по осям. Затем ложится датчик горизонтально. Та ось, которая выдает около 1 (или -1) будет Z. Затем наклоните датчик вперед на 90 градусов. Та ось, которая стала 1 или -1 - будет осью Х. Оставшаяся - ось У.