Grupo

Isaías Lima
Leonardo Moreira
Milena Baptista
Victor Fontolan
Vinicius Bortoleto

Projeto

Genesis

Resumo

O projeto consiste em um jogo de puzzle e suspense utilizando a conexão entre Arduino e Unity.

Software / Materiais utilizados

Softwares

Unity 5.4

IDE do Arduino

Biblioteca System.io no Unity

Biblioteca Keypad no Arduino

Uso de StreamReader no Unity

Materiais

Arduino UNO

Keypad 4x3

Case feito de madeira

Fios para conexão do Pad com a placa

USB para conexão Arduino – PC

Metodologia

Nosso jogo usa como principal fonte de interação o KeyPad 4x3 que passa as informações do Arduino para o Unity através da porta COM, também usa o Mouse para algumas funções menores. No Unity nós tratamos esses dados recebidos pelo Arduino e criamos diversas situações que o jogador terá que resolver apenas com os inputs do Keypad.

Desenvolvimento

Primeiramente foi necessário fazer as conexões entre o Keypad 4x3 e a placa do Arduino, de forma que os caracteres pressionados saíssem de forma correta no Serial da IDE, utilizamos a biblioteca Keypad.h disponível no site do Arduino Playground, que consiste em ler a matriz de botões. Assim que concluímos essa parte, realizamos através da porta Serial o envio dos inputs recebidos pelo teclado.
Após a programação no Arduino, o próximo desafio foi realizar a conexão entre a IDE e o Unity, depois que estudamos alguns tutoriais na internet, realizamos essa conexão através da Porta Serial COM, para isso utilizamos a biblioteca System.IO.Ports e System.IO, que nos permite usar a conexão na porta usada pelo Arduino. Essas bibliotecas também foram aproveitadas para fazer a leitura de arquivos TXT através do StreamReader, para economizar códigos colocamos as senhas dos puzzles em um arquivo TXT e através do uso desse comando nós conseguimos ler o arquivo e fazer um filtro para validar se o jogador conseguiu fazer a resposta correta.

Além da parte dos códigos também fizemos algumas interfaces gráficas básicas, a interação do mouse com a tela foi feita através de elementos UI que o Unity fornece, como o Botão do computador, o restante foi feito através do controle de animações.

Resultados

15423686_1182560248497549_1604394295_n.jpg
Figura 1: Caixa aberta



15357016_1182560268497547_359147569_n.jpg
Figura 2: Conexão do Keypad 4x3
15403240_1182560205164220_1779587907_n.jpg
Figura 3: Montagem Completa



genesis.png
Figura 4: Tela do Jogo



Script responsável pela conexão Unity-Arduino


using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.IO.Ports;
using System.IO;
 
public class po : MonoBehaviour
{
    SerialPort sp = new SerialPort ("COM6", 57600);
    public int i = 0, j = 0, t = 0, checador = 0, verificador = 0, achou = 0, readeropen = 0, readerclose = 0;
    Text var;
    string[] Linhas;
    StreamReader sr, jk;
    public Animator anim;
    public string getsenha = null, senha = null, senhabloco = null, linha = null;
 
    void Start ()
    {
        sr = new StreamReader (Application.dataPath + "/" + "textounity.txt");
        anim = GetComponent<Animator> ();
        sp.Open ();
        sp.ReadTimeout = 1;
        var = GetComponent<Text> ();
    }
 
 
 
 
    void Update ()
    {
        if (this.anim.GetCurrentAnimatorStateInfo (0).IsName ("Genesis")) {
            anim.SetBool ("acabou", true);
        }
        if (readeropen == 1) {
            sr.Close ();
            sr = new StreamReader (Application.dataPath + "/" + "textounity.txt");
            readeropen++;
        }
 
 
        try {
            if (i == 3) {
                while (j < 3) {
 
                    linha = sr.ReadLine ();
                    if (senha == linha) {
                        anim.SetBool ("senhaok", true);
                        achou = 1;
                        verificador = 1;
 
                    } else {
                        j++;
 
                    }
                }
                if (j == 3 && achou != 1) {
                    verificador = 2;
                }
            } else {
                getsenha = sp.ReadLine ();
                senha = senha + "" + getsenha;
                i++;
 
            }
        } catch (System.Exception) {
        }
    }
}
 


Script Arduino:
#include <Keypad.h>
 
const byte LINHAS = 4;
const byte COLUNAS = 3;
 
char matriz_teclas[LINHAS][COLUNAS] =
{
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
 
byte PinosLinhas[LINHAS] = {8, 7, 6, 5};
byte PinosColunas[COLUNAS] = {4, 3, 2};
 
Keypad meuteclado = Keypad( makeKeymap(matriz_teclas), PinosLinhas,
                            PinosColunas, LINHAS, COLUNAS);
 
void setup()
{
  Serial.begin(57600);
}
 
void loop(){
 
  char tecla_pressionada = meuteclado.getKey();
  if (tecla_pressionada)
  {
    Serial.println(tecla_pressionada);
  }
}

Conclusão

Podemos concluir que o Arduino é um dispositivo com inúmeras utilidades e aplicações. Nós resolvemos focar em criar um jogo que utilize o mesmo. Nosso objetivo foi juntar o mundo real com o virtual, criando um jogo que é comandado pelas ações que o jogador faz a partir do equipamento montado com o Arduino. Com os acessórios corretos é possível aprimorar de forma muito ampla a utilização do Arduino para as devidas funções.

Assim, pode-se observar que é possível mesclar conhecimento de criação de jogos com conhecimentos sobre utilização de Arduino, sendo possível transformar o Arduino em um equipamento que siga a temática e o contexto do jogo criado.