19-2 Grupo 3

## **Autores**

Fabio Rogério Russo - RA: **0040961813049**

Lucas Alves - RA: **0040961813039**

Leticia Laurindo - RA: **0040961813032**

Luiz Guilherme Oleia de Novais - RA: **0040961813047**

Luiz Henrique Leite Paino - RA: **0040961813046**

Mayara Maia - RA: **0040961813025**

Vinícius Vaz Molina - RA: **0040961813050**

## **Resumo**

Com o objetivo de compreender melhor a arquitetura e alta gama de possibilidades que o Arduino nos fornece, decidimos criar um cubo de LED de tamanho 3x3x3, ou seja, um cubo com 27 LEDs. Tendo o controle de cada LED, conseguimos gerar figuras, formas e até mesmo letras, apenas acendendo-as nas posições e ordem correta.

Em nosso projeto acabamos nos fixando em uma determinada sequência de LEDs, recriando assim o Jokenpô, mais conhecido como pedra, papel, tesoura. Onde representamos da seguinte forma as jogadas:

- Pedra:  Cubo inteiro acesso. Imagem:[1]

- Papel:   A fileira do meio acessa. Imagem: [2]

- Tesoura: Uma cruz em formato de “X” acessa. Imagem: [3]

## **Materiais Utilizados**

* Arduino UNO
* 27 Leds
* 9 Resistores
* 3 Transistores
* X Jumpers
* Protoboard
* Placa Ponto a Ponto

## **Metodologia**

Com a finalidade de analisar e compreender melhor a arquitetura e as grandes possibilidades que o Arduino nos proporciona, decidimos desenvolver um cubo de LED, onde todas as LEDs possam ser controladas e acesas individualmente.

Entretanto, como estamos utilizando de um Arduino UNO que contém apenas 14 pinos que podem ser usados como entrada ou saída digitais e o cubo contém 27 LEDs, para que controlássemos cada LED iriamos precisar de 27 pinos. Então para termos este controle sobre as LEDs, soldamos as pernas negativas, as menores, por linha e as positivas, as maiores, por coluna, utilizando assim apenas 12 pinos do Arduino UNO para o controle das LEDs.

Com uma alta gama de possibilidades para trabalharmos em cima desse cubo de LED, decidimos nos fixar em um determinado contexto e recriar o jogo Jokenpô (Pedra, Papel, Tesoura). Na qual gerando um número aleatório a cada 5 segundos aproximadamente, o cubo realiza sua jogada que foram representadas da seguinte forma: O cubo inteiramente aceso representa a Pedra; os LEDs acesos em formato de X representa à tesoura; a fileira de LEDs do meio acesa representa o Papel.

## **Desenvolvimento**

   A primeira etapa deste projeto foi preparar o cubo de LED. A princípio, pensamos em fazer com um tamanho de 4x4x4 ou até maior. Ao analisarmos, decidimos reduzir este tamanho, criando assim um cubo 3x3x3. Com o auxílio de um molde com alguns furos para o alinhamento dos mesmos, começamos soldando as pernas negativas (que são as menores) interligadas uma com a outra, formando assim a linha. Após realizar esse procedimento mais duas vezes, montamos o cubo soldando as pernas positivas, formando as colunas.

 Após a soldagem, encaixamos o cubo em uma placa de solda e o soldamos. Começamos o ligamento dos jumpers nas linhas e nas colunas, negativo e positivo consecutivamente.

 Este procedimento de soldagem foi crucial para o desenvolvimento e controle de cada um dos LEDs, pois para conseguir acender apenas um deles precisamos alimentar tanto o negativo quanto o positivo, já que o negativo são as linhas e o positivo a coluna, o controle destes LEDs foram feitos a partir deste conceito.

Na parte de programação, utilizamos uma biblioteca LedCube.h, onde contém funções específicas para piscar e acender as LEDs. Com isso, podíamos alterar via código para criarmos formas, desenhos e até letras com o acender das LEDs. Já que decidimos focar em recriar o jogo Jokenpô, criamos três matrizes com as respectivas jogadas e suas representações via LED. Com um intervalo de aproximadamente cinco segundos, é gerado um número entre 1 e 3, representando a jogada do cubo e acendendo as LEDs correspondentes à jogada.

## **Resultado**

Conseguimos resultados satisfatórios, obtendo, portanto, nosso objetivo de reproduzir o jogo Jokenpô com os LEDs em sua arquitetura em formato de cubo, com bases nos recursos disponibilizados pelo professor e suas orientações em suas aulas.

## **Conclusão**

Embora o código não tenha sido tão complexo, a dificuldade do projeto fica por parte da arquitetura e compreensão de circuitos elétricos. Moldar o cubo com os LEDs e realizar a conexão dos mesmos foi uma das partes mais desafiadoras, porém a que gerou maior gratificação e aprendizado. Com esse projeto, além de aprendermos o básico de circuitos elétricos, também tivemos uma melhor compreensão dos recursos disponibilizados pelo Arduino.

## **Código**

```

	#include <LedCube.h>

	#define SIZE 3
	#define COLS(SIZE * SIZE)

	byte levelPins[SIZE] = {
		11, 12, 13
	};
	byte colPins[COLS] = {
		2, 3, 4, 5, 6, 7, 8, 9, 10
	};

	LedCube cube(SIZE, levelPins, colPins);

	//JOGO
	const int PEDRA[SIZE][COLS] = {
		{ 1, 1, 1, 1, 1, 1, 1, 1, 1},
		{ 1, 1, 1, 1, 1, 1, 1, 1, 1},
		{ 1, 1, 1, 1, 1, 1, 1, 1, 1}
	};

	const int PAPEL[SIZE][COLS] = {
		{ 0, 0, 0, 1, 1, 0, 1, 0, 0},
		{ 0, 0, 0, 1, 1, 0, 1, 0, 0},
		{ 0, 0, 0, 1, 1, 0, 1, 0, 0}
	};
	const int TESOURA[SIZE][COLS] = {
		{ 1, 0, 1, 0, 1, 1, 0, 0, 1},
		{ 1, 0, 1, 0, 1, 1, 0, 0, 1},
		{ 1, 0, 1, 0, 1, 1, 0, 0, 1}
	};

	long randNumber;
	int Led[SIZE][COLS];
	int count = 0;
	int fim = 0;
	unsigned long next = 0;
	#define lapse 425;

	void setup() {}

	void writeleds(int randNumber) {
	  switch (randNumber) {
	    case 1:
		// Pedra

		for (byte level = 0; level < cube.getLevels(); level++) {
			for (byte col = 0; col < cube.getCols(); col++) {
				if (PEDRA[level][col] == 1) {
					cube.light(level, col, 1);
				}
			}
		}

	    break;
	    case 2:
		// Papel
		for (byte level = 0; level < cube.getLevels(); level++) {
			for (byte col = 0; col < cube.getCols(); col++) {
				if (PAPEL[level][col] == 1) {
					cube.light(level, col, 1);
				}
			}
		}

	    break;
	    case 3:
	        // Tesoura
	        for (byte level = 0; level < cube.getLevels(); level++) {
		        for (byte col = 0; col < cube.getCols(); col++) {
			        if (TESOURA[level][col] == 1) {
				        cube.light(level, col, 1);
			        }
		        }
	        }

	     break;
	  }

	}
	void OffLeds() {
	    for (byte level = 0; level < cube.getLevels(); level++) {
		for (byte col = 0; col < cube.getCols(); col++) {
			cube.lightOff(level, col);
		}
	    }
	}
	void loop() {

           if (millis() >= next) {
              if (fim >= 5) {
                OffLeds();
                count--;
                if (count == 0) {
                    randNumber = random(1, 4);
                    writeleds(randNumber);
                    fim = 0;
                }
              } else {
                count++;
                fim++;
              }
           next = millis() + lapse;
           }
	}

```