Manual

do

Maker

.

com

Braço robótico com Onion Omega e MQTT

Braço robótico com Onion Omega e MQTT

Braço robótico Fulltronic controlado pela MIPS Onion Omega

Nos dois posts anteriores relacionados ao Onion Omega discorri sobre as formas de desenvolvimento nessa plataforma. Em outro artigo também mostrei como controlar o servo motor por linha de comando nessa board e dessa vez vou mostrar como controlar o braço robótico através de programação, mas de maneira breve, porque não quero me extender nesse artigo com código (entenda-se "preguiça de pensar").

Já nessa primeira imagem você vê meu teste, onde fiz subir o braço robótico. Esse braço robótico é vendido pelo parceiro Fulltronic e você encontra o braço robótico nesse link. Ele vende também os servos e o kit completo, dê uma olhada nos produtos, vale a pena.

A controladora nao poderia ser nada menos do que a Onion Omega, da qual já tenho escrito vários artigos mostrando suas deliciosas funcionalidades. Em sua versão 2 recém-lançada, você compra a board por 5 dolares, mas recomendo que não deixe de adquirir a dock também para facilitar as coisas e proteger sua Onion Omega.

Configurando o tópico no MQTT Broker

O primeiro passo é configurar um broker MQTT em algum outro hardware. Eu mostrei como configurar um broker nesse artigo:

http://www.manualdomaker.com/article/iot-configurando-um-mqtt-broker/

Para esse artigo, simplesmente criei um novo tópico e reiniciei meu broker. O tópico foi criado na acl /etc/mosquitto/bb.acl com leitura e escrita:

topic write onionOmega/#
topic read  onionOmega/#

Python e shell script no Onion Omega

E para fazer o app no Onion Omega, utilizei shell script e Python. Dá pra fazer de um monte de maneiras e provavelmente a maioria (senão todas) sairão melhor do que esse exemplo, mas garanto que nada deve ser mais rápido de codificar.

arm.sh

No arquivo shell, fiz uma variável pra guardar o valor de leitura do MQTT, utilizando o client para subescrever-me a um tópico. Utilizei o parâmetro '-C 1' para que o programa saia logo após receber o primeiro comando. Após o loop, o programa é executado novamente.

Os repositórios padrão da Onion Omega não me deram uma opção de baixar o python-paho, portanto optei por fazer o shell executando o client de linha de comando MQTT e o python apenas para controlar o braço robótico. O script shell ficou assim:

#!/bin/sh 
while true; do     
    COMMAND=`mosquitto_sub -h 192.168.1.2 -u dobitaobyte -P KYFSln122\! -t onionOmega/arm/comm -C 1`
    python arm.py $COMMAND
    echo "$COMMAND"
 done

Está simples, mas não está eficiente. Desse modo consigo controlar apenas 1 motor do braço robótico, mas não me ative a solucionar essa problemática porque eu só queria provar o conceito.

arm.py

Aqui está o pior código python da minha vida. Simplesmente "cuspi" a lógica para manipular um servo, mas estou satisfeito por poder mostrar o funcionamento. Maiores detalhes sobre o controle dos servos podem ser vistos nesse outro artigo que escrevi sobre a expansão de servos do Onion Omega. No site você encontra também diversos tutoriais sobre MQTT, é só procurar ali  na lupa. Nesse último artigo referenciado também explico como instalar python na Onion Omega.

#!/usr/bin/python

import sys
from OmegaExpansion import pwmExp

initOk = pwmExp.driverInit()
isOk   = pwmExp.checkInit()

if not isOk:
    print "Nao inicializado. Saindo..."
    exit(-1)

stat =  pwmExp.setupDriver(4,int(sys.argv[1]),0)

Aplicativo para o celular

Eu utilizei aqui o MQTT Dashboard, ele é realmente espetacular e recomendo fortemente sua utilização. Você precisará ter um broker configurado, coisa que você poderá fazer facilmente seguindo meu tutorial supracitado. Depois, você deverá entrar com usuário, senha e endereço do broker para se conectar ao broker através do MQTT Dashboard. Por fim, deverá criar um tópico assim:

01b.webp

Escolhi o tipo "seekBar" como widget. Depois, na tela PUBLISH do aplicativo, meu último widget controla a subida e descida do braço.

02b.webp

Não repare os demais widgets, eles são do controle de outras coisas do meu apartamento.

Tendo os dois arquivos (arm.sh e arm.py) no Onion Omega, basta executar o arm.sh:

03b.webp

As mensagens de iniciaização são porque eu estou iniciando o driver pwm a cada loop, mas como é somente para teste, não há problemas. Gostou? Segue ai!

Inscreva-se no nosso canal Manual do Maker Brasil no YouTube.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.