Construa um Gimbal Autoestabilizador Arduino com Controle de Servo 3 Eixos
Neste tutorial, vamos aprender a construir um Gimbal Arduino ou uma plataforma autoestabilizadora com motores servo. Este tutorial é na verdade uma extensão do tutorial anterior sobre o MPU6050.
Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo.
Visão Geral
Projetei o gimbal usando um software de modelagem 3D. Ele consiste em 3 motores servo MG996R para controle de 3 eixos, e uma base na qual o sensor MPU6050, o Arduino e a bateria serão colocados.

Você pode encontrar e baixar este modelo 3D, bem como explorá-lo no seu navegador no Thangs.

Arquivos STL:
Usando minha impressora 3D Creality CR-10, imprimi todas as peças em 3D e saíram perfeitas.

Montagem
A montagem do gimbal foi bastante fácil. Comecei instalando o servo de Yaw. Usando parafusos e porcas M3, fixei-o à base.

Em seguida, usando o mesmo método, fixei o servo de Roll. As peças são especificamente projetadas para encaixar facilmente os servos MG996R.

Para conectar as peças entre si, usei as chavetas redondas que vêm como acessórios com os servos.

Primeiro, precisamos fixar a chaveta redonda à base com dois parafusos, e então fixá-la ao servo anterior usando outro parafuso.

Repeti este processo para montar o resto dos componentes, o servo de Pitch e a plataforma superior.

Em seguida, passei os fios dos servos através das aberturas dos suportes para mantê-los organizados. Então, inseri o sensor MPU6050 e o fixei na base com um parafuso e uma porca.

Para alimentar o projeto, usei 2 baterias Li-ion que coloquei neste suporte de bateria. Fixei o suporte de bateria à base usando dois parafusos e porcas.

As 2 baterias Li-ion produzirão cerca de 7.4V, mas precisamos de 5V para alimentar o Arduino e os servos.

Por isso, usei um conversor buck que converterá 7.4V para 5V.
Diagrama de Circuito do Gimbal Arduino
O que resta agora é conectar tudo junto. Aqui está o diagrama de circuito deste projeto e como tudo precisa ser conectado.

Você pode obter os componentes necessários para este Tutorial Arduino nos links abaixo:
- IMU MPU6050 ………………………………. Amazon / Banggood / AliExpress
- Servo MG996R ………………………………. Amazon / Banggood / AliExpress
- Conversor Buck ………………………………
- Placa Arduino …………………………..…..
- Protoboard e Fios Jumpers …………
No final, apertei os componentes eletrônicos e os fios na base e os cobri usando esta tampa na parte inferior.

Com isso, a plataforma auto-balanceadora ou o gimbal Arduino está pronto e funciona bem como esperado. O que resta é dar uma olhada no programa.

Código Arduino
O código Arduino para este exemplo é uma modificação do exemplo MPU6050_DMP6 da biblioteca i2cdevlib por Jeff Rowberg.
Aqui você pode baixar o código:
Descrição do código: Então, estamos usando a saída legível de yaw, pitch e roll.
// Obtém valores de Yaw, Pitch e Roll #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); // Valores de Yaw, Pitch, Roll - Radianos para graus ypr[0] = ypr[0] * 180 / M_PI; ypr[1] = ypr[1] * 180 / M_PI; ypr[2] = ypr[2] * 180 / M_PI; // Pula 300 leituras (processo de auto-calibração) if (j <= 300) { correct = ypr[0]; // Yaw começa com valor aleatório, então capturamos o último valor após 300 leituras j++; } // Após 300 leituras else { ypr[0] = ypr[0] - correct; // Define o Yaw para 0 graus - subtrai o último valor aleatório de Yaw do valor atual para tornar o Yaw 0 graus // Mapeia os valores do sensor MPU6050 de -90 a 90 para valores adequados para controle de servo de 0 a 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); // Controla os servos de acordo com a orientação do MPU6050 servo0.write(servo0Value); servo1.write(servo1Value); servo2.write(servo2Value); } #endif
Uma vez que obtemos os valores, primeiro os convertemos de radianos para graus.
// Valores de Yaw, Pitch, Roll - Radianos para graus ypr[0] = ypr[0] * 180 / M_PI; ypr[1] = ypr[1] * 180 / M_PI; ypr[2] = ypr[2] * 180 / M_PI;
Então, esperamos ou fazemos 300 leituras, porque o sensor ainda está em processo de auto-calibração durante este tempo. Também capturamos o valor de Yaw, que no início não é 0 como os valores de Pitch e Roll, mas sim sempre algum valor aleatório.
// Pula 300 leituras (processo de auto-calibração) if (j <= 300) { correct = ypr[0]; // Yaw começa com valor aleatório, então capturamos o último valor após 300 leituras j++; }
Após as 300 leituras, primeiro definimos o Yaw para 0 subtraindo o valor aleatório capturado acima. Então, mapeamos os valores de Yaw, Pitch e Roll, de -90 a +90 graus, para valores de 0 a 180 que são usados para acionar os servos.
// Após 300 leituras else { ypr[0] = ypr[0] - correct; // Define o Yaw para 0 graus - subtrai o último valor aleatório de Yaw do valor atual para tornar o Yaw 0 graus // Mapeia os valores do sensor MPU6050 de -90 a 90 para valores adequados para controle de servo de 0 a 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); // Controla os servos de acordo com a orientação do MPU6050 servo0.write(servo0Value); servo1.write(servo1Value); servo2.write(servo2Value); }
Finalmente, usando a função write, enviamos esses valores para os servos como sinais de controle. Claro, você pode desabilitar o servo de Yaw se quiser apenas estabilização para os eixos X e Y, e usar esta plataforma como gimbal de câmera.
Por favor, note que isso está longe de ser um bom gimbal de câmera. Os movimentos não são suaves porque estes servos não são feitos para esse propósito. Gimbals de câmera reais usam um tipo especial de motores BLDC para obter movimentos suaves. Então, considere este projeto apenas para fins educacionais.
Isso seria tudo para este tutorial, espero que tenha gostado e aprendido algo novo. Sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo e não se esqueça de conferir minha coleção de Projetos Arduino.
Processo de manufatura
- Construa Seu Próprio LUMAZOID: Visualizador de Música DIY com Arduino
- Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
- Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04
- Construa um Skate VR DIY com Arduino, Google Cardboard e Bluetooth
- Kit de Treinamento Arduino Completo com Mega 2560, Sensores, Motores e PCB Personalizada
- Dispositivo de Tratamento Radiônico EMR DIY com Arduino Nano
- Simulador de Corrida 2D DIY com Arduino Nano e Servos SG90
- Caixote do Lixo Inteligente com Tampa Automática – Arduino UNO
- Controle de Servo do Drone Solo com Arduino: Configuração Fácil e Tutorial Sweep
- Construa uma Fechadura de Porta RFID Portátil com Arduino – Guia Passo a Passo