Como programar um Braço Robótico Educacional? – Parte III
Fala, makers! Tudo bom com vocês? Hoje eu estou super animado pois consegui finalmente programar o braço robótico educacional MeArm para funcionar com um controle de Playstation 4 e o melhor: o método que eu usei serve para qualquer controle. Esse é o primeiro tutorial na net que ensina como programar esse braço usando qualquer controle compatível com computador, USB ou Bluetooth, de uma maneira simples e fácil, então vem comigo!
Obs.: Essa é a parte 3 de uma série de posts, não deixe de conferir a Introdução e a Montagem do braço robótico, MeArm.
Como programar um braço robótico – Programas necessários
Você vai precisar de um programa chamado Processing rodando no seu computador, ela é um Ambiente Integral de Desenvolvimento, ou IDE, e vai ser utilizada para facilitar a interação entre o Arduino e o computador que será a nossa ponte.
Além disso, um controle compatível com seu computador, e se necessário um software que adapte seu controle. No meu caso vou precisar de um programa chamado DS4 para usar o controle de PS4, outro muito conhecido é o Xpadder, posso trazer um tutorial futuramente de como usá-lo.
Instalando as bibliotecas
Além disso você vai precisar baixar algumas bibliotecas que vão dentro do processing e do Arduino. Abaixo vou ensinar como baixar cada uma delas.
Na interface do Processing: Sketch -> Importar Biblioteca -> Adcionar Biblioteca
Agora baixe as bibliotecas como indicado abaixo:
Agora que já temos todas as bibliotecas necessárias para trabalhar no Processing, veja como instalar o Firmata no Arduino: Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas
Programando o Arduino
Começando com o Arduino, iremos compilar para a placa o código de exemplo que vem com a biblioteca Firmata, chamado ServoFirmata:
Programando no Processing
Agora que vem a parte mais complicada que é o código do Processing, mas fica tranquilo que eu deixei tudo organizadinho e comentado pra você:
<code>/** Controlando braço robótico MeArM Usando qualquer controle compatível Processing, Firmata e Game Control Plus by Davi Colares */ //Importa as bibliotecas necessárias import cc.arduino.*; import processing.serial.*; import org.gamecontrolplus.gui.*; import org.gamecontrolplus.*; import net.java.games.input.*; //Define algumas coisas úteis para GCP e Firmata ControlIO control; ControlDevice stick; Arduino arduino; //Define as variáveis //Valores que recebe do Joystick //Pinos dos servos e valores iniciais float c_base, c_left, c_right, c_claw; int base = 8, left = 13, right = 7, claw = 12, initial_base = 90, initial_left = 90, initial_right = 90, initial_claw = 90; public void setup() { //Printa as portas disponíveis println(Serial.list()); //Define a porta do Arduino //Começando do 0 //Troque port pela porta arduino = new Arduino(this, Arduino.list()[port], 57600); //Define os pinos do servos arduino.pinMode(base, Arduino.SERVO); arduino.pinMode(left, Arduino.SERVO); arduino.pinMode(right, Arduino.SERVO); arduino.pinMode(claw, Arduino.SERVO); //Coloca eles na posição inicial arduino.servoWrite(base, initial_base); arduino.servoWrite(left, initial_left); arduino.servoWrite(right, initial_right); arduino.servoWrite(claw, initial_claw); //Abre a tela de selação de controle do GCP surface.setTitle("PS4 com MeArm by Davi Colares"); control = ControlIO.getInstance(this); stick = control.filter(GCP.STICK).getMatchedDevice("nome_do_arquivo"); if (stick == null){ println("Nenhum dispositivo configurado"); System.exit(-1); } } //Função que pega os valores do joystick public void getUserInput(){ c_base = map(stick.getSlider("nome_X").getValue(), -1, 1, 0, width); c_left = map(stick.getSlider("nome_Y").getValue(), -1, 1, 0, height); c_right = map(stick.getSlider("nome_Z").getValue(), -1, 1, 0, width); c_claw = map(stick.getSlider("nome_W").getValue(), -1, 1, 0, height); //Usando as mesmas configurações //O valor 50 vai ser dado quando //o analógico estiver parado //Multiplicando por 1.8 temos 90 c_base = c_base *1.8; c_left = c_left *1.8; c_right = c_right *1.8; c_claw = c_claw *1.8; } public void draw(){ //Printa os valores do joystick println(int(c_base), int(c_left), int(c_right), int(c_claw)); //Chama a função do joystick getUserInput(); //Controla os servos de acordo com o joystick arduino.servoWrite(base, int(c_base)); arduino.servoWrite(left, int(c_left)); arduino.servoWrite(right, int(c_right)); arduino.servoWrite(claw, int(c_claw)); //Delay para não sobrecarregar o arduino //E não queimar os servos delay(5); }</code>
E se você tiver algum problema com ele, comenta aí embaixo que te ajudo a resolver. Deixe essa parte parada agora, vamos precisar fazer algo antes.
Ajustando o controle
Vamos precisar executar o código exemplo que vem com a biblioteca do Game Control Plus, Gcp_Configurator: Arquivo -> Exemplos -> Contributed Libraries -> Game Control Plus -> Gcp_Configurator
Agora com seu controle previamente conectado, execute o programa que abrimos. A primeira tela será a exibida abaixo e nela vamos selecionar o controle o programa do Processing que salvamos.
A tela abaixo irá se abrir e você precisará preencher as lacunas do modo descrito abaixo, eu também coloquei uma tolerância de 0.05 para evitar os pequenos erros que ele pode dar. Depois que você configurar tudo, só salvar clicando em “Save”.
Executando
Agora que você está com tudo pronto, é só ligar o Arduino, verificar a porta no programa que a gente fez no Processing e mudar para a porta correta no programa.
Então, vamos executar com o controle e Arduinos conectados no computador, o programa irá abrir uma tela e você deve selecionar o seu controle e confirmar as configurações.
Feito isso, agora é só acompanhar os valores no terminal e curtir controlando seu braço robótico, MeArm, com seu controle compatível.
Espero que você tenha curtido esse post, deu uma trabalheira para fazer ele, mas o resultado é incrível! Se você gostou dá uma avaliação aí embaixo e deixa um comentário. E claro, fica ligado que vem muito mais conteúdo por aí! Um abraço do seu maker preferido.