Como controlar robôs com um controlador de jogo e Arduino

Você sempre quis controlar um Arduino com um controlador de videogame? Bem, agora você pode com nada mais do que este artigo e um controlador Xbox 360!

Você sempre quis controlar um Arduino com um controlador de videogame?  Bem, agora você pode com nada mais do que este artigo e um controlador Xbox 360!
Propaganda

Arduinos e placas compatíveis semelhantes são um dos dispositivos que vão para DIY em qualquer lugar. Se você é um iniciante que está apenas começando com o Arduino ou alguém que já os colocou em prática em sua vida, eles fornecem uma plataforma para inúmeros projetos incríveis.

Hoje vamos explorar uma maneira criativa de controlar um servo usando Processing e um controlador Xbox360. Se você já é um especialista em desenvolvimento de jogos, talvez esteja interessado em nosso tutorial de Game Controller Personalizado, que usa o Unity.

Este tutorial irá assumir um pouco de conhecimento prévio, se esta for sua primeira incursão no uso do Arduino, você pode achar nosso guia do Arduino útil aqui. Da mesma forma, se esta for a primeira vez que você usa Java, isso pode ser um pouco confuso. Enquanto o Processing usa uma versão simplificada da plataforma, esses conceitos e dicas Java ainda podem ajudar.

O que você precisa

robôs de controle com controlador de jogo e arduino

  • 1 x Arduino. Estamos usando uma ONU hoje.
  • 1 x passatempo servo. Qualquer coisa que funcione com os pinos do Arduino.
  • 1 x controlador Xbox360 com fio. Embora isso tecnicamente funcione com praticamente qualquer controlador.
  • Vários fios de conexão.

Além dessas coisas, você também precisará fazer o download do Processing e do Arduino IDE de seus respectivos sites.

Preparando o Arduino

robôs de controle com controlador de jogo e arduino

Primeiro precisamos anexar nosso servo. As cores da fiação podem variar aqui, mas, como regra geral, o vermelho se conecta ao pino de 5v e marrom ou preto ao pino GND . A linha de dados, que geralmente é amarela ou laranja, é anexada ao pino 10 .

Verifique sua fiação e conecte o Arduino ao computador. Abra o Arduino IDE.

robôs de controle com controlador de jogo e arduino

Abra o esboço StandardFirmata localizado em Arquivo> Exemplos> Firmata> StandardFirmata . Este esboço configura a placa para controle externo sobre a porta serial, e é o mesmo que usamos em nosso artigo sobre como controlar Arduino com Python Como programar e controlar um Arduino com Python Como programar e controlar um Arduino com Python Infelizmente, É impossível programar diretamente um Arduino em Python, mas você pode controlá-lo através de USB usando um programa Python. Veja como. Consulte Mais informação . Carregue o esboço no quadro.

Se o upload falhar, verifique se você selecionou os detalhes corretos da placa e da porta no menu Ferramentas .

Nosso Arduino está pronto para ir!

Configurando o Processamento

Abra o processamento, você será saudado com um esboço em branco. Antes de fazermos qualquer coisa aqui, precisaremos instalar algumas bibliotecas. Vá para o menu Esboço e selecione Importar Biblioteca> Adicionar Biblioteca . Isso trará o Gerenciador de Contribuições, que parecerá familiar para qualquer usuário do Arduino por aí.

robôs de controle com controlador de jogo e arduino

Precisamos instalar três bibliotecas para fazer isso funcionar. A primeira é a biblioteca Game Control Plus . Isto é o que nos permitirá usar o nosso controlador de jogo com o Processing. Use a janela de pesquisa para encontrá-lo e clique em instalar no canto inferior direito. O Game Control Plus precisa de outra biblioteca instalada para sua ferramenta de configuração, então vamos ver agora. Procure a biblioteca G4P e instale-a também.

Finalmente, precisamos da biblioteca Arduino (firmata) . Você adivinhou, procure por ele e clique em instalar. Com essas coisas instaladas, estamos prontos para continuar testando que tudo funcionará. Estamos trabalhando com o Windows 10 hoje, mas o processamento está disponível para a maioria das plataformas, incluindo o Raspberry Pi. Imagine as possibilidades!

Testando o Arduino

Antes de mergulharmos na criação de um esboço personalizado, vamos testar o Arduino e o Servo com Processing. Abra Arquivo> Exemplos e selecione ArduinoServo na pasta Contribuições Bibliotecas / Arduino (firmata) . Usaremos isso para testar nosso servo, mas primeiro precisamos mudar algumas coisas.

Percorra o esboço e encontre esta linha:

println(Arduino.list()); 

Se estiver comentado, remova as duas barras antes de println (Arduino.list ()); e salve o esboço. Execute-o clicando no ícone de reprodução e fique de olho no console na parte inferior. Isso listará tudo anexado às suas portas COM .

robôs de controle com controlador de jogo e arduino

No meu caso, meu Arduino estava na COM 8, que era a terceira porta listada aqui. Isso é importante, pois o código na linha abaixo possui uma matriz cujo valor determina qual porta COM usar.

robôs de controle com controlador de jogo e arduino

Precisamos mudar isso para refletir nossa porta COM. Para mim, foi a terceira posição, ou o número de índice 2:

 arduino = new Arduino(this, Arduino.list()[2], 57600); 

Precisamos fazer algumas outras pequenas alterações nesse código para testá-lo. Role para baixo até onde os pinos do Arduino estão configurados e comente uma das linhas aqui. Mude o outro para o pino 10 .

 //arduino.pinMode(4, Arduino.SERVO); arduino.pinMode(10, Arduino.SERVO); 

Precisamos fazer a mesma coisa no método Draw () :

 arduino.servoWrite(10, constrain(mouseX / 2, 0, 180)); // arduino.servoWrite(4, constrain(180 - mouseX / 2, 0, 180)); 

Salve o esboço e execute-o. Você deve ser capaz de mover seu servo movendo o mouse para frente e para trás na janela que o programa gera.

Se não funcionar para você, verifique a fiação do seu Servo e verifique se você tem a posição correta da matriz para sua porta COM. Depois que você souber que o Arduino está falando muito bem com o Processing, é hora de seguir em frente.

Configurando o Controlador

A biblioteca Game Control Plus que estamos usando vem com uma configuração poderosa também. Certifique-se de que seu controlador esteja conectado, abra o projeto de exemplo Configurador e execute-o. Você receberá um menu como este:

robôs de controle com controlador de jogo e arduino

Clique no nome do seu controlador e uma janela de configuração muito maior será exibida.

robôs de controle com controlador de jogo e arduino

Isso pode parecer bastante assustador, mas foi projetado para ser o mais simples possível. No lado esquerdo, preencha a primeira chave com o nome que você deseja como variável. Esta variável irá controlar a posição do servo, então eu vou chamá-lo de servoPos .

Na caixa ao lado, você pode dar uma breve descrição do que faz. Agora pegue o seu controle e mova o stick que você deseja usar com o seu servo. Uma pequena experimentação mostra que o polegar direito corresponde à caixa Rotação X. Arraste uma linha entre a variável servoPos e esta caixa.

Agora precisamos salvar nossa configuração como um arquivo de dados. No canto superior direito da janela, preencha o campo Função do dispositivo e o campo Nome do arquivo .

O nome do arquivo é importante, pois você o usará no seu código. Estou mantendo isso simples chamando-o de xbs . Clique em Verificar e depois em Salvar . Isso escreve um arquivo com instruções para o nosso controlador, que podemos usar mais tarde.

robôs de controle com controlador de jogo e arduino

Preparando a pasta de desenhos personalizados

Vamos configurar nossa pasta de trabalho. Abra um esboço de processamento em branco e salve-o com qualquer nome que desejar. Isso criará um diretório para ele no local de salvamento.

Agora navegue para Documents / Processing / libraries / GameControlPlus / examples / Configurator e copie os dados rotulados da pasta. Esta pasta contém o arquivo de configuração que acabamos de criar. Navegue até o diretório do seu esboço em branco recém-salvo e cole a pasta de dados.

robôs de controle com controlador de jogo e arduino

Criando o desenho personalizado

Agora tudo está no lugar e podemos começar a fazer um esboço usando nossas duas bibliotecas. Vamos percorrer este passo a passo, mas você pode baixar o esboço completo e a pasta de dados se quiser avançar. Observe que você ainda pode precisar modificar o código para refletir suas portas COM do Arduino.

Comece importando todas as bibliotecas que precisaremos:

 import processing.serial.*; import net.java.games.input.*; import org.gamecontrolplus.*; import org.gamecontrolplus.gui.*; import cc.arduino.*; import org.firmata.*; 

Também precisamos declarar nosso ControlDevice, I / O e Arduino, juntamente com um float para manter valores de nosso thumbstick:

 ControlDevice cont; ControlIO control; Arduino arduino; float thumb; 

Nosso método setup () cria uma pequena janela, uma instância do controlador e combina o dispositivo com nosso arquivo de configuração. É aqui que é importante obter o nome do arquivo do nosso arquivo de dados de configuração correto:

 void setup() { size(360, 200); control = ControlIO.getInstance(this); cont = control.getMatchedDevice("xbs"); if (cont == null) { println("not today chump"); // write better exit statements than me System.exit(-1); } // println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[2], 57600); arduino.pinMode(10, Arduino.SERVO); } 

Também verificamos se não há controlador aplicável neste estágio e desistimos do programa, se necessário. Embora a janela criada com size () não seja necessária, ela nos dará algum feedback sobre se estamos obtendo valores úteis do nosso controlador. Nós também inicializamos nosso Arduino e fixamos aqui como fizemos durante o teste.

Agora criamos um pequeno método para pegar o valor de entrada do nosso controlador e mapeá-lo para valores que nosso servo poderá usar:

 public void getUserInput() { thumb = map(cont.getSlider("servoPos").getValue(), -1, 1, 0, 180); } 

Essa linha de código usa nosso arquivo de dados para obter nosso servoPos de controle nomeado, que é vinculado ao joystick direito do controlador e ler valores dele. Em seguida, mapeia os valores e armazena o valor em nossa variável de folga do polegar .

Neste momento esse código nunca é chamado, vamos consertar isso agora.

 void draw() { getUserInput(); background(thumb, 100, 255); arduino.servoWrite(10, (int)thumb); } 

O draw () é semelhante ao método loop () no IDE do Arduino. Em cada quadro, ele chama o método getUserInput () e atualiza o valor de polegar . Ele usa esse valor para alterar o valor vermelho do plano de fundo (), fornecendo um indicador visual da alteração no valor. Em seguida, ele grava esse valor no servo usando a função arduino.servoWrite () . Note que temos que converter thumb como um valor inteiro, já que a função servoWrite usa dois inteiros (pin number e angle) como seus argumentos.

Verifique seu código em busca de erros, salve-o e clique em executar. Depois de um pequeno atraso para inicializar o Arduino, ele deve ficar assim:

Controle com Game Controller e Arduino: Finalizado!

Este projeto foi em muitos aspectos bastante aprofundado para o programador inexperiente Aprender com projetos de codificação: 9 cursos Udemy para o programador iniciante A dificuldade real é encontrar bons tutoriais de programação e cursos que não só Ensine-lhe as habilidades necessárias, mas faça isso com projetos práticos. É aí que a Udemy entra. Leia mais, apesar das fantásticas bibliotecas disponíveis para nos ajudar. O que ele representa é uma nova maneira de pensar sobre o controle de robôs e qualquer outro dispositivo que você construa.

Este projeto iria junto com o nosso guia sobre a construção de um Pew Pew Laser Turret! Como construir uma torre laser com um banco Pew Arduino! Como construir uma torre laser com um Arduino Você está entediado? Pode também construir uma torre laser. Leia mais, dando-lhe controle total sobre isso. Você pode configurar um buzzer Piezo como no nosso alarme Arduino simples Como fazer um sistema de alarme simples Arduino Como fazer um sistema de alarme simples Arduino Detectar movimento, em seguida, assustar o heck fora de um intruso com um alarme de alta frequência e luzes piscando. Isso parece divertido? Claro que sim. Esse é o objetivo do projeto Arduino de hoje, adequado ... Leia Mais tutorial e use o seu controlador para alterar o tom da campainha ou cor das luzes.

Ou você pode, bem, construir um robô enorme e dominar a terra. Contanto que você tenha um cabo USB por tempo suficiente!

In this article