Все ещё редактирую пост, не комментируйте его пожалуйста.
В мире существует множество вещей, при взгляде на которые в мозгу молнией проскакивает мысль о том, что с ней уж точно можно "Ху@к-ху@к и в продакшн". Но потом все получается как в анекдоте про фею и двух танкистов.
Таков и герой этого обзора - детище китайского инженера, рожденное во полумраке бизнес-центров. Ничего не имею против разработок из поднебесной, но вот зачастую уровень бесплатной поддержки, а так же документирования устройств вызывает желание постоянно и беспробудно пить.
WitMotion
Не буду копипастить с их сайта историю о том, как одна девственница вышла из пены морской и немедля основала в великом граде Shenzhen лидера в области... Словом, есть такая компания. В википедии про нее ничего не встречается, сайт: https://www.wit-motion.com/
Как я понимаю, анализируя представленный на сайте ассортимент - специализируется на всяких штуках-дрюках, которые можно изготовить на базе IMU-датчиков: это инклинометры, гироскопы, датчики положения или наклона, а так же что-то иное описываемое различными комбинациями слов, которые можно встретить в спецификациях и файлах документации - например "Nine axis attitude angle sensor", "AHRS Inclinometer" и пр.
По сути - устройства, которые предназначены для ориентации в 3D-пространстве. В принципе разделения моделей по функциональности я пока не разобрался - там черт ногу сломит. Одни и те же модули находится как в разделе "Axial Sensor", так "Gyroscope". На китайской версии сайта производитель наплодил ещё больше разделов, в которые распихал свои девайсы. Покопаться в спецификациях можно тут: https://wiki.wit-motion.com/english/doku.php
В ассортименте компании есть как отдельные модули, предназначенные для встраивания в собственные устройства, так и уже корпусированные. Интерфейсы доступа разнообразные: I2C/UART-TTL/RS232/RS485/Bluetooth/BLE/Wi-Fi.
По точности предлагаются варианты обычные, высокоточные, military-grade и пр. Чем отличаются - не спрашивайте, найти нормальные спецификации в табличках мне не удалось - только рекламные описания, с китайской же версии wiki ссылки ведут на pan.baidu.com, а это боль.
Примеры корпусированного изделия:
Цветом и ценой отличаются - это я понял. Еще внутренностями - где-то MPU-6050, где-то MPU-9250, магнитометры от разных производителей в различных моделях. Техподдержка отвечает примерно так: "JY901B = WT901B. But WT901B is not same as JY901. Dont worry about the type which you got is not WT901B.They are both same but different names in our company".
JY901B
Однажды искусственный интеллект Алиэкспресса понял, что я слишком часто закрываю страницы с инклинометрами от Murata (даже SCA100T стоит 3т.р.) и предложил вариант - WT901B, который по спецификации выглядел неплохо и даже документирован, как показалось на первый взгляд. Заказ был сделан, продавец стремительно отгрузил сенсор, пообещал ответить на любые вопросы по его использованию. Ну, мы все знаем, как это происходит... Получил модуль с надписью JY901B, который "the same, but..."
Внешний вид модуля приведен ниже (но мой, к примеру, с жестяной крышечкой над чипами). Коробочка - часть упаковки. Но не единственная. Еще есть картонная коробка, пластиковый распор для жесткости. Вобщем, упаковано, как смерть Кащеева - думаю, что даже если заведующая отделением Почты РФ уронит ящик с тушенкой, то у модуля есть все шансы выжить.
[описание месяца пыток пинь-инем пропущено]
Итак, для начала, - по моему субъективному мнению этот модуль стоит брать в самом начале знакомства с линейкой продуктов от WitMotion, т.к. он поможет понять, как в принципе работать с устройствами данного производителя. Протоколы девайсов примерно одинаковы, аппаратная реализация - примерно тоже. В каких-то из них нет магнитометра, какие-то не поддерживают работу с GPS...
Основное достоинство модуля заключается в том, что он сам крутит-вертит данные, полученные с IMU, прикладывает к ним фильтр Калмана и отдаёт пользователю нормальную цифирь. На МК можно сэкономить, стало быть.
Заявленный диапазон измерений:
- Acceleration +/-6g;
- Gyroscope +/-2000°/s;
- Magnet Field +/-4900uT;
- Angle X, Z-axis +/-180°, Y +/-90°.
Успешно запускается как от 5V, так и от 3.3V. С обычным ATmega328, ESP32 все фунциклирует, VCC с GND путал - ничего не погорело. Потребляемый ток (по спецификации) <25mA
Интерфейсов несколько. Первый и основной - TTL-UART. Через него общается с модулем утилита конфигурации. На него же завернут, как я понимаю, и RS232/RS485/Bluetooth.
По-умолчанию работает в активном режиме: с заданной периодичностью (return rate = 0.1Hz...200Hz) отсылает данные в порт. Так же интерфейс переключается в режим "по запросу", но о том, как в нём работать, производитель умалчивает. Способ, конечно, найден...
Состав данных выбирается пользователем из:
- Time pack
- Acceleration pack
- Angular velocity pack
- Angle Pack
- Magnetic Pack
- Port status pack
- Atmospheric pressure & Height Pack
- Longitude and Latitude Pack
- GPS speed Pack
- Quaternion Pack
- Satellite position accuracy
Часть этих паков удастся полноценно использовать только при соблюдении ряда условий.
Time pack - содержит текущую дату и время контроллера. RTC в нем нет, батареи нет, при каждом включении модуль начинает отсчитывать с начала 2000-го года. Однако, есть возможность принудительно установить дату и время. Тогда часики будут тикать вплоть до снятия питания. Если же подключить к модулю GPS-приёмник, то он будет дёргать время из NMEA RMC sentence. Удобно.
Magnetic Pack - актуален только для моделей с магнитометром. 6-axis варианты типа WT61 его не имеют. Те, что с 9-axis оборудованы оным.
Port status pack - в нем передаются состояния портов, которые умеют работать в режимах Analog Input (10 bit) и Digital Input. Вдруг входов на МК не хватило.
Atmospheric pressure & Height Pack - модули с интегрированным барометром передают давление (в Паскалях) и высоту над уровнем моря.
Longitude and Latitude Pack - долгота и широта. Берется с GPS-модуля, видимо тоже из RMC.
GPS speed Pack - скорость, угол поворота (yaw), высота над уровнем моря. Информация доступна при подключенном GPS, NMEA VTG sentence.
Satellite position accuracy - тоже вытягивается с GPS, полагаю что с NMEA GSA sentence. Содержит кол-во спутников, PDOP/HDOP/VDOP.
Второй, дополнительный, интерфейс I2C позволяет получить все те же самые данные, но уже только в режиме "по запросу". Что, в общем-то, спасает, если UART на МК уже занят. Так же неоспоримым плюсом является возможность программного назначения I2C-адреса. Однако, следует учитывать, что такой способ взаимодействия имеет и свои недостатки. Например, из режима энергосбережения через I2C вывести модуль нельзя. Ввести - можно. А вывести - только через UART.
Так же по этим интерфейсам из модуля вытаскивается разная служебная информация - битрейт UART, частота оцифровки данных направление установки (горизонталь/вертикаль) и т.д. и т.п. Установка данных параметров возможны через утилиту конфигурирования или с МК. Последний способ практически не описан производителем, но найден и опробован.
Порты расширения / GPIO - штука необычная. Как упоминалось ранее - они могут расширить возможности подключенного микроконтроллера. Работают аналоговыми и цифровыми входами, а так же цифровыми выходами. PWM на них, несмотря на множество упоминаний в спецификациях и руководствах, получить не удалось. В утилите конфигурирования, доступной на данный момент, такие настройки отсутствуют. Особняком стоит пин D1 - к нему, вдобавок к остальным функциям, подключается выход TX GPS приемника. Таким образом модуль может получить как точное время, так и географические координаты местоположения. Пины участвуют и в функционале "Alarm", при котором модуль самостоятельно отслеживает угол поворота по оси X и/или Y и устанавливает заданный логический уровень при достижении лимитов, определяемых пользователем. Т.е. сигнализация активируется без участия МК.
По поводу точности данного модуля написать что-то сложно - лабораторного и поверенного оборудования для контроля не имею. Производитель приводит следующие цифры:
- Resolution: Acceleration (0.005g), Gyroscope (0.61°/s), Magnet Field (16 bits);
Субъективно и на бытовом уровне все нормально - показания при поворотах не скачут, как бешенные, на правду похожи. Есть, правда, один нюанс: при достижении прямого угла по оси Y наступает сингулярность и земля налетает на небесную ось... вернее - координата по абциссе переворачивается на 180 градусов.
Когда углы Эйлера указывают положение, будут сингулярности. Положение особенности связано с порядком вращения углов Эйлера. Например, последовательность вращения углов Эйлера определяется как ZYX, тогда ось Y ± 90 ° равна
Особенность локации. Если последовательность вращения определяется как ZXY, то ось X ± 90 ° является положением сингулярности. Наш модуль определен в соответствии с ZYX. Можно понять, что ось Z представляет собой угол направления, а фаза
Если смотреть по оси X. Когда ось Y расположена на 90 градусов, а ось X направлена вверх, ось Z представляет ту же позу под любым углом, что бессмысленно. Кроме того, предполагается, что ось X равна 0 градусов, а ось Z - 0 градусов. Ось Y
От 89 ° до 91 ° положение изменится с [0, 89, 0], [180, 91, 180], а угол оси X внезапно изменится от 0 до 180 градусов, а также ось Z произошла внезапная перемена.
-----
Нормальную гифку с демонстрацией работы пока создать не удалось, поэтому, если интересно, как оно все же выглядит, пройдите по ссылке: https://youtu.be/0nEAC3PHouc
Производитель поставляет примеры обмена с модулем, но как-то в них все по-китайски, что ли... Так что предлагаю свой вариант, который должен сработать на всем семействе Axial-датчиков от WitMotion: https://github.com/zbx-sadman/JY901
Пример работы под I2C на подходе, конфигурирование чипа несколько специфическое, так что его приходится изучать методом реверс-инжиниринга. Часть я отреверсил, но потом закончилась триальная лицензия на нормальный сниффер COM-порта. Ищу аналог...
Вообще - я давно хотел в свою прошивку для мониторинга добавить простой двухмерный инклинометр, чтобы закрыть направление "контроль плоскости". Но Мурата не по карману, а тут подвернулось такое чудо. Ну, я и взял из любопытства. Так что цели - получение экспириенса ))
Имел секс пару лет назад с модбас версией железки. Секса было слишком много. В конце концов удалось заставить работать. Никаких положительных эмоций. Теряет калибровку, врет... По сути хрень. Производитель про них сам ничего сказать не может. Помню, что считывать показатели удавалось легко, а вот что бы записать или откалибровать нужно было сплясать какую то хитрую штуку по модбасу, пароль что ли какой то там ввести.... Который производитель не знал :)
А вот еще, ось Z плавала, если изменялись только оси X и Y и это после калибровки. Причем плыла, помоему именно калибровка. Вощем бяка, стоит дорого, а от обычных копеечных модулей не отличается.
Всё верно - для конфигурирования нужно сделать Unlock ;)
Для устранения дрифта по Z у них целая процедура описана. В сущности : как на мобилах - повращать прибор туда-сюда. Но вообще - да, этот вопрос для меня открыт - как, ёпрст, на нормальных инклинометрах калибруют оси. Конечный пользователь, вроде бы, его не должен крутить, как бешенный.
Если внутрях стоит тот же MPU9250 - то стабильность и отличаться не будет. Деньги за API и простоту доступа к данным берутся...
Ну в моем случае это была некая конструкция из палок с шарнирами и положение этих палок контролировались этими инклинометрами. Калибровка осуществлялась складыванием конструкции в определенную фигуру и нажатием кнопки. Если я правильно помню калибровок было две, одна оперативная, перед началом работы. А вторая инсталяционная, вот там да нужно было махать этими палками как бешеный :)
А грабли как раз с унлоком и были, причем то что было описано в даташите было неправильно от слова совсем :)
Еще в 2017 году с коллегой мы делали одну систему и нам нужен был дешевый авиагоризонт. Выбрали WT901. Установлен был в достаточно трясучем месте - в носовом отсеке объекта испытаний, рядом с двигателем.
За прошедшее время могу сказать следующее. Устройство работает, крен/тангаж показывает (а так же остальные параметры тоже). Не врет.
Гриш, а для каких задач ты это планируешь использовать?
Вообще - я давно хотел в свою прошивку для мониторинга добавить простой двухмерный инклинометр, чтобы закрыть направление "контроль плоскости". Но Мурата не по карману, а тут подвернулось такое чудо. Ну, я и взял из любопытства. Так что цели - получение экспириенса ))
Штуки-дрюки это классно!)
Кстати, DFRobot с вероятностью в 99% взял какой-то 6-осевой прибор от WitMotion и переклеил этикетку : https://www.dfrobot.com/product-2200.html
Имел секс пару лет назад с модбас версией железки. Секса было слишком много. В конце концов удалось заставить работать. Никаких положительных эмоций. Теряет калибровку, врет... По сути хрень. Производитель про них сам ничего сказать не может. Помню, что считывать показатели удавалось легко, а вот что бы записать или откалибровать нужно было сплясать какую то хитрую штуку по модбасу, пароль что ли какой то там ввести.... Который производитель не знал :)
А вот еще, ось Z плавала, если изменялись только оси X и Y и это после калибровки. Причем плыла, помоему именно калибровка. Вощем бяка, стоит дорого, а от обычных копеечных модулей не отличается.
Всё верно - для конфигурирования нужно сделать Unlock ;)
Для устранения дрифта по Z у них целая процедура описана. В сущности : как на мобилах - повращать прибор туда-сюда. Но вообще - да, этот вопрос для меня открыт - как, ёпрст, на нормальных инклинометрах калибруют оси. Конечный пользователь, вроде бы, его не должен крутить, как бешенный.
Если внутрях стоит тот же MPU9250 - то стабильность и отличаться не будет. Деньги за API и простоту доступа к данным берутся...
Ну в моем случае это была некая конструкция из палок с шарнирами и положение этих палок контролировались этими инклинометрами. Калибровка осуществлялась складыванием конструкции в определенную фигуру и нажатием кнопки. Если я правильно помню калибровок было две, одна оперативная, перед началом работы. А вторая инсталяционная, вот там да нужно было махать этими палками как бешеный :)
А грабли как раз с унлоком и были, причем то что было описано в даташите было неправильно от слова совсем :)
Здравствуйте, Григорий!
Можно ли Вам на ящик написать?
Пишите: wrk.sadman@gmail.com
Еще в 2017 году с коллегой мы делали одну систему и нам нужен был дешевый авиагоризонт. Выбрали WT901. Установлен был в достаточно трясучем месте - в носовом отсеке объекта испытаний, рядом с двигателем.
За прошедшее время могу сказать следующее. Устройство работает, крен/тангаж показывает (а так же остальные параметры тоже). Не врет.
https://disk.yandex.ru/i/fMJqEk5u5Rv5Fw
https://disk.yandex.ru/i/Ir5N1u4JT1zwTg
https://disk.yandex.ru/i/Ak4K402D22qb0A
* фото не смог загрузить, сорри