ROMEO V2.2: Uma Controladora de Robôs com Cérebro de Arduino

57 views

Olá caro leitor! Nesse meu artigo de estreia aqui no Baú da Eletrônica, vou trazer para vocês um review de hardware alinhado a um dos meus tópicos de interesse: controle digital e robótica. O pessoal da DFRobot já de posse das controladoras de motores ROMEO decidiu fazer uma atualização, que veio bem a calhar: a placa ROMEO V2.2. Uma controladora de motores com um processador compatível com Arduino em uma mesma placa, ou seja agora você não vai precisar se preocupar em montar aquela conhecida placa extra com estágio de potência e proteções para controlar seus motores.

Motor com Cérebro de Arduino?

Correto, você não entendeu errado, a ROMEO V2.2 foi concebida para que o desenvolvedor receba a placa, desembale, instale motor e fonte de alimentação (ou uma bateria), e daí pra frente o trabalho seja feito só por firmware. A malha de controle, modulação por largura de pulso e algoritmos de controle de velocidade, direção e parada, são implementados sem que seja necessário soldar um único fio extra, economizando tempo (e solda!). Mas para ficar ainda mais fácil, a equipe de engenharia da DFR adicionou um microcontrolador AVR, sendo a variante, um conhecido ATMEGA32u4. Somando a isso, o MCU recebeu um bootloader capaz de torná-lo compatível com o conhecido Arduino Leonardo, podendo ser programado diretamente pela IDE  Arduino, deixando a disposição para o desenvolvedor todo o ecossistema já existente como as produtivas API do Wiring e as milhares de bibliotecas diariamente produzidas pela comunidade open source. Vamos dar uma olhadinha na ROMEO V2.2? Olhem abaixo?

 

Controlador Romeo V2.2 - DFRobot
Figura 1 – Controlador Romeo V2.2 – DFRobot

 

A pequena placa possui dimensões um pouco maiores que a de um Arduino comum, graças ao estágio de potência com trilhas reforçadas para comandar motores de até 2A, a ROMEO V2.2 compensa o tamanho maior provendo mais recursos, vejamos :

 

  • Microcontrolador AVR, ATMEGA32u4 – contendo 32KB de Flash + 2.5KB de RAM;
  • Bootloader: Arduino Leonardo, sem conversor USB-Serial (o MCU cuida da USB);
  • Ponte H dupla, baseada na conhecida L298P, capaz de lidar com motores de até 2A;
  • 5 chaves táctil para usuário;
  • Socket para rádio XBEE;
  • Socket para rádio subGHz ou Bluetooth (ACP220);
  • Header com acesso a todos os I/Os do MCU;
  • Conexão para até dois motores;
  • Header padrão Arduino para encaixe de shields.

 

Para o usuário mais curioso, a DFR libera o esquemático completo da placa, o que pode ser muito útil quando dúvidas sobre como preparar o sistema de fonte de alimentação para ela. Vamos dar uma olhada um pouco mais detalhada nela.

O Microcontrolador

O Microcontrolador da ROMEO V2.2, cuida tanto do bootloader quanto, da aplicação escrita pelo usuário, é possível iniciar a placa diretamente em modo de bootloader. No caso de corrupção do firmware de aplicação, basta conectar a placa à porta USB com o botão de RESET pressionado, o seu bloco de hardware é simples como mostrado abaixo:

 

Bloco de Hardware
Figura 2 – Bloco de Hardware

 

Como todo hardware compatível com Arduino, a ROMEO V2.2 oferece a conhecida programação ICSP. Isso permite tanto utilizar a placa diretamente com o Arduino, quanto programar diretamente o microcontrolador com o ecossistema de software oferecido pela ATMEL, permitindo que desenvolvedores mais experientes trabalhem com aplicações mais avançadas, como por exemplo, malhas de controle PID otimizadas para o MCU.

O Clock principal é fornecido por um cristal de 16MHz, deixando o MCU próximo da sua velocidade máxima de operação (20 MIPS). Como falamos anteriormente, a USB é conectada diretamente ao MCU que possui controlador de USB integrado. Novamente aqui essa característica pode ser usada para o usuário mais curioso para implementar seu próprio protocolo de comunicação pela USB. Os indutores L2 e L3  e o capacitor C25 formam um conjunto para separação da fonte de alimenta o conversor A/D do restante do sistema, aumentando significativamente a exatidão e minimizando erros como missing code.

Fonte de Alimentação

A fonte de alimentação tem por objetivo obter, a partir das linhas de potência que alimentam o motor, valores de tensão aceitáveis e seguros para todos os demais componentes da ROMEO V2.2, vejamos abaixo:

Fonte de Alimentação
Figura 3 – Fonte de Alimentação

A bela fonte de alimentação foi bem projetada, conta com um conversor Buck baseado no MP2307, responsável por reduzir a tensão da linha de potência para 5V aproveitando-se da inerente eficiência desse tipo de conversor. Em seguida os 5V são distribuídos para outros blocos e também alimenta IC3, um regulador de tensão com saída fixa em 3.3V, a qual é responsável por alimentar o MCU. O circuito em torno dos amplificadores operacionais são responsáveis por selecionar automaticamente quem provê os 5V. No caso de alimentação pela USB, esse circuito baseado em um conhecido comparador de janela, desabilita a tensão provida pelo Buck e comuta os 5V para que sejam providos pela USB. Solução inteligente, não?

 

Estágio de Controle de Motores

Estrela principal dessa placa, o controlador de motores, foi construído para que o desenvolvedor não gaste mais tempo do que o necessário com mapeamento de I/O com capacidade de PWM. Vejam como esse estágio foi desenhado:

 

Estágio de Controle de Motores
Figura 4 – Estágio de Controle de Motores

 

O estágio de potência utiliza uma típica ponte-H baseada no conhecido L298P, capaz de lidar com motores de 2A, suficiente para pequenos seguidores de linha e até mesmo robôs cartesianos. O projeto foi feito para ser robusto, D2 a D9 são os conhecidos diodos de Flywheel, prevenindo contra eventos de força contra-eletromotriz, que poderia ocasionar a queima das saídas de potência. Cada motor é controlado de maneira bem simples:

 

  • INPUT1/2/3/4 – São entradas que recebem o sinal de comando do motor, podendo ser permanente ou pulsado como a conhecida modulação PWM, controlando velocidade ou mesmo posição (para ambos os casos é necessário prover uma realimentação para o MCU);
  • ENA/B – Habilitam ou não um dos motores, independente do sinal presente em INPUT.

 

O modo de operação padrão do controlador de motor é utilizar INPUT para determinar velocidade e direção de giro com modulação PWM (facilmente obtida utilizando a função analogWrite da API Wiring do Arduino), de forma que ciclo ativo entre 0 e 49% o motor gira em um sentido, de 51 a 100% para outro. Notem que 50% de ciclo ativo faz o motor ficar parado, assim quanto mais próximo de 50% for o ciclo ativo, mais devagar ele vai girar independente do sentido. O desenvolvedor deve ter isso em mente durante o desenvolvimento das suas aplicações.

 

Expansão de I/O:

Um dos diferenciais da ROMEO V2.2 está no acesso a todos os I/Os do MCU:

 

Expansão de I/O
Figura 5 – Expansão de I/O

 

Esse ponto do esquemático dispensa comentários, todos os I/Os são acessíveis pelo usuário, mas uma coisa interessante do projeto dessa placa é que os I/Os com funções específicas (por exemplo I2C ou SPI) ficam agrupados em conectores específicos, como por exemplo J19-21, que é um conector dedicado para uso com I2C. Esse tipo de abordagem ajuda bastante a não perder tempo tentando entender que sinal vai pra cada lugar, em muitos casos dispensando a abertura do datasheet do MCU.

 

Conectores para Rádio

Outro diferencial dessa placa está na disponibilidade de utilizar rádios com tipos de comunicação bem conhecida entre desenvolvedores experientes e iniciantes:

 

Conectores para Rádio
Figura 6 – Conectores para Rádio

 

Como o leitor pode observar, existe um conector para inserção do conhecido rádio XBEE, provendo capacidade de conexão em sistema Mesh do seu projeto e permitindo que ele alcance longas distâncias de comunicação. O Socket para ACP220 provê acesso a rádios de baixo consumo ou mesmo com capacidades Bluetooth, sendo indicado para projetos de robôs que precisem cuidar do consumo de energia par maximizar a vida útil da bateria.

 

Leds e Botões

Todo hardware por mais sofisticado que seja, precisa de dispositivos de entrada e saída para usuário. No caso de dispositivos embarcados como a ROMEO V2.2, os recursos mais tradicionais como leds e chaves tácteis estão disponíveis para programação por parte do firmware:

 

Leds e Botões
Figura 7 – Leds e Botões

 

Ao todo são disponíveis 5 botões, tenha em mente que a leitura desse tipo de teclado não é feita de forma convencional. Ao invés de testar o nível lógico dos ports conectados aos botões, o pessoal da DFR abordou uma estrutura baseada em conversor A/D pra economia de I/O, com isso cada tecla apertada vai representar um valor capturado pelo conversor A/D. O usuário deve então mapear esse valor para as teclas correspondentes, detectando assim quando determinada tecla foi pressionada. Em termos de leds, dois são reservados para indicação de TX/RX pela porta Serial-USB do Arduino, restando apenas um led no I/O digital 13, disponível para o usuário.

 

ROMEO, Onde Aplicar?

Agora que já conhecemos um pouco da placa, vem aquela pergunta. Por que eu deveria comprar ela? Para responder a essa pergunta, nada melhor do que ilustrar aplicações úteis para essa placa. A primeira que vem a mente, é o clássico robô seguidor de linha, a quantidade de I/O digital oferecida pela ROMEO a torna eficaz para adicionar vários sensores infravermelhos para detecção tanto de linha, como de obstáculos a frente, tarefa que pode ser deixada a cargo do conhecido módulo de ultrassom Sensor Ultrassônico HC-SR04, ilustrado na figura abaixo:

 

HC-SR04
Figura 8 – HC-SR04

 

Com isso fica fácil criar um conjunto motriz capaz de determinar a distância de obstáculos e efetuar manobras de desvio.

Os conectores de rádio permitem o usuário ir além do básico e criar dispositivos de atuação conectados utilizando o conceito de computação na borda, por exemplo sistemas de irrigação automatizados. Bastando utilizar os rádios XBEE ou Bluetooth, somado a um gateway para receber requisições de movimento, tempo de irrigação, através de uma aplicação em nuvem rodando no IBM Watson ou Amazon AWS. Vejam o esquema de uma aplicação típica abaixo:

 

 

Esquema de Aplicação
Figura 9 – Esquema de Aplicação

 

No esquema acima os Rádio node/valve  podem ser substituídos por uma ROMEO V2.2 contando com todos os sensores e atuadores necessários, prontos para operar o sistema de irrigação e monitoramento sem intervenção humana e em regime de 24 horas por dia, todos os dias! Já imaginou construir um sistema desses?! Acreditem, o Arduino IDE já possui a grande maioria dos blocos necessários para implementar um desses, bastando o usuário preparar a lógica de operação e sair colocando no campo!

Além de aplicação para agricultura, a ROMEO V2.2 pode ser usada como plataforma de prototipagem rápida para teste de malhas de controle de posição, bastando adicionar o circuito de realimentação para o MCU, tarefa que fica mais simples devido a grande quantidade de I/O exposto, vejam que legal:

 

 

O ROMEO V2.2, poderia ser conectado da mesma forma como na foto. O mais legal é que o ATMEGA presente da placa possui poder computacional suficiente para executar uma malha PID de controle de posição em ponto fixo. Aqui vai uma dica minha, essas malhas de posição são a base para construção de braços mecânicos e aplicação de robótica para controle de processos! Fica uma dica de projeto, mas é claro que vamos apresentar em um próximo artigo como controlar motores em malha fechada. Aguardem!

 

Desenvolvendo com a ROMEO V2.2

Desenvolver com a ROMEO V2.2, basicamente não tem segredo, o usuário que quiser produtividade basta conectar a controladora a uma fonte de alimentação, tendo em mente que uma fonte de 4A é ideal para uso com os 2 motores. Além disso, conecte a controladora a porta USB do seu computador. O aspecto das ligações pode ser visto abaixo:

 

 

 

Notem a alimentação externa que se faz necessária no canto superior direito, sempre que algum motor for necessário essa alimentação deverá estar presente. No conector ao lado, temos o motor conectado e pronto para uso e finalmente a porta USB conectada ao meu computador. Com esse setup estamos prontos para desenvolver nosso firmware, podendo usar:

 

 

No bom e velho Arduino IDE, como já mencionado antes, a ROMEO é reconhecida como uma Arduino Leonardo, sendo compatível com todas as API Wiring e várias bibliotecas desenvolvidas para a comunidade. Para o usuário mais avançado, o desenvolvimento pode ocorrer utilizando:

 

 

Com a IDE oficial para AVR da ATMEL, os usuários podem otimizar periféricos e algoritmos de controle mais específicos, detendo todo o controle do MCU da ROMEO, pois a IDE oferece um componente muito importante que é o debugger, que quando conectado ao ICSP, permite o usuário executar o programa passo-a-passo e monitorar o comportamento das variáveis em tempo real.

Conclusão

A ROMEO sem dúvida é uma excelente opção de controladora de motores, seu bom nível de integração trazendo, I/O em abundância, estágio de potência para dois motores e opções de conectividade sem fio, a tornam um canivete suiço para construção de aplicações de robótica, atuadores conectados e prototipação de sistemas de controle. Nos próximos artigos vamos explorar um pouco dessa placa e ver como ela se sai controlando um motor em malha fechada. Vamos aproveitar e falar um pouquinho sobre PID dentro do Arduino e formas de obter uma execução confiável. Fiquem ligados!

Referências

(Visited 33 times, 1 visits today)