Датчики определения положения в пространстве широко используются в мобильных устройствах, а для самоделок чаще всего применяются в квадрокоптерах.
Также, его можно применить
в светящемся шлеме! Удобно, не правда ли? Наклонил голову вправо — загорелось правое «полушарие» =) влево — левое, согнул голову в шее — сзади на шлеме высветился стоп-сигнал! Вот только, думаю, моей шеи хватит минут на 5 таких упражнений, потом — коллдаун, в виде боли на неделю обеспечен.
Итак, заказал — прислали, теперь нужно разобраться и продемонстрировать функционал для Вас, уважаемые читатели Муськи.
Пришло с треком, не известно, почему, но в Киеве посылку держали неделю (или это глюки системы треккинга). Дошла чуть менее, чем за три недели. Упаковано в три слоя утеплителя — для амортизации. Сам модуль — внутри запаянного пакетика со штрих-кодом на наклейке:
Размеры платы: 20x16мм. В комплекте два набора штыревых контактов: ровные и загнутые — удобно, не придется гнуть или ровнять.
Большие отверстия
не металлизированы, как на картинке в магазине, поэтому, если Вы будите их прикручивать болтами к «минусу», эффекта не будет. Я заливаю их термоклеем, а он, образуя «шапочки», надёжно фиксирует плату.
Отвертия контактов металлизированы отлично, паяются без проблем.
Модуль GY-521 включает понижающий линейный стабилизатор для питания от 5В, красный светодиод питания и обвязку, обеспечивающую работу по протоколу I2C.
MPU-6050 снабжен акселерометром, гироскопом и термометром. Зачем нужен термометр — не понятно, вероятно, его было удобно разместить в этой микросхеме. Или, действительно, есть такие варианты применения, о которых я не знаю, где
тебя вертят и греют нужно вертеться в пространстве и знать температуру =)
Или, в процессе интенсивной работы с устройством, оно может нагреваться и нужно контролировать его температуру и нагрузку.
Характеристики:
— 16-битный АЦП,
— напряжение питания 3-5В,
— поддержка протокола «IIC» (может, I2C ?),
— диапазон ускорений: ± 2 ± 4 ± 8 ± 16g,
— диапазон «гиро»: ± 250 500 1000 2000 ° / s,
— покрытие иммерсионным золотом вместо лужения,
— ток при работе последнего примера составил 5.3 мА и 1.2 мА когда устройство не успело стартовать (питание на модуль было подано после выполнения setup() контроллером)
Подключение к Arduino
Для интерфейса
I2C у Ардуино имеются контакты A4 (SDA) и A5 (SCL), да-а, это те, которые расположены чёрти-где (на одной плате у меня они были справа от контроллера, на другой с левого края). В коде нужно использовать библиотеку Wire, прочитать о ней можно
туточки. Минимальная схема во Fritzing такая:
… а значит у нас уже не 8 лишних штырьков, а целых двенадцать!
Тестирование
Термометр тестировать проще всего: залил скетч
отсюда, открыл монитор порта, выставил скорость на 9600, —
побежали такие строки
AcX = 1624 | AcY = -808 | AcZ = 15176 | Tmp = 25.14 | GyX = 11 | GyY = 314 | GyZ = -138
AcX = 1584 | AcY = -876 | AcZ = 15112 | Tmp = 25.00 | GyX = 0 | GyY = 193 | GyZ = -163
AcX = 1616 | AcY = -904 | AcZ = 15172 | Tmp = 25.05 | GyX = -2 | GyY = 264 | GyZ = -181
AcX = 1648 | AcY = -836 | AcZ = 14948 | Tmp = 25.09 | GyX = 3 | GyY = 146 | GyZ = -192
AcX = 1792 | AcY = -800 | AcZ = 15216 | Tmp = 25.09 | GyX = 27 | GyY = -181 | GyZ = -218
AcX = 1864 | AcY = -900 | AcZ = 14932 | Tmp = 25.09 | GyX = 11 | GyY = 48 | GyZ = -206
AcX = 2144 | AcY = -796 | AcZ = 14860 | Tmp = 25.05 | GyX = 8 | GyY = 100 | GyZ = -191
AcX = 2088 | AcY = -916 | AcZ = 14952 | Tmp = 25.14 | GyX = 11 | GyY = 158 | GyZ = -189
AcX = 2180 | AcY = -752 | AcZ = 14964 | Tmp = 25.14 | GyX = 6 | GyY = 334 | GyZ = -182
AcX = 2296 | AcY = -796 | AcZ = 15076 | Tmp = 25.05 | GyX = -3 | GyY = 184 | GyZ = -189
AcX = 2160 | AcY = -788 | AcZ = 15176 | Tmp = 25.14 | GyX = -8 | GyY = 184 | GyZ = -172
AcX = 2036 | AcY = -852 | AcZ = 14988 | Tmp = 25.09 | GyX = 3 | GyY = 292 | GyZ = -172
AcX = 1984 | AcY = -836 | AcZ = 14892 | Tmp = 25.09 | GyX = 38 | GyY = 90 | GyZ = -205
AcX = 2136 | AcY = -708 | AcZ = 14976 | Tmp = 25.19 | GyX = -5 | GyY = 270 | GyZ = -148
AcX = 2000 | AcY = -788 | AcZ = 14888 | Tmp = 25.14 | GyX = -35 | GyY = 239 | GyZ = -157
AcX = 2008 | AcY = -784 | AcZ = 15048 | Tmp = 25.19 | GyX = -3 | GyY = 342 | GyZ = -183
AcX = 1884 | AcY = -868 | AcZ = 15140 | Tmp = 25.19 | GyX = -3 | GyY = 214 | GyZ = -194
AcX = 2072 | AcY = -820 | AcZ = 15020 | Tmp = 25.28 | GyX = 41 | GyY = 157 | GyZ = -205
AcX = 2008 | AcY = -780 | AcZ = 15144 | Tmp = 25.24 | GyX = 0 | GyY = 220 | GyZ = -204
AcX = 1924 | AcY = -828 | AcZ = 14968 | Tmp = 25.24 | GyX = -9 | GyY = 254 | GyZ = -187
AcX = 1920 | AcY = -828 | AcZ = 14936 | Tmp = 25.33 | GyX = 7 | GyY = 253 | GyZ = -185
AcX = 2012 | AcY = -728 | AcZ = 14904 | Tmp = 25.14 | GyX = 16 | GyY = 190 | GyZ = -167
AcX = 1900 | AcY = -744 | AcZ = 15048 | Tmp = 25.42 | GyX = -4 | GyY = 162 | GyZ = -177
AcX = 1940 | AcY = -780 | AcZ = 14992 | Tmp = 25.28 | GyX = -34 | GyY = 271 | GyZ = -191
AcX = 1960 | AcY = -900 | AcZ = 15080 | Tmp = 25.38 | GyX = 2 | GyY = 194 | GyZ = -182
AcX = 1840 | AcY = -952 | AcZ = 15012 | Tmp = 25.38 | GyX = 19 | GyY = 272 | GyZ = -167
Вследствие нагревания феном для волос, значение
Tmp = взлетело до 80. Далее покрутили в пространстве платкой — другие показания тоже изменяются, но это не наглядно.
Данные, выводимые вторым скетчем
InvenSense MPU-6050
June 2012
WHO_AM_I: 68, error = 0
PWR_MGMT_1: 40, error = 0
MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 12180, 9468, -9168
temperature: 22.153 degrees Celsius
gyro x,y,z: -462, -5303, -490,
MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 13204, 8928, -7420
temperature: 22.482 degrees Celsius
gyro x,y,z: 282, -2012, -956,
MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: -1276, 7932, -16232
temperature: 22.435 degrees Celsius
gyro x,y,z: -1168, 1159, 1258,
MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 6216, 10604, -12796
temperature: 22.576 degrees Celsius
gyro x,y,z: -2161, 4363, 2176,
Более приятный глазу пример описан
в этой статье. Там реализована трансляция положения предмета в реальном времени! Для повторения эксперимента, нужно скачать по ссылкам в конце той статьи:
скетч для Ардуино —
GY_521_send_serial (в atmega128 у меня залилось без проблем)
и прогу для 3D-рендеринга
ShowGY521Data.
Последнюю нужно запускать в IDE
Processing, статья была написана в 2013 году и для нормальной работы, качать лучше версию 1.5.1, в исходнике нужно подправить номер порта:
short portIndex = 1;
в строке
15 вместо
1 поставить порядковый номер COM-порта, но не номер из его имени (у меня, при подключении программатора, появляется один порт «COM15», я исправил на
0, если у Вас, допустим, есть порты «COM8» и «COM10», причем, последний соединён с Ардуино, то ничего исправлять не надо);
myPort = new Serial(this, portName, 38400);
в строке
42 поставить скорость, которая была в скетче для Ардуино — 19200.
Запускаем программу…
видим три объекта, моделирующих гироскоп, акселерометр и нечто «средне».
При отклонении платы, объекты синхронно пляшут, акселерометр подёргивается реще
После определённого времени кручения платой, показания гироскопа сбиваются:
это нормально и об этом написано в статье, упомянутой выше.
Примечательно, что если нажать ресет и перезагрузить плату в произвольном положении, то реальное положение в пространстве будет показывать акселерометр, гироскоп же сориентироваться в изначальное положение:
Суть этого вяления раскрыта в первом комментарии к этой статье от
AndyBig.
Думаю, можно будет реализовать с помощью этого модуля какую-нибудь «неваляшку», шлем обклеивать светодиодами как-то рука не поднимается.
Тестовая установка
, о котором
я писал ранее, был пересмотрен, урезан и сокращён (кстати, на этом фото заметно отличие в качестве металлизации отверстий обозреваемой платы и дешевой платы Ардуино):
если отсоединить
тентакли шлейф от креплений, то откроются два ряда контактов, у которых нужно «поотламывать половинки», — в результате получится разъем, удобно вставляющийся в отверстия макетной платы. Для пущей надёжности, нужно проклеить корпус, т.к. держаться на одних контактах конструкция не будет.
всё ещё может напугать, но на самом деле бояться нечего:
спаял с обратной стороны контакты, прозвонил их тестером — и можно подключать. Лично моя практика показывает, что лучше потратить пару секунд на предварительную проверку, чем ткнуть «не туда» и спалить девайс… Я так спалил Orange Pi PC =)
Даташит на сенсор MPU-6050
Описание регистров MPU-6050
Неплохая статья
Товар предоставлен для написания обзора магазином. Обзор опубликован в соответствии с п.18 Правил сайта.
Это Вы размер чего привели? SMD-резистора на плате? Что-то тонковато даже для резистора :)
Покрытие иммерсионным золотом вместо лужения.
Вы, наверное, не совсем понимаете суть MEMS-гироскопа. Он не показывает положение в пространстве :) Он выдает только скорость и направление вращения. Если чип не вращается, то гироскоп будет выдавать нули, в каком бы положении он ни находился, хоть на боку, хоть наискосок, хоть вверх ногами :)
А, может, он отрабатывает за слишком большие промежутки времени? Может, он раз в несколько минут в ноль устаканивается? В примерах под спойлером он синхронен с акселерометром, а они были заскринены в течении секунд тридцати.
Плюс у любых MEMS-гироскопов есть некий дрейф (у очень хороших поменьше, у плохих побольше), когда он в неподвижном положении будет показывать какое-то мизерное вращение. Причем величина дрейфа не постоянна, а зависит и от температуры, и от электромагнитной обстановки. За короткий промежуток времени этот дрейф сильно не накопится, но вот за минуты-десятки минут он уже внесет приличную погрешность в рассчеты.
Посмотрите на этот проект, для примера ardupilot.org/copter/docs/common-apm25-and-26-overview.html#common-apm25-and-26-overview
Там уж точно не 10гц обрабатывается + куча всего еще. Перестали железо поддерживать из-за того что уперлись в потолок флеш-памяти в 256кб
Во-вторых, в mpu6050 есть еще встроенный DSP, который может взять на себя значительную часть математики
А указанный Вами проект базируется на скетчах? Используя ардуиновские библиотеки?
DSP есть, только он этим примером не используется.
Там половина библиотек или модифицирована или заменена (не все стандартные библиотеки одинаково полезны)
А что мешает поставить скорость UART в 115200 — тогда уже больше сотни кадров в секунду можно. Аппаратный UART кушать не просит.
Ну и если этого не хватает — строку можно ужать в 35-40 символов.
Если и этого не хватает — передавать в двоичном виде 6 осей * 2 байта + 2 байта заголовок = 14 байт, итого получится около 1000 отсчетов в секунду можно выводить
Автопилот на ардуине заслуживает восхищения, не спорю. Но не только как техническое решение, но и как пример маразма — столько сил отдать на вылизывание всех библиотек и кода в целом для того, чтобы бороться с ущербностью выбранной аппаратной платформы :)
Только вот, основной смысл ардуино, что человек берет «конкретный скетч» и пилит его под собственные нужды, если требования отличаются.
Вы видимо очень крутой программист и отлично разбираетесь в «платформах» и участвовали во многих масштабных open-source проектах, раз делаете такие громкие заявления…
По поводу того проекта — никуда ничто не потрачено. Он был вполне спокойно плавно портирован на ARM + RTOS, живет и развивается, если что.
Это не громкие заявления, это факты. Моя квалификация позволяет мне видеть их.
Ну разумеется, когда уже прижало окончательно.
Если говорить про «конкретный скетч», то да «helloworld.ino» наверняка не выдаст ни одного значения с акселерометра и гироскопа.
Лично я о вашей квалификации ничего не знаю. Так что это ваше личное мнение, а не какие не факты.
Опять какие-то безосновательные заявления. Вы ведь даже не посмотрели не почитали, но утверждаете.
Проект жил себе спокойно и работал ПАРАЛЛЕЛЬНО на нескольких разных платформах. И в какой-то момент просто прекратили поддержку одной из веток. Так поступают со многими проектами.
По изначальной теме: пусть хоть 1000 отсчетов в секунду будет — пространственное положение будет уплывать, причем довольно быстро. Пробовал, даже при 2х акселерометрах + 2х гироскопах (с разной чувствительностью) и 800 выборками в секунду — все плывет и будет плыть — это нормально
При чем тут helloworld.ino?
Лично я о вашей тоже, так что все это симметрично и в вашу сторону.
Мне достаточно того, что довольно сложную математическую модель в реальном времени впихивают в 8-битный контроллер с тактовой частотой до 20 МГц.
А кто сказал, что 1000 отсчетов достаточно? В идеале нужна частота отсчетов, стремящаяся к бесконечности.
Описание его регистров — 43zrtwysvxb2gf29r5o0athu.wpengine.netdna-cdn.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf
Купил цифровой акселерометр/гироскоп, затем аналоговый акселерометр.
У всех беда одна, они сильно шумят по осям.
Чтобы получить с них более менее достоверные данные, нужно использовать математические фильтры, типа фильтра Калмана.
А это куча дел и у Ардуины с ресурсами туго.
у многих такая проблема
Неужели за это время, не появилось чего нибудь посвежее (за эти же деньги)?
У нас был один-единственный предмет в школе, на котором нас учили последовательно излагать свои мысли, предмет назывался «Геометрия», на нём нужно было, при решении задачи, предоставлять текстовое описание последовательности умозаключений, доказывающих или опровергающих те или иные суждения. Сначала нужно было расписывать до аксиом, потом, по мере обучения, достаточно было до пройденных теорем. Учебник был советским, так что я сомневаюсь, что у Вас такого не было. В институте мы больше узнали об этом из уроков Философии, курсы по которой читаются вплоть до защиты кандидатской диссертации, вне зависимости от предмета.
Так вот, вы выдвигаете гипотезу без доказательств и еще заставляете читателей не известно, где искать доказательства вашего же суждения. Приведите аргументы — и к вам прислушаются.
Гироскоп — это тяжелая железяка, которая крутится с большой скоростью. То, что называется «МЭМС-гироскопом» — штука не большая, не тяжелая, и не крутится. Это всего лишь акселерометр по угловым координатам. Определение «чайницкое». Так же по-чайницки игрушечные квадрокоптеры называют «дронами», и многое другое.
я писал о них где-то в своем первом обзоре, связанном с Ардуино, а потом умные люди начали спор про МГТФ.
Такие проводки продаются на Али как самые дешёвые для пайки дорожек, но из трансформатора, думаю, любого, подойдут.
чуть макаю в него проводок, потом паяльником с припоем, — припой остаётся на части провода.
Из минусов — дым и несмываемость спиртом того, что остаётся после него на плате. Не знаю, может, это на самом деле какая-то «гремучая смесь», но на упаковке написано: «удаление не обязательно», лудит большинство всего, даже контакты дешёвой ардуины, о которых другие покупатели пишут, что не могут их залудить.