Создание самстабилизирующегося Arduino 짐бала с 3-осевым сервоуправлением
В этом уроке мы научимся строить Arduino гимбал или самстабилизирующуюся платформу с сервоприводами. Этот урок на самом деле является продолжением предыдущего урока о MPU6050. Вы можете посмотреть следующее видео или прочитать письменный урок ниже. Я спроектировал гимбал с помощью 3D-моделирования программного обеспечения. Он состоит из 3 сервоприводов MG996R для 3-осевого управления и основы, на которой будут размещены датчик MPU6050, Arduino и батарея. Вы можете найти и скачать эту 3D-модель, а также изучить её в вашем браузере на Thangs. STL Файлы: Используя мой 3D-принтер Creality CR-10, я напечатал на 3D-принтере все детали, и они получились просто идеально. Сборка гимбала была довольно легкой. Я начал с установки сервопривода Yaw. Используя болты M3 и гайки, я закрепил его к базе. Далее, используя тот же метод, я закрепил сервопривод Roll. Детали специально спроектированы для легкого монтажа сервоприводов MG996R. Для соединения деталей друг с другом я использовал круглые рожки, которые идут в комплекте как аксессуары с сервоприводами. Сначала нам нужно закрепить круглую рожку к базе с двумя болтами, а затем закрепить её к предыдущему сервоприводу с помощью другого болта. Я повторил этот процесс для сборки остальных компонентов: сервопривода Pitch и верхней платформы. Далее я прошел провода сервоприводов через отверстия держателей, чтобы держать их организованными. Затем я вставил датчик MPU6050 и закрепил его на базе с болтом и гайкой. Для питания проекта я использовал 2 литий-ионных аккумулятора, которые я поместил в этот держатель батареи. Я закрепил держатель батареи к базе с помощью двух болтов и гаек. 2 литий-ионных аккумулятора выдадут около 7.4В, но нам нужно 5В для питания Arduino и сервоприводов. Именно поэтому я использовал понижающий преобразователь (buck converter), который преобразует 7.4В в 5В. Что осталось сейчас — это соединить всё вместе. Вот схема этого проекта и то, как всё должно быть подключено. Компоненты, необходимые для этого Arduino урока, можно найти по ссылкам ниже: В конце я засунул электронные компоненты и провода в базу и закрыл их с помощью этой крышки снизу. С этим самобалансирующаяся платформа или Arduino гимбал готова и работает хорошо, как и ожидалось. Что осталось — это взглянуть на программу. Код Arduino для этого примера является модификацией примера MPU6050_DMP6 из библиотеки i2cdevlib Джеффа Роуберга. Здесь вы можете скачать код: Описание кода: Так, мы используем выходные данные читаемые yaw, pitch и roll. Как только мы получаем значения, сначала мы конвертируем их из радиан в градусы. Затем мы ждем или делаем 300 измерений, потому что датчик все еще в процессе само-калибровки в течение этого времени. Также мы захватываем значение Yaw, которое в начале не 0, как значения Pitch и Roll, а всегда какое-то случайное значение. После 300 измерений, сначала мы устанавливаем Yaw в 0, вычитая выше захваченное случайное значение. Затем мы маппим значения Yaw, Pitch и Roll от -90 до +90 градусов в значения от 0 до 180, которые используются для управления сервоприводами. Наконец, используя функцию write, мы отправляем эти значения сервоприводам как управляющие сигналы. Конечно, вы можете отключить сервопривод Yaw, если хотите только стабилизацию по осям X и Y, и использовать эту платформу как камеру гимбал. Пожалуйста, обратите внимание, что это далеко от хорошего камерного гимбала. Движения не плавные, потому что эти сервоприводы не предназначены для такого назначения. Настоящие камерные гимбалы используют специальный тип BLDC моторов для получения плавных движений. Так что считать этот проект только для образовательных целей. Это было бы всё для этого урока, надеюсь, вам понравилось, и вы узнали что-то новое. Не стесняйтесь задавать любые вопросы в разделе комментариев ниже и не забывайте проверять мою коллекцию проектов Arduino.Обзор



Сборка








Схема подключения Arduino гимбала



Код Arduino
// Get Yaw, Pitch and Roll values #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); // Yaw, Pitch, Roll values - Radians to degrees ypr[0] = ypr[0] * 180 / M_PI; ypr[1] = ypr[1] * 180 / M_PI; ypr[2] = ypr[2] * 180 / M_PI; // Skip 300 readings (self-calibration process) if (j <= 300) { correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings j++; } // After 300 readings else { ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180 int servo0Value = map(ypr[0], -90, 90, 0, 180); int servo1Value = map(ypr[1], -90, 90, 0, 180); int servo2Value = map(ypr[2], -90, 90, 180, 0); // Control the servos according to the MPU6050 orientation servo0.write(servo0Value); servo1.write(servo1Value); servo2.write(servo2Value); } #endifCode language: Arduino (arduino)// Yaw, Pitch, Roll values - Radians to degrees ypr[0] = ypr[0] * 180 / M_PI; ypr[1] = ypr[1] * 180 / M_PI; ypr[2] = ypr[2] * 180 / M_PI;Code language: Arduino (arduino)// Skip 300 readings (self-calibration process) if (j <= 300) { correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings j++; }Code language: Arduino (arduino)// After 300 readings else { ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180 int servo0Value = map(ypr[0], -90, 90, 0, 180); int servo1Value = map(ypr[1], -90, 90, 0, 180); int servo2Value = map(ypr[2], -90, 90, 180, 0); // Control the servos according to the MPU6050 orientation servo0.write(servo0Value); servo1.write(servo1Value); servo2.write(servo2Value); }Code language: Arduino (arduino)
Производственный процесс
- Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- Робот-ускользатор на сервоприводе: сборка на Arduino и HC-SR04
- Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
- Учебный стенд Arduino Mega 2560: сенсоры, моторы, дисплеи и собственная PCB
- DIY Arduino Radionics EMR Treatment Device — радионическое устройство
- DIY 2D гоночный симулятор движения на Arduino Nano и сервоприводах SG90
- Умная корзина для мусора на Arduino с автоматическим открыванием крышки
- Управление сервоприводами дрона 3DR Solo через Arduino: Firmata + pyMata
- Создание портативного RFID-замка на Arduino — пошаговое руководство