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 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.
Este tutorial é uma continuação do tutorial Primeiros Passos com a BlackBoard Rocky, portanto sugerimos que siga todos os seus passos antes de seguir este tutorial.
Lista de Materiais
Para este tutorial você precisará dos seguintes itens:

Lista completa de produtos
comprar
BlackBoard Rocky

Conversor USB x UART



Suporte para 2 Baterias Li-Ion 18650

Cabo USB Micro B 80cm
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).
Acionamento de 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.

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:
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.

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.
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 como usar a BlackBoard Rocky para 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 Rocky 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.