Uma Sinopse dos Projetos Finais da Turma A do Segundo Semestre de 2015


Jogo Snake em Matriz de LEDs
Projetistas: George Gondim Ribeiro e Rafael Culber Marques da Cunha

A equipe desenvolveu o jogo eletrônico Snake, utilizando a matriz 8x8 de RGB leds como tela do jogo. É um jogo que tem diversas versões em video-games, nos computadores e em alguns celulares.

Um dos problemas que a equipe enfrentou foi o fato de que os anodos dos 8 leds de uma mesma linha são curto-circutados. Portanto, não se pode por exemplo exibir concomitantemente os leds de um diagonal. Para poder exibir padrões formados pelos leds em diagonal, a equipe explorou a persistência da visão e fez varredura periódica das colunas na frequência em que a visão não consegue mais distinguir variações. Outro problema que eles resolveram foi como assegurar a intensidade do brilho dos leds quando se reduz o tempo em que eles fiquem de fato energizados em decorrência da estratégia de varredura. Foi elaborado um circuito com 2 transistores npn e um transistor pnp para garantir que a corrente nos leds não seja menor que 10mA quando conduzem. Finalmente, a equipe descartou a alternativa de ter uma tela colorida para reduzir a quantidade de ligações de 3 leds/ponto pela de 1 led/ponto.

Servidor de arquivos bluetooth
Projetistas: Alex Lucchesi de Oliveira e Daniel Meneguim Barbosa

Inicialmente a ideia do projeto era ser um servidor de arquivos que, ao estabelecer uma conexão via bluetooth, transmitisse os arquivos localizados na raiz do cartão micro SD para o dispositivo que estabeleceu a conexão. Esta ideia foi abandonada quando o projetista Alex entendeu que para utilizar a tecnologia de bluetooth o dispositivo precisa ser compatível com um dos perfis de bluetooth. Os perfis são definidos em cima de Bluetooth Core Specification e a escolha do perfil depende da comunicação bluetooth entre os dispositivos e dos serviços desejados. Ele até pesquisou sobre o perfil GOEP (Generic Object Exchange Profile) mas avaliou que seria inviável implementá-lo em duas semanas. Decidiu-se, então, criar, editar e remover um arquivo do cartão microSD.

A equipe tomou como base o componente Freedom_FatFs disponível no Processor Expert para implementar o sistema de arquivos FAT (File Allocation Table). O componente Freedom_FatFs, por sua vez, foi implementado em cima dos componentes FatFs e e SD_card. Segundo o relato do projetista Daniel, eles encontraram muitos problemas para adaptar o código de Freedom_FatFs desenvolvido com uso da plataforma CodeWarrior 10.3 para a versão 10.6 instalada no nosso laboratório, embora o modelo do Kinetis seja o mesmo. O aplicativo que eles conseguiram implementar é um que não contém informação de tempo acerca os arquivos editados. Embora não concluído na forma esperada, este projeto proporcionou à equipe dois importante aprendizados. O primeiro é que para implementar algo personalizado é importante ter domínio de "bare metal code" a fim de reutilizar os códigos gerados pelo Processor Expert. Nem sempre é trivial reutilizar os componentes disponíveis para criar um novo componente. E o segundo é por trás das comunicações que se iniciam com um toque de dedo pode-se esconder diversas camadas complexas de tecnologias.

Desafio em Operações Aritméticas
Projetistas: Alisson Poli de Carvalho e Caio Cruvinel Finardi

O principal objetivo deste projeto é criar um jogo educativo, através do qual o jogdor treina a sua capacidade em solucionar as operações aritméticas. A ideia é interessante, mas a sua implementação ficou aquém da expectativa. Em primeiro lugar, as equações são totalmente previsíveis, pois elas são exatamente as mesmas entre os jogos. Depois de umas cinco jogadas já se sabe a sequência de soluções. Esta previsibilidade é uma característica indesejável em qualquer jogo. Em segundo lugar, esporadicamente o programa inicia com uma série de interrupções sem que nenhuma tecla seja pressionada. Em relação à previsibilidade, a equipe entendeu que se pode utilizar o gerador de números randômicos para gerar diferentes valores em cada jogada. E, em relação às interrupções espontâneas iniciais geradas pelo keypad, a equipe aprendeu que ao configurar um pino para ser sensível por nível (0), o sistema geraria uma sequência de interrupções se o sinal no pino fosse inicializado com 0.

Car Parking System
Projetistas: Pedro Corrêa Bueno de Castro e Felipe Chicarelli Nunes

Inspirado no sistema anti-colisão do seu carro, o projetista Pedro sugeriu desenvolver um sistema que auxilie usuários na hora de estacionar o seu carro. O sistema possui dois modos de operação: medição e ajuste de posição. A mudança entre os modos se dá por meio de um click de um joystick. As distâncias entre o sensor e um obstáculo são exibidas no LCD. Para controlar a orientação do sensor, ele foi montado sobre uma placa e esta colocada no eixo do motor de passo 28YBT-48, de forma que, movimentando a vara central do joystick, a linha de visada do sensor é alterada. Vale comentar que a confecção do sistema giratório foi uma obra do projetista Pedro.

A equipe percebeu dois problemas ao longo do desenvolvimento do sistema: como mapear os valores analógicos do sinal de joystick e como aumentar o torque do motor quando aumenta a sua carga (sensor). O primeiro problema foi resolvido com a definição de dois limiares para joystick. Quando o valor estiver abaixo do limiar menor gira-se para direita e quando o valor estiver acima do limiar maior são dados passos para esquerda. E para o segundo problema, a equipe teve que aumentar o torque do motor operando com 4 fases. O conhecimento sobre motores de passo foi importante para chegar à segunda solução.