Controle de Motores com a Rocky




Introdução

A mais nova placa da RoboCore, a BlackBoard Rocky, é perfeita para projetos que precisam do controle independente de três motores DC, como os robôs de combate da categoria Cupim, que dependem de dois motores para a locomoção e um motor para a arma.

Neste tutorial veremos como gravar códigos na Rocky e como controlar os motores, em um primeiro projeto mostrando como utilizar dois dos motores para locomoção, e em um segundo projeto como acionar os três motores individualmente.

Lista de Materiais

Para este tutorial você precisará dos seguintes itens:

Atenção: os motores DC 3-6V com Caixa de Redução e Eixo Duplo, quando comprados separadamente como na lista acima, não são enviados com fios soldados, portanto será necessário fazer a solda dos terminais dos motores usando cabos elétricos, como este (independente da cor).

Observação: as baterias 18650 recomendadas e listadas acima são recarregáveis, mas devem ser carregadas utilizando um carregador adequado (como este, por exemplo).

Biblioteca

Para controlar a Rocky de maneira simples, desenvolvemos uma biblioteca que pode ser instalada diretamente pelo "Gerenciador de Bibliotecas" da Arduino IDE. Para instalá-la, basta digitar "Rocky" na barra de pesquisa do gerenciador, e então pressionar o botão "Instalar" da opção "RoboCore - Rocky". Após alguns instantes a biblioteca estará instalada e pronta para ser usada com a placa, como mostrado na imagem abaixo.

biblioteca-instalada
Biblioteca Instalada

Se preferir, você pode baixar o arquivo compactado em nosso repositório no GitHub e instalar a biblioteca manualmente.

Gravação do Primeiro Código

Antes de vermos o controle dos motores da placa, vamos ver como carregar um código na Rocky, e nada melhor do que começar com o famoso Blink, que inclusive é um dos exemplos da biblioteca da Rocky.

Conexão USB-UART

Antes de conectar o conversor USB-UART no seu computador e na Rocky, altere o jumper seletor de tensão de 5V (padrão) para 3,3V, e então conecte-o à Rocky. Neste momento, atente-se à polaridade do módulo e da placa. O pino de GND do conversor deve estar conectado no pino de GND da placa (o pino mais próximo do botão BOOT), como mostrado na imagem abaixo.

conexao-conversor-usb-uart
Conexão Conversor USB-UART

Após a conexão do conversor à placa, conecte o conversor ao seu computador utilizando o cabo USB Micro.

Atenção: para que o conversor USB-UART seja reconhecido no seu computador, pode ser necessária a instalação do driver USB seguindo os passos deste tutorial.

Configuração da IDE

Com o conversor USB-UART conectado à Rocky e ao seu computador, configure a Arduino IDE para que ela programe a porta COM correspondente ao conversor no seu computador, e o modelo de placa "ESP32 Dev Module", como na imagem abaixo.

ide-configurada-gravacao-codigo
IDE Configurada para Gravação de Código

Acionando Motores para Locomoção

A biblioteca da Rocky possui uma série de funções que acionam em conjunto dois motores, para facilitar a locomoção dos robôs, e veremos estas funções neste projeto.

Circuito

Para o acionamento de dois motores da Rocky para locomoção, monte o circuito a seguir.

circuito-dois-motores
Circuito com Dois Motores

Atenção: como a BlackBoard Rocky está sendo alimentada pelas baterias neste circuito, o conversor USB-UART não pode alimentar a placa também, senão poderá haver um dano permanente na placa ou no conversor. Para evitar isso, remova o jumper seletor de tensão do conversor, e guarde-o.

Código

Com circuito montado, carregue o código a seguir na sua BlackBoard Rocky. Lembrando novamente que o jumper seletor de tensão do conversor USB-UART deve estar desconectado do mesmo.

Entendendo o Código

O código se inicia com a inclusão da biblioteca da Rocky que instalamos anteriormente, e a criação do objeto motores como instância de RockyMotors da biblioteca. Com este objeto conseguiremos controlar os motores como desejamos.

Como todas as configurações necessárias para o controle dos motores pela placa são feitas internamente pela biblioteca, não é necessário realizar nada na configuração do código (função void setup()).

Já na repetição do código, temos as funções para acionamento dos motores pela placa. A primeira delas é o comando motores.forward(), que aciona os motores A e B com a velocidade máxima (o valor pode ser entre 0 e 100 %), para que o robô ande para frente. Após manter os motores girando durante 1 segundo, os motores são parados através do comando motores.stop(). Em seguida, através do comando motores.turn(90,30) fazemos com que o robô gire para a direita, acionando o motor da esquerda com uma velocidade maior que o da direita graças à função turn(velocidade_esquerda, velocidade_direita). Após manter o robô girando durante 1 segundo e pará-los novamente, o robô é girado para a direita invertendo o acionamento da função turn() anterior, gerando o comando motores.turn(30,90). Em seguida, acionamos os motores para que o robô se mova para trás usando o comando motores.backward(100). Por fim, giramos o robô novamente o robô para ambos os lados, porém agora girando os motores para trás, usando números negativos nas funções turn().

O Que Deve Acontecer

Assim que o código for gravado corretamente para a placa, os motores A e B serão acionados seguindo a sequência de movimentos mencionados anteriormente, como no GIF abaixo:

Resultado Final

Acionamento Independente dos Três Motores

Para aproveitar ao máximo o potencial da Rocky, precisamos aproveitar os três drivers de motores da placa, e veremos como controlá-los individualmente neste projeto.

Circuito

Para o acionamento dos três motores da Rocky monte o circuito a seguir.

circuito-tres_motores
Circuito com Três Motores

Atenção: como a BlackBoard Rocky está sendo alimentada pelas baterias neste circuito, o conversor USB-UART não pode alimentar a placa também, senão poderá haver um dano permanente na placa ou no conversor. Para evitar isso, remova o jumper seletor de tensão do conversor, e guarde-o.

Código

Com circuito montado, carregue o código a seguir na sua BlackBoard Rocky. Lembrando novamente que o jumper seletor de tensão do conversor USB-UART deve estar desconectado do mesmo.

Entendendo o Código

O código deste projeto se inicia da mesma forma que o código do projeto anterior, onde incluímos a biblioteca da placa e criamos o objeto motores para o controle dos motores da placa.

Já na repetição do código, temos o laço for(int i = 0; i < 101; i++) que incrementa a variável interna i de 0 até 100. Então, a cada repetição deste laço, acionamos o motor A com o valor da variável interna através do comando motores.setSpeedA(i). Ao sair do laço, o motor se mantém girando em velocidade máxima durante meio segundo, e então ele é parado. Após o acionamento do motor A, temos o acionamento do motor B, que é feito da mesma forma, porém variando a variável interna entre 0 e -100 para que ele gire no sentido oposto do motor A. Por fim, o motor C é acionado da mesma forma que o motor A.

O Que Deve Acontecer

Com o código gravado, os três motores da Rocky serão adicionados gradativamente em sequência, como no GIF abaixo.

Resultado Final

Indo Além

Outra funcionalidade importante da placa é que ela possui monitoramento de tensão da bateria, o que é fundamental para evitar que as suas baterias descarreguem além do mínimo permitido, quando são perdidas. Você pode entender melhor como essa funcionalidade funciona através do exemplo "SupplyVoltage" da biblioteca da placa.

Conclusão

Neste tutorial vimos os primeiros passos de uso da Rocky, e como controlar os seus três motores de forma independente.

Solução de Problemas

Um ou os dois motores estão girando no sentido oposto ao esperado

Se, na execução da função forward(), um dos motores, ou os dois, estiver girando no sentido horário ao invés do anti-horário, é sinal que ele está com a polaridade invertida, portanto apenas desconecte e conecte os fios deste motor na ordem invertida.

LED vermelho aceso

Se a Vespa acender um LED vermelho e não executar o código ao ligar a placa, verifique a conexão do suporte de baterias, pois é sinal que ele foi conectado com a polaridade invertida.

Avatar