Conexão de Arduino ao Unity

O mundo da tecnologia é motivado e “limitado” pela imaginação de cada um. Desta feita o artigo desta edição prende-se com a ligação de um micro-controlador Arduino ao conhecido Game Engine Unity.

O objetivo deste artigo é explicar como proceder à ligação de um micro-controlador Arduino ao Unity e usar este como uma espécie de “comando” para o jogo criado no Unity. Será um exemplo extremamente simples que resultará no controlo de um simples sprite no eixo do X sem qualquer animação especial.

Para este pequeno tutorial necessitamos dos seguintes elementos:

  • Arduino Uno
  • 2 x Push Buttons
  • Cabos de Conexão
  • Arduino IDE
  • Unity

Uma vez cumpridos os requisitos vamos dar inicio à assemblagem do pequeno circuito eletrónico que será o nosso “comando” de controlo do personagem do exemplo em Unity.

Depois de implementado o seguinte esquema eletrónico iremos passar à programação do micro-controlador Arduino.

Aqui fica o código necessário:

//Definição dos pin's responsáveis pelos respectivos Push Buttons
const int botaoEsquerdo = 3;
const int botaoDireito = 4;

void setup()
{
   Serial.begin(9600);
   pinMode(botaoEsquerdo, INPUT);
   digitalWrite(botaoEsquerdo, HIGH);
   pinMode(botaoDireito, INPUT);
   digitalWrite(botaoDireito, HIGH);
}

//Método de Leitura Constante do Estado dos Push Butons
void loop()
{
   if(digitalRead(botaoEsquerdo) == LOW)
   {
      Serial.write(1);
      Serial.flush();
      delay(20);
   }
   if(digitalRead(botaoDireito) == LOW)
   {
      Serial.write(2);
      Serial.flush();
      delay(20);
   }
}

 

Feito o upload do código acima mostrado para o Arduino vamos passar ao Unity.

Para isso necessitamos de criar um novo projeto, assim como uma nova “scene” onde poderemos colocar um background ao nosso gosto e um “personagem” que será controlado pelo “comando” acionado pelo Arduino.

No exemplo mostrado usei ainda um elemento para o solo ao qual adicionei um “BoxCollider” assim como o personagem tem também adicionado um “BoxCollider” para que não caia no infinito. Mas estes pormenores podem ser personalizados ao gosto de cada um.

Arduino: Unity

A imagem acima mostra o exemplo que criei para ilustrar este tutorial.

Após a criação do cenário propriamente dito temos de então de criar um script em C# que será o coração do movimento e ligação com o Arduino.

Aqui está o código que deverá ser incluído no script C# para que possamos então conectar o nosso “comando” Arduino ao Personagem implementado no Unity.

using UnityEngine;
using System.Collections;
using System.IO.Ports;

public class Arduino : MonoBehaviour {
   //Definiçao da variavel velocidade
   public float velocidade;
   //Definiçao da Porta COM que sera utilizada
   SerialPort porta = new SerialPort("COM3", 9600);

   // Use this for initialization
   void Start () {
      //Abertura da Porta COM para conexao com o Arduino
      porta.Open ();
      porta.ReadTimeout = 1;
   }

   // Update is called once per frame
   void Update () 
   {
      //Caso a porta COM responda positivamente estao executaremos o metodo Mover()
      if(porta.IsOpen)
      {
         try
         {
            Mover (porta.ReadByte());
         }
         catch(System.Exception)
         {
         }
      }
   }

   //Metodo Mover que sera chamado a cada clique no Push Button
   void Mover(int direcao)
   {
      //Para a Direita
      if (direcao == 1) 
      {
         transform.Translate(-Vector2.right * velocidade * Time.deltaTime, Space.World);
      }
      //Para a Esquerda
      if (direcao == 2) 
      {
         transform.Translate(Vector2.right * velocidade * Time.deltaTime, Space.World);
      }
   }
}

 

Após criar o script C# apenas é necessário arrastá-lo para para o “Inspector” referente ao personagem e se tudo correu bem ao colocar a cena em execução o Arduino será capaz de enviar para o Unity as nossas ações e reproduzi-las em tempo real.

Este tutorial é apenas um pequeno exemplo de como controlar um personagem usando o Arduino, no entanto pode ser aprofundado e explorado ao gosto de cada um, sendo possível implementar uma ação “saltar”, “disparar”, basicamente tudo o que a nossa imaginação disser.

Publicado na edição 49 (PDF) da Revista PROGRAMAR.