Construir um carrinho de equilíbrio é mais difícil do que a maioria dos tutoriais online deixa transparecer
O conceito parece simples na teoria. Duas rodas motrizes, um chassi pendurado abaixo do eixo, um giroscópio e um controlador PID. Na prática, você passa dias ajustando ganhos, lidando com ruído de sensor e tentando não quebrar o prototype na primeira vez que ele liga. Aqui vai o método que funcionou para mim, sem o filtro motivacional dos blogs de robótica.
O que realmente é um carrinho de equilíbrio
O carrinho de equilíbrio é um sistema de controle em malha fechada que usa feedback de um sensor inercial (geralmente um MPU6050 ou similar) para ajustar a velocidade das rodas e manter o chassi na posição vertical. Não é um brinquedo. É um sistema dinâmico instável por natureza, o mesmo princípio do skatista equilibrado ou de um foguete em voo. Os componentes básicos são: microcontrolador (ESP32 funciona bem, STM32 também, Arduino Uno dá trabalho), driver de motores Dual H-bridge (L298N é o clássico mas esquenta demais, prefira um TB6612FNG ou um driver baseado em MOSFETs), motores com redutores e encoders, e a fonte de alimentação. A bateria de 2S LiPo é o padrão, 7,4V nominais. Dribe 3,7V diretamente no ESP32 e use um buck converter para os motores se forem mais demandsos.
O circuito e a montagem que eu fiz
Meu setup inicial usou um Arduino Nano, um MPU6050 e dois motores DC com redutor 30:1 e encoder óptico acoplado. O chassi foi cortado em MDF 3mm. A ideia era manter o centro de massa abaixo do eixo das rodas, o que estabiliza passivamente o sistema em baixa velocidade. Isso é o que a maioria dos tutoriais omiti. O MPU6050 precisa ser fixado rigidamente. Qualquer folga na montagem gera ruído de alta frequência que o controlador interpreta como movimento real. Eu costumo usar silicone termoplástico quente para travar o sensor na placa, não parafusos. Parafusos vibram e criam drift.
A lógica de controle gira em torno de três termos: proporcional, integral e derivativo. O proporcional responde ao ângulo atual. Se o carrinho inclina 10 graus para frente, as rodas giram para frente proporcionalmente. O integral corrige erros persistentes - se o carrinho nunca fica perfeitamente l, o termo integral empurra até compensar. O derivativo prediz a taxa de inclinação e freia o movimento antes que ele fique descontrolado.
Ajuste de PID: o processo real
A primeira coisa que todo mundo faz errado é começar com os três ganhos iguais. Não faça isso. O PID exige ajuste sequencial. Comece com Kd alto e Ki baixo. O termo derivativo é o que impede o carrinho de cair instantaneamente quando você liga. Sem ele, o sistema é instável desde o início. Eu geralmente começo com Kp em 8, Ki em 0.5 e Kd em 15 para um carrinho de 15cm de altura com rodas de 65mm de diâmetro. Depois ajusto Kp para ganhar responsiveness e Ki para eliminar o offset final.
👉 Clique no botão abaixo para saber mais sobre o assunto!
O maior problema prático é o ruído do acelerômetro. O MPU6050 tem ruido intrínseco de cerca de 2-3 graus/segundo no eixo pitch. Um Kd alto amplifica esse ruído e faz os motores tremerem. A solução é um filtro complementary ou um Kalman simplificado entre o giroscópio e o acelerômetro. Eu uso uma média móvel exponencial com constante de tempo de 0.98 no giroscópio e 0.02 no acelerômetro. Funciona bem e é barato computacionalmente. Outro detalhe esquecido: a resposta dos motores. Motores DC com redutor têm histerese. Eles não respondem linearmente ao PWM. Você precisa mapear o range de PWM útil - geralmente entre 120 e 230 num escala de 0-255 para os motores que eu uso. Abaixo de 120 o motor não gira, acima de 230 ele já está no limite e não tem torque extra.
O problema que eu encontrei e o workaround
No meu terceiro protótipo, o carrinho de equilíbrio funcionava perfeitamente em superfície plana. Qualquer ligeira inclinação no chão e ele entrava em oscilação divergente, balançando cada vez mais até cair. Levei duas semanas para resolver isso. O problema era o termo integral. Em superfícies inclinadas, o sensor percebia um ângulo constante diferente de zero e o Ki acumulava erro indefinidamente, empurrando o carrinho para frente até ele acelerar sem parar. A solução foi adicionar um anti-windup simples: limitar o valor acumulado do integral a um range de ±50 e resetá-lo quando o ângulo estivesse dentro de ±2 graus do vertical. Isso significa que em rampas suaves o carrinho se ajusta, mas em superfícies muito inclinadas ele apenas para e cai - o que é seguro, já que você sabia que o chão não era plano.
Também adicionei um limite de velocidade máxima nas rodas. Sem isso, se o carrinho detectasse uma queda brusca (bater numa porta, por exemplo), o PID tentaria compensar com velocidade infinita e o motor queimava o driver. Coloquei um cap de 150cm/s na velocidade linear das rodas. Funciona bem na prática.
Onde o carrinho de equilíbrio falha completamente
Se você tentar fazer esse sistema funcionar com rodas de espuma macia ou em carpete, esqueça. O atrito irregular faz o encoder ler distância errada e o controle perde a referência. Superfície lisa e dura é obrigatória. Também não funciona bem com cargas assimétricas. Se você colocar algo pesado de um lado do chassi, o centro de gravidade muda e o PID precisa ser completamente refeito. Esse é um limitação inherente do projeto simples que descrevi aqui. Projetos industriais resolvem isso com sensores de força nas rodas, mas para um projeto hobbyista, mantenha o carregamento simétrico.
Se quiser algo mais robusto que suporte variações de superfície, o próximo passo natural é migrar para um IMU com sensor de pressão (como o BNO055 da Bosch) que já faz fusão de sensores internamente, eliminando a necessidade do complementar filter que mencionei acima. Custa mais, mas economiza horas de debugging.
Recursos e onde encontrar o código
O código completo do meu último prototype está disponível publicamente em repositórios de código aberto. Para montar o seu, comece com a biblioteca MPU6050_light do Juraj-A e o exemplo de balancing car que vem junto. Ela já implementa o filtro complementar e o PID estruturado. Ajuste os ganhos conforme a geometria do seu carrinho - quanto maior a altura do centro de massa em relação às rodas, mais alto você precisa começar com o Kp. A lista de materiais básica fica entre 80 e 150 reais no Brasil, dependendo se você já tem ferramentas de corte e solda em casa. O tempo médio de ajuste fino é de 3 a 5 dias trabalhando 2-3 horas por dia. Menos que isso só se você tiver experiência prévia com controle digital.