19-2 Grupo 5

### **Resumo**

Projeto destinado a deixar o jogo com maior interação ao poder jogar com um controle alternativo de tambores, desenvolvido em arduino.

### **Software/materiais utilizados**

#### ***Materiais:***

* Arduino UNO
* BreadBoard
* 5x Resistor 220 Ohm
* 5x Piezo

#### ***Outros:***

* 5x Latas Pringles
* Tinta
* Adesivo
* Fita

#### ***Softwares**:*

* IDE do arduino
* Unity

### **Metodologia**

O projeto exerce a função de um controle alternativo para o jogo "The Cake is a... What?", utilizando a pressão em tambores com piezos-elétricos para gerar a interação dentro do jogo, ou seja, cada tambor representa uma comida especifica e uma interação diferente exercida dentro do jogo. Como fonte de alimentação foi utilizado o cabo USB conectado a um computador.

### **Desenvolvimento**

Iniciamos a primeira etapa pela montagem dos tambores, onde pintamos e furamos as latas de pringles, posteriormente colamos o adesivo juntamente do piezo-elétrico, assim já deixando todo o sistema conectado no Arduino Uno.

O controle conta com 5 tambores, cada um deles com um piezo-elétrico, todos ligados no Arduino Uno.

Dando continuidade ao projeto, fomos para segunda parte, a de programação.

#### **Programação:**

Na parte da programação, foi utilizado a IDE do Arduino e a Unity, onde foi desenvolvido o jogo.

***Código Arduino Uno:***

Para o desenvolvimento do código, trabalhamos com o sensores do Piezo-elétrico, onde é identificada a pressão ao bater no tambor, então escrevendo uma mensagem de texto na porta serial utilizada pelo Arduino.

```
const int knockSensor1 = A0;
const int knockSensor2 = A1;
const int knockSensor3 = A2;
const int knockSensor4 = A3;
const int knockSensor5 = A4;
const int threshold = 100;

int sensorReading1 = 0;
int sensorReading2 = 0;
int sensorReading3 = 0;
int sensorReading4 = 0;
int sensorReading5 = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  sensorReading1 = analogRead(knockSensor1);
  sensorReading2 = analogRead(knockSensor2);
  sensorReading3 = analogRead(knockSensor3);
  sensorReading4 = analogRead(knockSensor4);
  sensorReading5 = analogRead(knockSensor5);

  if (sensorReading1 >= threshold) {
    Serial.println("brocolis");
  }

  if (sensorReading2 >= threshold) {
    Serial.println("peixe");
  }

  if (sensorReading3 >= threshold) {
    Serial.println("frango");
  }

  if (sensorReading4 >= threshold) {
    Serial.println("carne");
  }

  if (sensorReading5 >= threshold) {
    Serial.println("uva");
  }

  delay(250);
}

```

***Código Unity**:*

Na Unity foram feitas implementações para que fosse aceito a biblioteca do arduino, permitindo acesso do jogo à porta COM3, que está sendo utilizada pelo Arduino. Desta forma, quando o input dos tambores enviar uma mensagem de texto para a porta, o jogo verificará se a mensagem em questão é compatível com algum dos ingredientes usados na fase. Se for, ele cria uma instância daquele ingrediente.

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

public class ArduinoReader : MonoBehaviour
{
    public BotaoIngrediente[] ingredientes;
    BotaoIngrediente ingredienteAtual;
    SerialPort sp = new SerialPort("COM3", 9600);

    private void Start()
    {
        sp.Open();
        sp.ReadTimeout = 1;
    }

    private void Update()
    {
        try
        {
            string i = sp.ReadLine();
            print(i);
            switch (i)
            {
                case "brocolis":
                    ingredienteAtual = ingredientes[0];
                    break;

                case "peixe":
                    ingredienteAtual = ingredientes[1];
                    break;

                case "frango":
                    ingredienteAtual = ingredientes[2];
                    break;

                case "carne":
                    ingredienteAtual = ingredientes[3];
                    break;

                case "uva":
                    ingredienteAtual = ingredientes[4];
                    break;
            }
            criarIngrediente();
        }
        catch (System.Exception e)
        {
            //Debug.Log(e);
        }
    }

    void criarIngrediente()
    {
        ingredienteAtual.CreateIngredients();
        ingredienteAtual = null;
    }
}

```

## Resultados

Após efetuarmos vários testes, percebemos que, algumas vezes, a sensibilidade do piezo atrapalha a jogabilidade. Em algumas ocasiões ele pode disparar a mensagem mais de uma vez e outras não enviar nada, porém mesmo com esse empecilho, atingimos um resultado bastante satisfatório.

O vídeo abaixo é uma demonstração do projeto:

## Conclusão

O projeto foi concluído com sucesso e atingiu nossas expectativas.

Todo o conhecimento adquirido durante o semestre resultou em algo extremamente interessante, sendo um projeto que agrega uma nova forma de pensar, podendo buscar resultados de diferentes aplicações para atividades já conhecidas, além de termos vislumbrado novas ferramentas que o Arduino pode estar presente e ajudar na vida das pessoas.