Как можно измерить 3-осевые ускорения?
Я студент, изучаю Arduino. Я хочу измерить ускорение с помощью Arduino и любого датчика. Я посмотрел на некоторые датчики ускорения (например, MPU6050, AXDL335), но они измеряли только гравитацию, а не осевое ускорение.
Не могли бы вы сказать мне какой-нибудь датчик, который может измерять ускорение оси, доступный с Arduino?
@D.S, 👍0
Обсуждение1 ответ
Нет разницы между гравитацией и другими видами ускорения. Гравитация — это постоянное нисходящее ускорение ≈9,81 м/с². Вы не почувствуете никакой разницы между силой гравитации и силой, которую вы испытаете на поверхности без гравитации, которая движется вверх со скоростью 9,81 м/с².
Вы можете использовать гироскоп, чтобы отслеживать ориентацию датчика, чтобы знать направление силы тяжести вниз и корректировать измерения акселерометра.
Проблема в том, что измерения ориентации гироскопа подвержены дрейфу. Чтобы скорректировать ориентацию для дрейфа, используется акселерометр (поскольку он может измерять направление силы тяжести, поэтому вы знаете, что такое направление вниз). Акселерометр измеряет точное ускорение под действием силы тяжести только в том случае, если датчик, конечно, не ускоряется, но это, скорее всего, не та установка, в которой вы собираетесь использовать акселерометр.
Как видите, это своего рода проблема курицы и яйца.
К счастью, существуют расширенные алгоритмы объединения датчиков и дополнительные фильтры, которые объединяют измерения акселерометра и гироскопа и дают довольно хорошее приближение для обоих.
Я успешно применил алгоритм Мэджвика для квадрокоптера.
В зависимости от вашего варианта использования вам придется настроить некоторые коэффициенты, чтобы указать, полагаетесь ли вы в основном на данные гироскопа или акселерометра. MPU6050 имеет DMP, который может запускать алгоритмы объединения датчиков на самом чипе, поэтому Arduino не приходится с этим сталкиваться.
Исправление к вашему второму предложению - гравитация выглядит как восходящее (а не нисходящее) ускорение., @user1318499
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Они измеряют любое ускорение. Гравитация просто вызывает ускорение в одном направлении. Если вы разгоните эти датчики в другом направлении, результирующий вектор ускорения будет комбинацией гравитации и вашего ускорения. Таким образом, эти датчики уже способны на то, что вы хотите сделать. Или вы имеете в виду ускорение вращения? Если да, то вам нужен гироскоп (который, я думаю, также является частью MPU6050), @chrisl
Но те не смогли измерить в следующих случаях; если датчик выровнен и ускорен по оси x или y, направление по этой оси равно нулю, а по оси z равно 1g., @D.S
Нет, это не так. У MPU6050 (я немного знаком с этой микросхемой) по 3 акселерометра на каждую ось. Когда вы ускоряетесь в x, соответствующее значение ускорения увеличивается. Вы уже пробовали что-то и потерпели неудачу с этим? Затем вы можете отредактировать свой вопрос, чтобы включить эту информацию. Возможно, вы сделали что-то не так, и мы могли бы вам помочь., @chrisl