Construa um robô autoequilibrador com MPU6050 e PID
Um robô de duas rodas que se levanta sozinho, permanece de pé quando você o empurra e segura seu lugar no piso em vez de sair vagando.
O que você está construindo
Um robô que fica de pé sobre duas rodas sem nada segurando-o além da aritmética.
A construção mecânica é realmente simples — dois motores, uma estrutura, um sensor, uma bateria. O que torna este projeto digno de ser feito é que o problema de controle não oferece margem para falhas parciais. Um robô seguidor de linha com ganhos medianos ainda segue a linha, mal. Um robô de equilíbrio com ganhos medianos fica no chão. É essa nitidez que faz dele a melhor maneira possível de entender PID de verdade.
No fim, você terá um robô que fica de pé, resiste a um empurrão e permanece aproximadamente onde você o colocou.
Por que é difícil
Toda a massa do robô fica acima do eixo. Isso faz dele um pêndulo invertido: a vertical é um equilíbrio da mesma forma que um lápis equilibrado na ponta é um equilíbrio — real em princípio, impossível sem correção constante. Incline-o um pouco e a gravidade produz um torque que o inclina ainda mais, mais rápido.
A única defesa do robô é poder mover sua própria base. Dirigir as rodas para frente empurra o eixo de volta sob o centro de massa e gira o corpo para a vertical novamente. Daí resulta a regra contraintuitiva que governa o projeto inteiro: para parar de cair para a frente, dirija para a frente.
Duas consequências seguem-se, e elas moldam tudo abaixo:
- Você não pode controlar a posição diretamente. Dirigir os motores a partir do erro de posição faz a base acelerar para fora debaixo da massa, e o robô cai na direção oposta à que você pediu. A posição precisa ser controlada por meio da inclinação.
- Existe um limite rígido de recuperação, em torno de 35°. Depois dele, a aceleração necessária excede o que as rodas podem entregar antes de o corpo alcançar o piso, e nenhum ganho ajuda.
Lista de materiais
| Peça | Qtd. | Custo aproximado | Observações |
|---|---|---|---|
| Arduino Uno ou Nano | 1 | US$ 5 | O laço interno quer 100–200 Hz, que um Uno administra com folga |
| MPU-6050 | 1 | US$ 2 | Montado rígido e nivelado, perto do eixo das rodas |
| Motores N20 com encoder | 2 | US$ 16 | Redutor metálico, inegociável. Veja abaixo |
| TB6612FNG | 1 | US$ 3 | A queda de tensão de ~2 V do L298N fica exatamente onde vivem as correções finas |
| Chassi 2WD | 1 | US$ 10 | Alto e estreito. Monte a bateria no alto — isso é contraintuitivo |
| Pacote de bateria | 1 | US$ 10 | 2×18650. Também é a massa útil |
Total: aproximadamente US$ 45–60.
Três dessas escolhas são estruturais, e errar qualquer uma delas torna o robô impossível de ajustar, e não apenas pior.
Motores com redutor metálico. Um robô autoequilibrador inverte a direção centenas de vezes por segundo em pequenos incrementos. A folga é cobrada uma vez em cada inversão, de modo que a zona morta de um redutor de plástico fica exatamente onde a correção precisa atuar. O resultado é um robô que oscila em torno da vertical e nunca se estabiliza, por mais cuidadosamente que os ganhos sejam ajustados — e parece convincentemente um problema de ajuste.
Um driver MOSFET. O L298N consome aproximadamente 2 V antes de o motor ver qualquer coisa, o que significa que comandos pequenos de correção ficam abaixo da tensão em que o motor se move. Novamente, uma zona morta exatamente onde vivem as correções finas.
Bateria montada no alto. Esta é a escolha que surpreende as pessoas. Um robô mais alto, com massa bem acima, cai mais devagar — o período do pêndulo varia com a raiz quadrada do comprimento — o que dá ao laço de controle mais tempo para reagir. Um robô baixo e pesado é mais difícil, não mais fácil.
Ordem de construção
Faça nesta ordem. Cada etapa pode ser verificada sozinha, o que importa muito em um projeto cujo estado final é binário.
1 — Obtenha um ângulo de inclinação confiável. Conecte o MPU6050 e siga leitura de inclinação em um MPU6050. Não avance até o ângulo ler perto de zero quando estiver de pé, mudar no sentido certo quando você o inclinar e permanecer parado quando o robô estiver parado. Tudo o que vem depois é construído sobre esse número.
2 — Faça o ângulo sobreviver ao movimento. Um acelerômetro sozinho é inutilizável em um robô em movimento, e um giroscópio sozinho deriva em segundos. O filtro complementar os funde em uma linha. Teste sacudindo o robô sem alterar sua orientação — o ângulo mal deve mudar.
3 — Ajuste o laço interno no simulador. Antes que qualquer robô físico possa cair, use o simulador de equilíbrio para criar intuição sobre o que cada ganho faz. Coloque o ganho derivativo em zero em um robô que está se equilibrando e observe a oscilação crescer até ele cair; essa falha é muito mais barata de ver ali do que na sua mesa.
4 — Faça-o ficar de pé. Escreva o laço interno de controle de equilíbrio PID em cascata, com o laço externo desativado. O sucesso aqui é um robô que fica de pé e pode vagar livremente. Não tente corrigir a deriva de posição ainda.
5 — Adicione encoders e o laço externo. Com a contagem em quadratura fornecendo a posição real das rodas, ative o laço externo para que o robô segure um lugar. Comece o ganho muito abaixo do que parece razoável — o efeito é indireto e é fácil fazer os dois laços brigarem.
Observações dos componentes que realmente importam
Monte a bateria no alto. Isso é contraintuitivo e é a escolha mecânica mais útil do projeto. Elevar o centro de massa aumenta o período do pêndulo, então o robô cai mais devagar e o laço tem mais oportunidades de recuperá-lo. Um robô curto e pesado na parte de baixo é muito mais difícil de equilibrar do que um alto.
Use redutores metálicos. Um robô autoequilibrador inverte a direção centenas de vezes por segundo. Motores com redutor de plástico têm folga suficiente para que cada inversão perca os primeiros graus sem fazer nada, e o laço não consegue compensar isso. Motores N20 com encoder são a resposta usual.
Use um TB6612FNG, não um L298N. O TB6612FNG perde muito menos tensão em sua etapa de saída. Em um L298N, comandos pequenos de correção ficam abaixo da tensão em que o motor se move — criando uma zona morta exatamente onde vivem as correções finas.
Dê aos motores uma alimentação própria. Um pacote de bateria que cai sob corrente de travamento causa queda de tensão no microcontrolador no meio de uma correção. O robô então cai por motivos que não têm nada a ver com o laço de controle, o que é uma situação horrível de depurar.
Verificando durante a construção
| Verificação | O que prova |
|---|---|
| O ângulo lê ~0° quando segurado de pé na mão | Não resta desvio de montagem na medição |
| Sacudir sem girar mal move o ângulo | O filtro está confiando no giroscópio durante a aceleração |
| As rodas dirigem para frente quando o robô é inclinado para frente | O sinal do laço interno está correto |
| O robô resiste a um empurrão e se estabiliza sem aumentar a oscilação | O ganho derivativo está fazendo seu trabalho |
| O robô para de derivar quando o laço externo é ativado | Os encoders e o laço externo estão conectados corretamente |
Como fica um bom resultado
| Medição | Apenas se equilibrando | Bem ajustado |
|---|---|---|
| Taxa do laço interno (inclinação) | 100 Hz | 200–500 Hz |
| Taxa do laço externo (posição) | 20 Hz | 20–50 Hz — várias vezes mais lento que o interno |
| Oscilação de inclinação em repouso | ±3–5° | Menos de ±1° |
| Deriva a partir do ponto inicial em 60 s | 1–2 m | Menos de 30 cm |
| Recupera-se de um empurrão | Um toque gentil | Um empurrão firme |
| Constante do filtro complementar | 0,98 | 0,98–0,995, escolhida em vez de copiada |
| Tempo de funcionamento antes de vagar para longe | Segundos | Indefinido |
A razão entre as taxas dos laços é o número que mais primeiras construções erram. O laço interno mantém a inclinação; o externo pede uma inclinação para poder se deslocar. Se o laço externo roda em qualquer taxa próxima à do interno, ele persegue um alvo que o laço interno ainda não alcançou, e os dois brigam. Uma separação de cinco a dez vezes é a regra que funciona.
A linha de “deriva” existe por causa dos encoders, e vale ser claro: um robô com apenas um laço de inclinação se equilibra lindamente e vaga pela sala, porque nada está dizendo onde ele está. Ele está em pé e perdido. Adicionar o laço externo de posição é o que o transforma de uma demonstração em um robô.
Convenções de sinal: a coisa que perde uma noite
Quatro sinais precisam concordar, e não há como deduzi-los — é preciso verificar cada um na bancada, com o robô na mão:
| Verificação | Segure o robô e… | Ele deve… |
|---|---|---|
| Sinal da IMU | Incline-o para frente | Informar uma inclinação positiva (ou consistentemente negativa — escolha uma) |
| Sinal do motor | Comande uma saída positiva | Dirigir as rodas para frente |
| Sinal do laço interno | Incline para frente com o laço em execução | Comandar as rodas para frente, para capturar a queda |
| Sinal do laço externo | Empurre-o para frente a partir do repouso | Inclinar-se para trás para retornar |
Se você inverter o terceiro, o robô acelera a própria queda, com força, na direção em que já estava indo. É inconfundível, e vale testar com as rodas fora do chão.
Quando não funciona
Quase toda falha é uma de cinco coisas, e elas são diferentes o suficiente para distinguir:
- Desaba instantaneamente ao ligar — o sinal do laço interno está invertido.
- Oscilação crescente até cair — ganho derivativo baixo demais, ou termo D calculado pela diferença entre ângulos em vez da taxa do giroscópio.
- Zumba enquanto fica de pé — ganho proporcional alto demais, ou o laço rodando devagar demais para esses ganhos.
- Desaba no piso sem lutar — ganho proporcional baixo demais, ou motores saturando.
- Se equilibra, mas sai dirigindo — desvio de montagem, com pouco termo integral para absorvê-lo.
A tabela de modos de falha detalha cada um, e todos podem ser reproduzidos deliberadamente no simulador — a maneira mais rápida de aprender a reconhecê-los.
Roteiro do projeto
O caminho de construção
Siga a árvore tecnológica das peças até um robô funcionando. Cada nó é desbloqueado quando seus pré-requisitos são concluídos, e seu progresso fica salvo neste dispositivo.
0 / 16 concluídos
Componentes
- ControladorArduino UnoA placa de 8 bits que tolera erros de ligação, pela qual a maioria das pessoas começa na robótica.
- SensorMPU-6050 IMUUm sensor de movimento de seis eixos—como um robô sente a própria inclinação, giro e aceleração.
- DriverDriver de motor TB6612FNGUma ponte H com MOSFET que preserva a tensão que você realmente pagou.
- AtuadorMotorredutor com encoder N20Micro motorredutor de engrenagens metálicas com encoder traseiro, para o robô saber até onde foi.
- ChassiChassi de robô 2WDA plataforma onde se fixam dois motores, uma rodinha livre e toda a eletrônica.
- AlimentaçãoBateria e fonte de alimentação do robôA diferença entre um robô que funciona e outro que fica reiniciando.
Tutoriais deste caminho
- Iniciante · 45 minutosÂngulo de inclinação com MPU6050: acelerômetro e giroscópioTransforme contagens brutas do MPU6050 em um ângulo de inclinação em graus e descubra por que nenhum sensor funciona sozinho.
- Intermediário · 1 horaFiltro complementar: fusão de dados do acelerômetro e giroscópioFunde acelerômetro e giroscópio em um ângulo de inclinação estável com um filtro complementar de uma linha.
- Avançado · 2 horasControle PID em cascata para um robô autobalanceadorDois laços PID aninhados: um mantém o ângulo de inclinação e o outro solicita uma inclinação para que o robô possa se deslocar.
- Iniciante · 18 min de leituraComo ajustar um controlador PID: guia práticoUma ordem prática para ajustar os ganhos P, I e D sem tentativas aleatórias — e como testar cada etapa ao vivo.
- Iniciante · 17 min de leituraLeia encoders de quadratura para medir distância e velocidadeTransforme pulsos de encoder de quadratura em medições confiáveis do sentido de rotação, da distância e da velocidade das rodas.
Pratique antes de fazer a fiação
Ajuste no simulador ao vivo
O caminho de construção passa por um laboratório no navegador. Acerte o comportamento aqui e depois transfira suas configurações para o robô real.
Perguntas frequentes
Quão difícil é um robô autoequilibrador para um primeiro projeto?
É um primeiro projeto ruim e um terceiro projeto excelente. A fiação não é difícil, mas o sistema é instável, o que significa que não existe crédito parcial — o robô fica de pé ou não fica, e um sinal errado parece exatamente um ajuste ruim até você saber o que está observando. Construa primeiro um robô seguidor de linha, para que o ajuste de PID e os drivers de motores já sejam familiares; depois este se torna um problema focado em um laço, e não cinco incógnitas ao mesmo tempo.
Por que meu robô de equilíbrio vibra em vez de ficar parado?
Normalmente é ganho proporcional alto demais para a taxa do seu laço, ou folga no redutor. Tente reduzir Kp primeiro. Se a vibração persistir com ganho baixo, observe as rodas no momento em que invertem: se houver uma zona morta visível antes de elas se moverem, o redutor é o problema, e um motor com engrenagens metálicas corrigirá o que nenhum ajuste consegue.
Realmente preciso de encoders?
Não para ficar de pé. O laço interno só precisa de um ângulo de inclinação, então um robô sem nenhum encoder se equilibra perfeitamente — ele simplesmente deriva, porque nada informa onde está. Os encoders são o que o laço externo precisa para manter a posição. Construa sem eles se quiser, faça o robô se equilibrar e depois adicione.
A que velocidade o laço de controle precisa executar?
200 Hz é um mínimo sensato para o laço interno, e mais rápido é melhor. O tempo natural de queda do robô estabelece o prazo: um robô pequeno vai de vertical a irrecuperável em bem menos de um segundo, então um laço a 50 Hz tem poucas oportunidades de intervir. Execute-o por um temporizador dedicado em vez de delay(), porque a consistência do tempo importa mais para o termo derivativo do que a taxa exata.
Por que ele se equilibra, mas dirige lentamente pela sala?
Desvio de montagem da IMU. Se o sensor estiver um grau fora da vertical, o laço manterá esse ângulo errado, e manter uma inclinação constante significa aceleração constante. Meça o desvio com o robô efetivamente vertical, segurado à mão, subtraia-o como constante e deixe o termo integral absorver o restante. Você pode reproduzir isso exatamente com o controle de desvio de montagem do simulador.