Powered By Blogger

terça-feira, 30 de outubro de 2018

Arduino Balancing Itself Robot - ABIR

Arduino Balancing Itself Robot

Este Robot está baseado no projeto de Joop Brokking (YABR - Your Arduino Balancing Robot)
Adaptado para minhas condições de construção e ajustes de PID.

O Robot é de construção bem simples, mas tem muitos conceitos que podem ser aprendidos e ou aprimorados com a construção e ajuste desse robot.
Constratando com outros robots de balanceamento prórpio, você vai notar que esse usa motores de passo ao contrário de muitos (a grande maioria) que usam motores DC com caixas reguladoras de velocidade (engrenagens) e que são mais baratos; porém esse que usa motor de passo, oferece muito mais oportunidade de um excelente controle de movimentação. Motores DC tem muita fricção mecânica e diferenciais elétricos que degradam com o tempo e causam mudança de performance com o tempo, já motores de passo são livres desses fatores com muito maior durabilidade e constância de funcionamento.

Neste post irei mostrar todos os detalhes de construção do  robot de balanceamento próprio, também chamado auto-balanceamento.

Ele consiste em um módulo Arduino com uma MPU (Giroscópio e Acelerômetro) controlando o ângulo e giro do robot para mantê-lo balanceado no próprio eixo verticalmente, o controle é feito acionando dois motores de passo para que ele possa ter a ação de balanceamento usando controle PID para manter o robot na posição vertical (mesmo quando aplicado uma força externa).

Um controle remoto faz o controle da movimentação para frente e para traz e ainda para esquerda e direita.

Esse Robot tem um custo de aproximadamente R$240,00

LISTA DE MATERIAL:

ROBOT:
1 x arduino pro-mini (5V) ATMEGA-328, 16MHz)
1 x módulo de comunicação serial wireless para 2,4 GHZ
1 x MPU 6050 (giroscópio e acelerômetro)
1 x módulo programador de arduino pro-mini FTDI USB  para TTL
1 x conversor DC/DC - 12V para 5V
1 x bateria LiPo 3 celulas (11,1V) 2200 mAh
2 x step motor driver DRV8825
1 x resistor 2K2Ohm
1 x resistor 3K3Ohm
1 x resistor 4K7Ohm
1 x diodo 1N4007
2 x motores de passo TAMAGAWA SEIKO 0,45graus 800S/R 40Ohm 0,3A por fase
2 x rodas para robot de 65mm de diâmetro
1 x placa perfurada padrão

CONTROLE:
1 x arduino pro mini (5V) ATMEGA-328, 16MHz)
1 x módulo de comunicação serial wireles 2,4 GHZ
1 x controle com fio de wii nunchuk
1 conversor DC/DC - 5V para 3,3V
3 x pilhas recarregáveis 1,5V 2200mAh
1 x case para as pilhas
1 x placa perfurada padrão

Fios e cabos...
Madeirite (Plywood) para o frame de 8mm de espessura (para a base e topo) e de 3mm (para as laterais e fundo)
Cola madeira;
Espaçadores plásticos para placa de circuito impresso;
Parafusos/porcas...
Ferramentas diversas...
etc...

CÓDIGO:
O código, bem como os detalhes do projeto podem ser baixados no GitHub da Arduino By Myself.
Lembrando que esse código é de propriedade e responsabilidade de Joop Brokking, mas pode ser distribuído sem autorização pois é de domínio público.
Nós da Arduino By Myself, não nos responsabilizamos por erros e correções nesse código.


https://github.com/Arduinobymyself/ABIR_Arduino_Balancing_Itself_Robot



ESQUEMAS & PLACAS:

Abaixo o esquema de ligação dos vários módulos.
Note que o Diodo D1 é imprescindível por dois motivos:
1 - ele protege o sistema contra inversão de polaridade da bateria de alimentação
2 - ele proporciona uma queda de tensão necessária para termos 12V na entrada, uma vez que a bateria Lipo, quando completamente carregada tem uma tensão de 12,6V e a queda de tensão no diodo será de aproximadamente 0,6V, resultando nos desejados 12V na entrada.

Os resistores R3 e R2 formam um divisor de tensão, proporcionando 5V no pino A0 (codificado para 1023, após a conversão analógico-digital) do arduino quando a tensão da bateria for de 12V, e desse modo é possível monitorar a tensão da bateria. Assim podemos controlar a descarga da bateria, caso ela caia abaixo de 10,5V (codificado para 1050 no arduino) o sistema simplesmente irá parar de funcionar indicando que a bateria está baixa e solicitando a sua recarga (garantindo a vida útil das células da bateria Lipo) evitando problemas maiores.

Versão original:

Versão de placa Arduino By Myself (vista de baixo, lado das trilhas):

Orientação:
A placa está sendo vista pelo lado das conexões, então muito cuidado!
Linhas negras são trilhas feitas com solda, ligando ponto por ponto da placa padrão perfurada.
Linhas finas coloridas, são fios conectando os respectivos pontos de início e fim.
Linhas grossas coloridas, são fios na parte de cima da placa (lado dos componentes).
Linhas cinzas são contorno dos componentes .

Note que: no meu caso, como o meu motor de passo é para 0,45 graus por passo (800 passos por revolução), tive que usar o driver do motor de passo configurado em "full step", desse modo na minha placa não existe a conexão para +5V do pino 3 (parte superior do Driver da esquerda para a direita) do driver de motor de passo (todos os pinos de configuração para "LOW" significa "Full Step") consulte o manual do seu driver caso esteja utilizando outro driver para ver como configurar......
Se você estiver usando um motor de passo com 200 passos por revolução, e 1,8 graus por passo, você deve manter as conexões como está na figura (configurado para 1/4 de passo).

Meu motor de passo tem 8 pinos (derivação central de cada bonbina) dessa forma deixei a derivação central sem conexão e foi conectado somente as bobinas A+A- e B+B- ao driver de motor de passo.



Esquema do controle remoto:
Muito cuidado com as ligações de alimentação no Wii Nunchuck.
O Arduino UNO ou um Pro-mini vai ser alimentado por uma bateria de 4,5V (3 pilhas de 1,5V), mas o controle wii-nunchuck vai ser alimentado por 3,3V provenientes do Arduino UNO ou se utilizar um Arduino Pro-mini, deverá ter um regulador de tensão de 5V para 3,3V


Original usando o Arduino UNO:



Versão de placa usando o Arduino Pro-mini (minha versão) com o conversor de 5V para 3,3V:
Os fios amarelo e branco dever ser ligados nos pinos A4 e A5 do Arduino Pro-mini, respectivamente.
Pino A4 deve ser conectado ao SDA do controle e o pino A5 deve ser conectado ao SCL do controle.






MONTAGEM & AJUSTES:

FRAME:
Agora vamos montar o frame do robot
Para isso você pode utilizar a imaginação e os materiais disponíveis, mas segue as orientações para dimensionamento do frame.
Todas as dimensões estão em milímetros (mm)
As partes podem ser coladas ou simplesmente parafusadas.




FOTOS:

Segue as fotos reais do projeto para servirem como guia.










Soldei somente os pinos necessários (utilizados)

Trilhas feitas conectando ponto a ponto na placa perfurada padrão

Conexão dos Jumpers entre os módulos

Conexão do SDA/SCL da MPU 6050 com os pinos A4/A5 do Arduino Pro-mini, respectivamente.

Wii - nunchuck controller

Montado no Frame e com a bateria LiPo no topo do frame.














Detalhe do controle remoto






TESTES & AJUSTES:
Após montado o frame e posicionado os motores e a placa principal;

1 - retirar os motores de passo do conector;

2 - alimentar o sistema, utilizando uma fonte externa de bancada com medição de corrente e tensão, ajustada para 12,6V;
Se tudo ocorreu bem e se tudo está corretamente tudo conectado (módulos ligados e operando);
- LED do arduino deve acender  e ficar piscando (inicialmente ele está com o código "Blink" operativo);
- O LED verde da MPU deve estar aceso;
- O LED azul do transceptor de 2,4GHz deve piscar por alguns segundos;

3 - Verifique a corrente consumida, não deveria passar uns 50mA;
- Meça com o multímetro as principais tensões do circuito (+12,6V na entrada, +12V na saída do Diodo D1, +5V na saída do regulador)

4 - Ajuste da corrente dos motores de passo;
- No meu caso o motor de passo consome 300mA por fase, assim os dois motores vão consumir 600mA, contando com o restante dos circuito a corrente total não deverá ser maior que uns 650mA;
- desligue o sistema;
- coloque um motor de passo no conector, observe a corrente consumida;
- com uma chave ajuste o potenciômetro do driver para que a corrente fique em torno de 300mA;
- desligue o sistema;
- retire o motor de passo e coloque o outro motor de passo;
- ligue o sistema;
- ajuste a corrente desse driver no potenciômetro, também para 300mA;

Pronto! agora o sistema está como os motores ajustados.
Lembre-se que se você está usando motores diferentes do especificado, esses valores irão mudar e você deve ter em mãos o datasheet do seu motor para poder saber a corrente de trabalho por fase.

5 - Download do software de teste do sistema;
- coloque o seu Robot na posição vertical (em cima de um apoio para que as rodas tenham movimento livre e o robot não ande)

Download do arquivo de teste

- usando o adaptador USB-Serial
- faça o download do arquivo: YABR_hardware_test.ino, usando a IDE do Arduino;
- após o download bem sucedido, abra a comunicação serial na IDE do Arduino, com a janela de comunicação serial ajustada para velocidade de comunicação 9600bps;
- anote o valor de balance do seu robot;





6 - Download do Software do robot:
- agora edite o arquivo: Balancing_robot.ino, e coloque o valor de balance encontrado,  na linha: acc_calibration_value;
- no meu caso ficou:
acc_calibration_value = -1356;
- edite os valores de ganho P.I.D. para o seu robot;
Esses valores são empíricos e cada robot tem o seu.
Inicie com um valor alto de P por exemplo 20 ou 30 e um valor mais baixo para o D por exemplo 10 ou 15, deixe o valor de I fica em torno de 1 a 3
Vá ajustando esse valores até encontrar o valor ideal de P, I e D
No meu caso foi de ficaram como:
pid_p_gain = 30;
pid_i_gain = 1;
pid_d_gain = 10;
Ajuste também o valor de:
turning_speed = 50;
max_target_speed = 150;
- faça o download do arquivo para o seu robot;



- Pronto! seu robot já deve estar apto a dar os primeiros passos.......
- coloque lentamente o robot de pé e verifique se ele estabiliza nessa posição.....
repita os passos de ajuste do P.I.D. até que o robot encontre seu ponto de estabilização.....
Dica: se o robot estiver muito arredio.... balançando muito, reduza o P
Se o robot está estável mas começa a desestabilizar... aumente um pouco o D
É natural durante o processo de estabilização ele andar um pouco para traz até estabilizar, então não desespere..... isso é uma ciência......

7 - Download do SW do controle remoto.
- após todo o trabalho árduo de ajuste do P.I.D. estamos prontos pra controlar remotamente o robot;
- faça o download do SW para o arduino Pro-mini do controle remoto;
- ligue o controle, se tudo estiver OK, já deve ser possível controlar remotamente o seu robot;

8 - Se você chegou até aqui, é porque o seu robot está operativo;
- faça mais ajuste com o P.I.D. encontre o melhor ajuste para ele rodar com velocidade e estabilidade, parabéns!!!


Assista aos vídeos para ver mais detalhes....

VÍDEOS:

Primeiro vídeo - ABIR - Arduino Balancing Itself Robot - Primeiros Passos

https://youtu.be/766VzVpbURw


Segundo vídeo - ABIR - Estrutura do Frame
https://youtu.be/nlMmYRrvcaw



Terceiro vídeo - ABIR - Módulo Principal
https://youtu.be/aeiwktZ7slA



Quarto vídeo - ABIR - Controle Remoto
https://youtu.be/wvix9BwFRHI






Volte novamente, em breve teremos mais vídeos demonstrativos das várias etapas de construção, testes e ajustes desse magnífico robot :-))







Um comentário:

  1. Muito bom trabalho, e legal a sua persistencia em buscar o melhor e compartilhar com a gente. Ficou fantástico os avanço do Balancing Itself Robot. Estarei acompanhando o seu trabalho e compartilhando.

    ResponderExcluir