18-2 Grupo 4

## Grupo 4: Membros

* **Bruna Machado Gramola** (0040961713008)
* **Cristine Karoline Fagnani** (0040961713042)
* **Isabella Cancian** (0040961723042)
* **Jacqueline Castro e Silva** (0040961813002)
* **Jhonnathan Guimarães Donato de** (0040961813037)
* **João Marcos Sanche Artero** (0040961713011)

## Projeto

Controle do jogo Ultrasound usando sensores ultra-sônicos HC-SR04.

## Resumo

Projeto que visa a construção de um controle simples usando os componentes do Arduíno para um jogo 2D.

## Dispositivos

**Materiais:**

1. Arduíno UNO;
2. Cabos condutores (8 unidades);
3. Ultrasonic Sensor HC-SR04 (2 unidades);
4. Case feita com papel paraná (1.7 mm);
5. Cabo USB.

**Software:**

1. IDE do Arduíno1;
2. Processing2.

## Metodologia

O projeto exerce a função de controle para o jogo Ultrasound utilizando o movimento das mãos, sendo um sensor utilizado para controlar a angulação do avião do jogo, ou seja, fazendo-o subir ou descer e outro que controla a taxa de aumento ou diminuição da angulação, fazendo com que ele angule mais rápido ou mais lentamente.

Como fonte de alimentação foi utilizado o cabo USB conectado a um computador. Além disso, o grupo buscou construir uma simulação de Arcade antigo para melhorar a parte estética e também abrigar a placa e os componentes do Arduíno, desse modo elas não ficariam expostas e seriam evitados possíveis acidentes e também a desconexão de alguma das partes.

Como apoio para o projeto, o software Processing foi utilizado, nele encontra-se o código principal do jogo em si. Quando ativado, juntamente com o Arduíno, ele lê as saídas de distância captadas pelos sensores e com elas controla o avião do jogo.

## Desenvolvimento

O Arcade conta com dois sensores ultrassônicos HC-SR04 ligados a uma placa de Arduino UNO alimentada por um cabo USB ao notebook da equipe. A intenção inicial era usar cada um dos sensores como um controle diferenciado em um jogo multiplayer de até dois jogadores. No entanto, por dificuldades enfrentadas durante o desenvolvimento do jogo em si, o grupo decidiu fazer um jogo singleplayer utilizando ambos os sensores para controles diferentes.

### **Arcade**

Primeiramente, o desafio que o grupo teve foi de construir uma estrutura que comportasse o Arduíno e o deixasse seguro para não sofrer nenhum dano ou ter algum de seus componentes desconectados.

Depois de algumas pesquisas, o grupo decidiu por seguir com uma solução feita de papelão super resistente. As peças foram desenhadas e cortadas para serem coloridas e fixadas com cola quente ao final.

O maior problema que tínhamos era manter os sensores fixos em uma tampa que era móvel e abria para que o Arduíno fosse guardado juntamente com os fios. A solução para isso acabou sendo incluir dois compartimentos pequenos feitos com papel e fita adesiva que seguraria os componentes e permitiam que os mesmos fossem facilmente acessados e retirados para que a tampa fosse aberta, conforme imagem abaixo.

### **Programação**

A princípio, para poder utilizar os sensores, foram declarados os pinos que serviriam como Triggers e os que serviriam de Echo para emissão do sinal e leitura do retorno. Além disso, algumas variáveis foram propostas de modo a controlar o tempo que o sinal leva para ir e voltar ao sensor (número utilizado para calcular a distância que mais tarde será passada para o jogo) e as distâncias antes e depois medidas pelos sensores.

```
#define triggerPin1 10
#define echoPin1 9
#define triggerPin2 13
#define echoPin2 12

unsigned long pulsetime = 0;
unsigned distance =0;
unsigned OldDistance =0;
long SensorDireito=0, SensorEsquerdo=0, SensorDireitoOld=0, SensorEsquerdoOld=0;

```

Após isso, foi feito o setup identificando os pinos declarados anteriormente como entrada ou saída.

```
void setup (){
  pinMode (echoPin1, INPUT);
  pinMode (triggerPin1, OUTPUT);
  pinMode (echoPin2, INPUT);
  pinMode (triggerPin2, OUTPUT);
  Serial.begin(9600);
}

```

No que diz respeito ao loop, ele funciona com o objetivo de medir a cada 50 milésimos de segundos a distância que os dois sensores medem ao chamar o método MedirDistancia(). Depois de receber os valores para o sensor direito e esquerdo, o método verifica se houve mudança na leitura e, caso tenha ocorrido, se a medição do sensor direito é maior ou menor do que o esquerdo. Caso seja maior, o valor total da medição será utilizado para angular o avião. Se o contrário for verdade, no entanto, apenas metade do valor será utilizado para angular o avião.

```
void loop(){

  MedirDistancia(triggerPin1, echoPin1);
  SensorDireito = distance;
  MedirDistancia(triggerPin2, echoPin2);
  SensorEsquerdo = distance;

  if (SensorDireitoOld != SensorDireito && SensorDireito > SensorEsquerdo) {

         Serial.println(SensorDireito);

    SensorDireitoOld = SensorDireito;
  } else{
           if(SensorDireitoOld != SensorDireito && SensorDireito < SensorEsquerdo){

             Serial.println(SensorDireito/2);

        SensorDireitoOld = SensorDireito;
      }
       }

       delay(50);

     }

     void MedirDistancia(int triggerPin, int echoPin){

       digitalWrite(triggerPin, LOW);
  delayMicroseconds(100);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(100);
  digitalWrite(triggerPin, LOW);
  pulsetime = pulseIn(echoPin, HIGH);
  distance = pulsetime / 58;
  delay(10);

     }

```

Obs: o ambiente pode interferir no cálculo dos sensores.

Quanto ao código utilizado para o jogo no software Processing, o mesmo encontra-se no final dessa página.

## Resultados

Os resultados não foram satisfatórios desde o início. Dentre os maiores problemas encontrados desde o início, os maiores deles encontram-se descritos abaixo:

#### **Instabilidade dos Sensores**

A a dificuldade de utilizar os sensores se deu principalmente em ambientes pouco controlados, nesses, as leituras eram instáveis e o jogo, bem como os controles, não se comportavam da maneira desejada. Para resolver isso, o grupo utilizou o próprio Arcade. Por ter uma forma fácil de ser manipulada e podendo manter a placa e os componentes fixos, pudemos apontar os sensores para espaços mais controlados e ter leituras mais estáveis, desse modo, o jogo funcionou melhor. Abaixo, por exemplo, os controles estavam posicionados na horizontal.

    Para melhorar ainda mais, o grupo chegou a conclusão que seria melhor construir um espaço ainda mais controlado juntamente aos controles, algo como um "teto" que limitaria a área dos sensores e livraria os mesmos de qualquer interferência externa. No entanto, não houve tempo de construir algo do gênero e que fosse esteticamente aceitável, entretanto, o ponto fica como observação para um projeto futuro.

#### **Problemas com Multiplayer**

No início, a intenção do jogo era ser um multiplayer de até dois jogadores utilizando dois sensores para captar as leituras, dessa forma, os dois deveriam competir entre si para ver quem conseguiria atingir mais pássaros, no entanto, devido ao software utilizado com o jogo, não conseguimos distinguir as leituras e os aviões acabavam não seguindo os comandos em concordância com o que era esperado.

Não conseguimos resolver o problema de leitura, no entanto, decidimos seguir por um caminho diferente e utilizar dois sensores como controle de um avião, dificultando o jogo, já que a altura das duas mão importam para o comportamento do avião e ambas precisam ter controle do avião.

## Conclusão

O projeto se mostrou eficiente e bastante divertido. Foram colocados em prática os conhecimentos obtidos na aula de Laboratório de Programação, dando assim um melhor entendimento sobre o tema proposto.

Além disso, o projeto foi bem sucedido no final, atingindo o principal objetivo do grupo e servindo de controle para um jogo. As principais dificuldades encontradas ao longo do desenvolvimento foram na questão da estabilidade do componente Sensor Ultrassônico HC-SR04 que muitas vezes deixava a desejar, efetuando leituras pouco confiáveis e impactando no controle geral do jogo.

As dificuldades, entretanto, foram em grande parte resolvidas e o controle, ao final, ficou mais estável e possível de controlar o avião.

Além disso, essa atividade despertou a criatividade do grupo e mostrou que há muitas maneiras de melhorá-lo, incluindo a adição, por exemplo, dos botões analógicos como gatilhos e a retirada de um dos sensores HC-SR04. Desse modo, teríamos um sensor HC-SR04 para controle de altura do avião e os botões como gatilhos para o disparo de projéteis contra inimigos.

Partindo para esse lado, as possibilidades de desenvolvimento de controles não óbvios de jogos se fazem quase infinitas e diversas outras ideias podem aparecer.

Por fim, a partir das dificuldades que surgiram na apresentação, há a sugestão de construir uma espécie de caixa onde o árcade seria colocado, estabilizando ainda mais as leituras do arduino que ficariam confinadas num espaço reservado.

O grupo ficou satisfeito com o trabalho final e feliz por aplicar na prática conceitos e ideias que outrora estiveram apenas no papel.

## Jogo

Segue abaixo o caminho para acessar o código utilizado para executar o jogo.

[1]