Manual
do
Maker
.
com
Eu estive planejando por um longo período o que fazer com esse braço robótico vendido pela Fulltronic. Eles vendem diversas configurações diferentes, desde o kit básico, o kit branco (essa belezinha que vós apresento), o kit completo e os servos separados, caso deseje montar aos poucos. Pensei em uma série de possibilidades, mas decidi iniciar pelo básico, para que você possa acompanhar uma evolução de projetos.
Vou antecipar algumas das idéias que tive para os artigos e espero não ser quibado por isso. Inicialmente, o funcionamento básico interativo. Que tal um braço com timer para pegar alguma coisa dentro do tempo determinado?
Outro projeto interessante é fazer esse braço responder a uma série de comandos pré-estabelecidos, isto é, poder determinar uma série de movimentos para que ele tente pegar alguma coisa, como se fosse um joguinho mesmo.
Le gran finale será um artigo envolvendo visão computacional com OpenCV.
Farei de forma aleatória entre outros artigos, mas no artigo de hoje precisamos inicialmente montar o braço e testar seu funcionamento. Para isso, vou iniciar o controle com o Onion Omega e seu shield PWM. Gosto de dizer 'shield' porque no popular já entende-se ser algo que sobrepõe o processador e essa terminologia surgiu do Arduino, eu sei, mas o Onion Omega trata seus 'shields' como 'expansores'.
A montagem é um processo simples e bastante divertido, é quase um quebra-cabeça com parafusos. Eu fiz a montagem sem manual, levei um tempão. Mas adquirindo pelos links da Fulltronic no começo do Artigo, você receberá o manual de montagem por email. Mas te desafio a montar por tentativa e erro:
No vídeo você pode ver que realmente funcionou. E sobrou peças. Isso que é o bom de montar sem manual, às vezes sobram peças para os outros projetos sem manual que faltaram peças....
...brincadeira. Tá tudo certo e montei sem manual porque quis.
Não dá pra falar do Onion Omega (site) sem enaltecer suas qualidades. Dá uma olhada nesse shield PWM. No artigo anterior fiz uma brincadeira sobre o barramento, mas dessa vez terei que falar explicitamente disso; o Onion Omega utiliza o barramento I²C para controlar os dispositivos via shield. Com isso, o acesso fica descomplicado, bastando transferir tensão para o CI I²C do respectivo shield. Dá pra brincar com I²C de muitas maneiras, inclusive pela interface web, mas abri um console para mostrar os bastidores da interação com o usuário. Para entender melhor o que está sendo feito, vamos ver mais alguns conceitos básicos.
O I²C é um barramento de comunicação utilizado em curtas distâncias em um circuito e bastante aplicável em embarcados. O dispositivo tem um endereço no barramento e pode se comunicar com muitos outros. É chamado também de 2-wire sob o protocolo I²C. Existem expansores de I/O que trabalham de uma forma atípica ao protocolo, mas que também são I²C, como os PCF8574, que inclusive escrevi um artigo introdutório a respeito.
O PWM do jeito fácil se chama "Arduino". Se tivesse que configurar timers, clock, duty cycle etc, aí seria "PIC". No melhor dos mundos, temos o "Onion Omega", que lhe dá a interface web para esnobar qualquer linha de código ou ainda te possibilita brincar por linha de comando sem muita complexidade. Claro que você pode fazer seu próprio programa, mas essa interface com o barramento já é um grande facilitador. No video você vê que apenas abro o terminal pelo browser e coloco 2 comandos:
O primeiro passo é inicializar o o expansor e ativar o oscilador para fazer o PWM. No console, simplesmente digite isso:
ubus call i2c_exp pwm-exp '{"command":"init"}'
O comando ubus recebeu 5 parâmetros, que parecem até demais, mas é bastante simples. O primeiro parâmetro é o "call" para chamar "i2c_exp" que é o expansor i²c e em seguida passa um comando para o "pwm-exp", que é o PWM do expansor. O parâmetro final, que é o argumento para inicializar o PWM tem o formato de um dicionário em Python. Isso significa que para a chave "command" você enviou o comando "init". É simplesmente como dar ignição no carro, nada além disso.
O segundo comando já é o acionamento do servo. Mais uma vez voltamos ao PWM, mas vou tentar simplificar.
Um pulso de PWM dura 20ms e dentro de um pulso deve ser enviado o sinal para o posicionamento do servo-motor. O comprimento desse pulso de sinal deve variar entre 1.0ms para -90, 1.5ms para 0 e 2.0 para +90. Você pode variar dentro desse período de 1ms à 2ms para obter ângulos intermediários.
Para esse comando você deve saber primeiramente o canal selecionado no expansor. Para descobrir o canal, olhe para o expansor. Ele começa em S0, para eu iniciei em S3, outra hora explico o porquê. O comando para posicionar o servo em 0 é esse (supondo o servo do canal 3):
ubus call i2c_exp pwm-exp '{"command":"set-period", "params":{"channel":3, "pulse":"1.5", "period":20}}'
Vamos utilizar amplamente em outros artigos. Nesse em específico utilizo apenas o comando i2cdetect para ver todos os canais i²c e encontrar os dispositivos disponíveis. Você vê uma tabela na saída desse comando, indicando os endereços com hardwares endereçados, no caso, 0x5a e 0x70.
O primeiro passo é descobrir o alcance do braço. Cada um dos servos deve ser colocado no ponto 0, então você deve movimentá-lo em direção a -90 até achar o limite, e marcar esse valor. Depois volte a 0 e movimente-o em direção a +90 até encontrar o limite. Anote todos os limites, iremos codificar isso em outro artigo muito em breve, pois vou executá-lo com Arduino também.
Espero que essa introdução já tenha lhe encorajado a adquirir seu braço robótico (descrito no início do link) para os próximos artigos. Quanto ao Onion Omega, demora um pouco mais pra chegar, mas é um outro mundo para se brincar, recomendo fortemente (procure alí na lupa por "Onion Omega" e veja outros artigos relacionados).
No próximo artigo relacionado ao braço, faremos a interação com o Onion Omega, mas dessa vez com um código completo, é só acompanhar.
Inscreva-se no nosso canal Manual do Maker Brasil no YouTube.
Próximo post a caminho!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.