Índice:

Robô de Autobalanceamento de Duas Rodas: 7 Passos
Robô de Autobalanceamento de Duas Rodas: 7 Passos
Anonim
Robô de Autobalanceamento de Duas Rodas
Robô de Autobalanceamento de Duas Rodas

Este instrutível passará pelo processo de design e construção de um robô com autobalanceamento. Como observação, só quero dizer que os robôs com autobalanceamento não são um conceito novo e foram construídos e documentados por outros. Quero aproveitar esta oportunidade para compartilhar com vocês minha interpretação deste robô.

O que é um robô com equilíbrio automático?

Um robô com autobalanceamento é um sistema que usa dados de medição inercial, coletados de um sensor integrado, para ajustar continuamente sua posição para se manter em pé.

Como funciona?

Uma analogia simples a se considerar é um pêndulo invertido. Onde o centro de massa está acima do ponto de pivô. Porém, no nosso caso, estamos restringindo o pêndulo a 1 grau de liberdade por ter um eixo de rotação, no nosso caso o eixo de rotação das duas rodas. Uma vez que qualquer tipo de perturbação fará com que o robô caia, precisamos de um método para mantê-lo ativamente equilibrado. É aqui que nosso algoritmo de malha fechada (controlador PID) entra em ação, sabendo em qual direção nosso robô está caindo, podemos ajustar a direção de rotação de nossos motores para manter o sistema equilibrado.

Como funciona o algoritmo de malha fechada?

O princípio básico para manter o robô equilibrado é, se o robô estiver caindo para frente, ele compensará movendo a parte inferior do robô para frente para se segurar e, portanto, se manter na vertical. Da mesma forma, se o robô estiver caindo para trás, ele compensará movendo a parte inferior do robô para trás para se segurar.

Portanto, precisamos fazer duas coisas aqui, primeiro, precisamos calcular o ângulo de inclinação (Roll) que o robô está experimentando e, como resultado, precisamos controlar a direção de rotação dos motores.

Como vamos medir o ângulo de inclinação?

Para medir o ângulo de inclinação, usaremos uma Unidade de Medição Inercial. Esses módulos incorporam um acelerômetro e giroscópio.

  • O acelerômetro é um dispositivo eletromagnético que mede a aceleração adequada, ou seja, a aceleração de um corpo em repouso instantâneo.
  • Um giroscópio é um dispositivo eletromecânico que mede a velocidade angular e é usado para determinar a orientação do dispositivo.

No entanto, o problema com o uso de tais sensores é que:

  • O acelerômetro é muito barulhento, mas é consistente ao longo do tempo, o ângulo varia com movimentos horizontais repentinos
  • O valor do giroscópio, por outro lado, irá variar com o tempo, mas inicialmente, é bastante preciso

Para isso, não vou implementar um filtro, em vez disso, vou usar o Digital Motion Processing (DMP) integrado. Outros usaram um filtro complementar para obter um sinal suave, você pode escolher o método que desejar. à medida que o robô se equilibra com qualquer uma das implementações.

Suprimentos

Partes:

  1. Arduino Pro Mini 3.3V 8 com um ATMEGA328 de 8 MHz
  2. FT232RL 3.3V 5.5V FTDI USB para módulo adaptador serial TTL
  3. Módulo GY-521 com MPU-6050
  4. Um par de motor micro redutor N20 6V - 300rpm
  5. Motorista L298N
  6. LM2596S DC para conversor buck DC
  7. Bateria (bateria recarregável de íon de lítio de 9,7 V)
  8. Alça de bateria
  9. Duas placas de circuito de PCB de prototipagem
  10. Fios de jumper de pinos de cabeçalho macho e fêmea

Ferramentas:

  1. Ferro de solda e solda
  2. Distanciador de espaçador hex de nylon
  3. Conjunto de chaves de fenda de precisão
  4. impressora 3d

Etapa 1: construção

Como eu tinha acesso a uma impressora 3D, decidi imprimir em 3D o chassi e usar isolantes para conectar tudo junto.

O robô consiste em 4 camadas

  1. A camada inferior conecta os motores e tem pontos de montagem para o módulo acionador de motor L298N
  2. A próxima camada abriga a placa de protótipo com o Arduino pro mini e cabeçalhos soldados a ela
  3. A terceira camada monta o IMU
  4. A camada superior, que eu chamo de "camada de pára-choques", resguarda a bateria, o conversor de dólar e uma chave monetária

Meu principal princípio de design era manter tudo modular. A razão para isso é que se algo deu errado com um dos componentes, eu poderia facilmente substituí-lo ou se eu precisasse de um componente para outro projeto, posso pegá-lo facilmente sem me preocupar em não poder usar o sistema novamente.

Etapa 2: Fiação

Fiação
Fiação

Eu soldava alguns pintos de cabeçalho fêmeas a uma placa de perfurações para combinar com os mini pinos de cabeçalho do Arduino pro. Em seguida, soldei os pinos do conector macho na placa para permitir o acesso à E / S. O resto dos componentes foram montados na moldura impressa em 3D e conectados usando fios de jumper.

Etapa 3: Teoria de Controle

Agora passamos para o cerne do projeto. Para manter o robô equilibrado, precisamos gerar um sinal de controle apropriado para acionar os motores na direção correta e na velocidade correta para manter o robô equilibrado e estável. Para fazer isso, usaremos um algoritmo de malha de controle popular conhecido como controlador PID. Como o acrônimo sugere, existem três termos para esse controlador: os termos proporcionais, integrais e derivados. Cada um deles é acompanhado por coeficientes que determinam sua influência no sistema. Freqüentemente, a parte mais demorada da implementação do controlador é o ajuste dos ganhos para cada sistema exclusivo para obter a resposta ideal.

  • O termo proporcional multiplica diretamente o erro para dar uma saída, portanto, quanto maior o erro, maior a resposta
  • O termo integral gera uma resposta com base no acúmulo do erro para reduzir o erro em regime permanente. Quanto mais tempo o sistema ficar desequilibrado, mais rápido os motores responderão
  • O termo derivativo é a derivada do erro que é usado para prever a resposta futura e, ao fazer isso, reduz a oscilação devido a ultrapassagem do estado estacionário.

O princípio básico deste algoritmo é calcular continuamente o ângulo de inclinação que é a diferença entre a posição desejada e a posição atual, isso é conhecido como erro. Em seguida, ele usa esses valores de erro e calcula a soma das respostas proporcional, integral e derivada para obter uma saída, que são os sinais de controle enviados aos motores. Como resultado, se o erro for grande, o sinal de controle enviado aos motores girará os motores em alta velocidade para chegar a um estado de equilíbrio. Da mesma forma, se o erro for pequeno, o sinal de controle irá girar os motores em baixa velocidade para manter o robô equilibrado.

Etapa 4: usando MPU 6050

Biblioteca MPU6050

github.com/jrowberg/i2cdevlib/tree/master/…

Calibrando deslocamentosNem todos os sensores são réplicas exatas uns dos outros. Como resultado, se você testar dois MPU 6050, poderá obter valores diferentes para o acelerômetro e o giroscópio quando colocados ainda na mesma superfície. Para superar esse desvio de ângulo constante, precisamos celebrar cada sensor que usamos. Executando este script:

www.i2cdevlib.com/forums/topic/96-arduino-…

escrito por Luis Rodenas, teremos compensações. Os erros de deslocamento podem ser eliminados definindo os valores de deslocamento na rotina setup ().

Usando o processador de movimento digital

O MPU6050 contém um DMP (Digital Motion Processor).

O que é um DMP? Você pode pensar no DMP como um microcontrolador integrado que processa o movimento complexo do giroscópio de 3 eixos e do acelerômetro de 3 eixos a bordo do mpu6050, usando seus próprios algoritmos de fusão de movimento. Descarregando o processamento que, de outra forma, seria feito pelo Arduino

Como usá-lo? Para descobrir como usar o DMP, vá até o esboço de exemplo MPU6050_DMP6 que vem com a biblioteca MPU6050 (no IDE do Arduino: Arquivo-> Exemplo-> MPU6050-> MPU6050_DMP6). Essa também é uma boa oportunidade para verificar se o sensor realmente funciona e se a fiação está correta

Etapa 5: codificação

Usei o Arduino IDE e uma interface FTDI para programar o Arduino pro mini.

Usando o esboço de exemplo (MPU6050_DMP6) que vem com a biblioteca MPU6050 como meu código base, adicionei as funções PID () e MotorDriver ().

Adicione a biblioteca

  • MPU6050: Para usar o sensor MPU6050, precisaremos baixar a biblioteca do desenvolvedor I2C de Jeff Rowberg e adicioná-la à pasta “bibliotecas” do Arduino encontrada nos arquivos do programa em seu computador.
  • Wire: também precisamos da biblioteca Wire para nos permitir a comunicação com dispositivos I2C.

Pseudo-código

Incluir Bibliotecas:

  • Wire.h
  • MPU6050
  • I2Cdev.h

Inicializar variáveis, constantes e objetos

Configurar ()

  • Defina o modo de pino para controlar os motores
  • Defina o modo de pino para o LED de status
  • Inicialize o MPU6050 e defina os valores de deslocamento

PID ()

Calcular o valor PID

MotorDriver (resposta PID)

Use o valor PID para controlar a velocidade e direção dos motores

Ciclo ()

  • Obtenha dados do DMP
  • Chamar funções PID () a MotorDriver ()

Etapa 6: Procedimento de Ajuste PID

Esta é a parte mais tediosa do projeto e requer um pouco de paciência, a menos que você tenha muita sorte. Aqui estão as etapas:

  1. Defina os termos I e D como 0
  2. Segurando o robô, ajuste P para que o robô comece a oscilar sobre a posição de equilíbrio
  3. Com P definido, aumente I para que o robô acelere mais rápido quando estiver desequilibrado. Com P e I devidamente afinados, o robô deve ser capaz de se autoequilibrar por pelo menos alguns segundos, com alguma oscilação
  4. Finalmente, aumente D reduza a oscilação

Se a primeira tentativa não der resultados satisfatórios, repita as etapas com um valor diferente de P. Além disso, esteja ciente de que você pode ajustar os valores PID posteriormente, para aumentar ainda mais o desempenho. Os valores aqui dependem do hardware, não se surpreenda se obtiver valores de PID muito grandes ou muito pequenos.

Etapa 7: Conclusão

Os micromotores usados deviam desacelerar para reagir a grandes perturbações e, como o sistema era muito leve, não havia inércia suficiente para obter o efeito de pêndulo desejado, portanto, se o robô se inclinasse para a frente, ele apenas se inclinaria em um ângulo e dispararia para a frente. Finalmente, as rodas impressas em 3D são uma má escolha, pois continuam escorregando.

Sugestões para melhorar:

  • Motores mais rápidos com torque mais alto, ou seja, para motores DC, quanto maior a classificação de tensão, maior o torque
  • pegue uma bateria mais pesada ou apenas mova a massa um pouco mais para cima
  • Substitua as rodas impressas em 3D por rodas de borracha para obter mais tração

Recomendado: