С+ ардуино нано

1 месяц назад от Кирилл Шалыгин

1 ответ



0 голосов
Этот код предназначен для работы с датчиком MPU6050 на платформе Arduino Nano. Датчик MPU6050 - это инерционный модуль, который содержит акселерометр и гироскоп, а также встроенный Digital Motion Processor (DMP) , который обрабатывает данные с датчиков.
 
##Что делает код:
 
1. *Инициализация*:
 - В `setup () ` происходит настройка последовательного порта (Serial) для вывода данных, инициализация шины I2C (Wire) , которая используется для связи с датчиком.
 - Датчик MPU6050 инициализируется (`mpu. initialize () `) , а затем включается его DMP (Digital Motion Processor) - `mpu. dmpInitialize () ` и `mpu. setDMPEnabled (true) `.
 - Устанавливаются калибровочные смещения (offsets) для акселерометра и гироскопа. Эти значения получены в результате калибровки датчика.
 
2. *Основной цикл (`loop () `) *:
 - Код проверяет, прошло ли 11 миллисекунд с последнего чтения данных (таймер на 11 мс) . Это нужно для стабильного обновления данных (примерно 90 Гц) .
 - Если в FIFO-буфере датчика есть новые данные (`mpu. dmpGetCurrentFIFOPacket (fifoBuffer) `) , то:
 - Извлекаются данные о кватернионе (`Quaternion q`) , который описывает ориентацию датчика в пространстве.
 - Рассчитывается вектор гравитации (`VectorFloat gravity`) на основе кватерниона.
 - Рассчитываются углы Эйлера (Yaw, Pitch, Roll) в радианах (`float ypr[3]`) . Эти углы описывают поворот датчика вокруг осей Z, Y и X сответственно.
 - Угол рысканья (Yaw, вокруг оси Z) преобразуется в градусы (с помощью `degrees () `) и выводится в последовательный порт (Serial) .
 
##Для чего это нужно:
Код позволяет получать ориентацию датчика MPU6050 в пространстве, в частности, угол рысканья (Yaw) вокруг вертикальной оси (Z) . Это может использоваться, например, в системах стабилизации, навигации, управлении дронами или роботами.
 
##Важные моменты:
- Код выводит только угол Yaw (первый элемент массива `ypr`) , но можно легко добавить вывод Pitch и Roll (второй и третий элементы `ypr`) .
- Данные выводятся в градусах. Если нужно в радианах, можно убрать `degrees () `.
- Для коректной работы необходимо предварительно откалибровать датчик и подставить свои значения смещений (`setXAccelOffset`, `setYGyroOffset` и т. д. ) .
1 месяц назад от GeorginaTrou

Связанные вопросы

1 ответ