▲

Inteligente, ágil e feito para desafiar sua memória.

### Ferramentas utilizadas

## Sobre nós

Somos estudantes da CESAR School, apaixonados por tecnologia, inovação e desafios que unem lógica e criatividade. Nosso projeto Genius em Arduino foi desenvolvido como parte das atividades da disciplina de Sistemas Digitais, com o objetivo de aplicar na prática os conceitos de eletrônica, programação e design de interação.

## Motivação

A motivação para o desenvolvimento deste projeto surgiu do desejo de unir o aprendizado prático de eletrônica e programação com uma aplicação lúdica e interativa. O jogo Genius é um clássico que estimula a memória e o raciocínio lógico, e sua recriação em Arduino representa uma oportunidade de consolidar conhecimentos sobre componentes eletrônicos, controle de fluxo, lógica de programação e interação homem-máquina.

## Objetivo

O principal objetivo deste projeto é desenvolver uma versão funcional do jogo Genius utilizando a plataforma Arduino, integrando LEDs, botões e buzzer para reproduzir a dinâmica original do jogo, onde o jogador deve repetir corretamente a sequência de luzes e sons apresentada pelo sistema.

## Contextualização

O projeto foi desenvolvido no contexto da CESAR School, instituição reconhecida por sua metodologia voltada à aprendizagem prática e à inovação tecnológica. A criação do jogo Genius em Arduino insere-se nesse ambiente, em que os alunos são incentivados a experimentar, criar e solucionar problemas reais por meio da tecnologia.

# Esquema Conceitual

Descubra o nosso processo de desenvolvimento de conceitos

# Processo de trabalho

Conheça as etapas seguidas no desenvolvimento do projeto Genius em Arduino, desde a concepção até a montagem e os testes finais.

## 1. Ideação e Briefing

Definimos o objetivo principal: recriar o jogo Genius utilizando a plataforma Arduino, promovendo o aprendizado prático de lógica, eletrônica e programação. Essa etapa envolveu alinhar as metas acadêmicas da CESAR School com os objetivos do projeto.

## 2. Pesquisa e Documentação

Pesquisamos o funcionamento original do jogo Genius e analisamos componentes acessíveis, como LEDs, botões, resistores e buzzers. Consultamos documentações e exemplos de projetos similares para entender as melhores práticas de montagem e codificação.

## 3. Planejamento e Prototipagem

Desenhamos o circuito e organizamos os componentes na protoboard para validar a estrutura do sistema. Nessa fase, testamos combinações de cores e tempos de resposta dos LEDs e botões, garantindo o funcionamento antes da integração do código.

## 4. Montagem do Circuito

Com os componentes definidos, montamos o circuito completo na protoboard, conectando os LEDs de quatro cores, botões e buzzers ao Arduino Uno. Essa etapa garantiu a integração física entre o hardware e a lógica do jogo.

## 5. Programação e Testes

Desenvolvemos o código no Arduino IDE, implementando funções como geração de sequência aleatória, controle de LEDs e verificação das respostas do jogador. Realizamos diversos testes para ajustar tempos e sons, garantindo precisão e interatividade.

## 6. Ajustes e Finalização

Refinamos o sistema corrigindo falhas de sincronização e otimizando a experiência do jogador. Ajustamos a intensidade dos LEDs e o tempo de resposta dos botões, resultando em um jogo funcional, educativo e com excelente desempenho prático.

## Baixe nosso projeto agora!

Quer transformar suas ideias em realidade? Baixe este projeto completo e tenha em mãos todos os códigos, esquemas e instruções necessários para dar o próximo passo.

## Vídeo demonstrativo

# Lista dos Componentes

Produto | Função | Quantidade | Valor
--- | --- | --- | ---
Arduino Uno | Placa microcontroladora usada para controlar LEDs, botões e buzzer do jogo Genius | 1x | R$50,00
Protoboard | Placa usada para montar e testar circuitos eletrônicos sem solda | 1x | R$13,90
Resistores 220Ω | Limitam a corrente elétrica dos LEDs, evitando danos aos componentes | 4x | R$1,00
Buzzer | Emite sons que indicam acertos e erros durante o jogo | 1x | R$7,00
Botões | Permitem a interação do jogador com o jogo, pressionando as sequências corretas | 4x | R$6,00
LEDs (vermelho, verde, azul e amarelo) | Indicadores visuais que representam as cores e sequências do jogo | 4x | R$4,00
Jumpers macho/macho | Fios de conexão usados para interligar os componentes na protoboard | 1 conjunto | R$10,00

# Códigos mais importantes

# 1. Definições de Hardware

As definições abaixo mapeiam os pinos do Arduino para os LEDs, botões e buzzers usados no jogo Genius:

    #define LED_RED     10
    #define LED_GREEN   5
    #define LED_BLUE    3
    #define LED_YELLOW  13

    #define BUTTON_RED    9
    #define BUTTON_GREEN  6
    #define BUTTON_BLUE   2
    #define BUTTON_YELLOW 12

    #define BUZZER1  4
    #define BUZZER2  7

Essas configurações garantem que cada componente físico esteja corretamente conectado ao microcontrolador.

# 2. Variáveis Globais

Essas variáveis armazenam o estado atual do jogo e o progresso das rodadas:

    byte gameBoard[32];
    byte gameRound = 0;
    unsigned long lastActionTime = 0;
    boolean gameActive = false;

Elas controlam se o jogo está ativo, qual rodada o jogador está e quais cores compõem a sequência atual.

# 3. Função de Inicialização (setup)

Responsável por configurar os pinos de entrada e saída e preparar o sistema para começar o jogo:

    void setup() {
      pinMode(BUTTON_RED, INPUT_PULLUP);
      pinMode(BUTTON_GREEN, INPUT_PULLUP);
      pinMode(BUTTON_BLUE, INPUT_PULLUP);
      pinMode(BUTTON_YELLOW, INPUT_PULLUP);

      pinMode(LED_RED, OUTPUT);
      pinMode(LED_GREEN, OUTPUT);
      pinMode(LED_BLUE, OUTPUT);
      pinMode(LED_YELLOW, OUTPUT);

      pinMode(BUZZER1, OUTPUT);
      pinMode(BUZZER2, OUTPUT);

      gameActive = false;
    }

Esta etapa garante que todos os componentes estejam prontos antes do início do jogo.

# 4. Lógica Principal (loop)

O loop principal executa continuamente a lógica do jogo: inicia, toca a sequência e verifica acertos ou erros.

    void loop() {
      if (!gameActive) {
        attractMode(); // modo de espera
        gameActive = true;
      }

      if (play_memory()) {
        play_winner();
      } else {
        play_loser();
      }

      gameActive = false;
    }

Essa estrutura é o coração do jogo, responsável por iniciar e reiniciar as partidas automaticamente.

# 5. Função play_memory()

A função central do jogo, responsável por gerar a sequência aleatória e verificar se o jogador acerta:

    boolean play_memory(void) {
      randomSeed(millis());
      gameRound = 0;

      while (gameRound < ROUNDS_TO_WIN) {
        add_to_moves();
        playMoves();

        for (byte currentMove = 0; currentMove < gameRound; currentMove++) {
          byte choice = wait_for_button();
          if (choice != gameBoard[currentMove]) return false;
        }
        delay(1000);
      }
      return true;
    }

Essa função define a mecânica do jogo Genius — o jogador deve repetir a sequência de luzes e sons corretamente.

# 6. Controle de LEDs e Sons

As funções abaixo acendem os LEDs e produzem os sons correspondentes a cada cor pressionada:

    void setLEDs(byte leds) {
      digitalWrite(LED_RED, (leds & CHOICE_RED) != 0);
      digitalWrite(LED_GREEN, (leds & CHOICE_GREEN) != 0);
      digitalWrite(LED_BLUE, (leds & CHOICE_BLUE) != 0);
      digitalWrite(LED_YELLOW, (leds & CHOICE_YELLOW) != 0);
    }

    void toner(byte which, int buzz_length_ms) {
      setLEDs(which);
      switch (which) {
        case CHOICE_RED: buzz_sound(buzz_length_ms, 1136); break;
        case CHOICE_GREEN: buzz_sound(buzz_length_ms, 568); break;
        case CHOICE_BLUE: buzz_sound(buzz_length_ms, 851); break;
        case CHOICE_YELLOW: buzz_sound(buzz_length_ms, 638); break;
      }
      setLEDs(CHOICE_OFF);
    }

Essas funções coordenam o som e a luz para cada botão, criando o efeito visual e auditivo característico do Genius.

# Passo a passo do projeto

Principais etapas realizadas para desenvolver e implementar o jogo Genius:

Arduino Uno
Protoboard
LEDs
1º passo

Conecte os quatro LEDs coloridos (vermelho, verde, azul e amarelo) na protoboard. Ligue cada LED ao Arduino com um resistor apropriado. Objetivo: Criar as luzes que o jogo usará para mostrar a sequência.

Botões
Entrada do jogador
Protoboard
2º passo

Instale quatro botões, cada um correspondente a um LED. Conecte os botões ao Arduino usando resistores pull-down ou pull-up. Objetivo: Permitir que o jogador digite a sequência exibida pelo jogo.

Buzzer
Som
Feedback
3º passo

Conecte um buzzer ao Arduino para emitir sons associados a cada cor. Programe tons diferentes para cada LED. Objetivo: Criar feedback sonoro para deixar o jogo mais intuitivo.

Lógica do jogo
Sequência
Arduino
4º passo

Programe o Arduino para gerar uma sequência aleatória de LEDs e sons. Crie funções para exibir a sequência e captar a resposta do jogador. Objetivo: Desenvolver a mecânica principal do jogo.

Comparação
Validação
5º passo

Programe o Arduino para comparar a entrada do jogador com a sequência gerada. Trate casos de acerto, erro e avanço de nível. Objetivo: Garantir que o jogo responda corretamente às ações do jogador.

Montagem final
Organização
Demonstração
6º passo

Organize LEDs, botões e buzzer de forma compacta e visualmente clara. Verifique se todos os cabos e conexões estão firmes. Objetivo: Finalizar o protótipo pronto para testes e apresentação.

# Maiores dificuldades

Principais desafios enfrentados durante o desenvolvimento do projeto Genius em Arduino

## Sincronização entre LEDs e Sons

Um dos principais desafios foi sincronizar as luzes dos LEDs com os sons emitidos pelos buzzers. Diferenças no tempo de execução causavam atrasos perceptíveis entre os estímulos visuais e sonoros. A solução envolveu ajustar os delays e otimizar a temporização das funções, garantindo uma resposta precisa e fluida durante o jogo.

## Leitura dos Botões

Durante os testes, alguns botões apresentavam leituras instáveis ou repetidas devido a ruídos elétricos. Implementamos a técnica de debounce no código e revisamos as conexões físicas na protoboard, o que estabilizou as leituras e assegurou que cada toque fosse registrado corretamente.

## Limitação de Pinos do Arduino

Com múltiplos LEDs, botões e buzzers conectados, o número de pinos disponíveis no Arduino Uno tornou-se limitado. Para contornar essa limitação, otimizamos o uso das portas digitais e revisamos o mapeamento de pinos, evitando conflitos e garantindo que todos os componentes funcionassem de forma estável e integrada.

# Autores do Projeto

"Desenvolver o jogo Genius em Arduino foi uma experiência incrível! Pude compreender melhor como a lógica, os componentes eletrônicos e o código se conectam para criar um sistema interativo e funcional. Foi muito satisfatório ver o projeto tomando forma a cada teste."

João Lucas

Programador e Lógica do Sistema

"Trabalhar no projeto Genius me ajudou a aprimorar habilidades de montagem e organização de circuitos. Aprendi a importância de testar cada conexão e garantir que todos os componentes funcionassem em harmonia com o Arduino."

Raysa Queiroz

Montagem e Organização de Circuitos

"Participar do desenvolvimento do Genius foi uma grande oportunidade de aprendizado. Fiquei responsável pelos testes e otimização do sistema, garantindo que o código e o circuito funcionassem de forma sincronizada e estável."

Fernando Araújo

Testes e Ajustes Técnicos

"O projeto foi um grande desafio e, ao mesmo tempo, uma experiência divertida. Contribuí na parte de programação e na lógica de funcionamento do jogo, aprendendo muito sobre controle de tempo, respostas dos botões e integração de hardware."

Mateus Henrique

Programação e Integração de Componentes

"Participar do projeto Genius foi muito gratificante. Trabalhei na documentação e no acompanhamento final dos testes, garantindo clareza e organização no processo. Foi incrível ver o resultado de um trabalho feito em equipe."

Daniel

Documentação e Validação Final

"Contribuir com o projeto Genius foi uma experiência muito positiva. Trabalhar com a construção do arduíno exigiu muita paciência, foco e perseverança. Ver o trabalho em equipe gerar excelentes resultados foi fantástico."

Augusto

Organização e Controle do Projeto