Robson Vitor Rezini Protótipo de game embarcado em plataforma ARM dotado de acelerômetro e Miguel Alexandre Wisintainer Robson Vitor Rezini Brusque – Santa Catarina Brasil [email protected] Resumo Miguel Alexandre Wisintainer Blumenau – Santa Catarina Brasil [email protected] Este artigo apresenta o desenvolvimento de um protótipo de game embarcado em plataforma Acorn RISC Machine (ARM) dotado de acelerômetro. São abordadas informações sobre o dispositivo acelerômetro utilizado e sua função para com o protótipo, informações sobre o processador ARM e seu kit de desenvolvimento, suas principais características e limites, informações sobre a Integrated Development Enviroment (IDE) e a linguagem computacional utilizada. É desenvolvido o protótipo do game baseado no game clássico Tetris, levando em consideração seus limites e a utilização do acelerômetro para a detecção dos movimentos, que serão utilizados pra controlar os movimentos das peças do jogo, sem o auxilio de qualquer outro botão. Palavras-Chave: Acelerômetro. Software embarcado. Microcontrolador ARM. Abstract This article presents the development of a prototype board game on the platform Acorn RISC Machine (ARM) with the accelerometer. They discussed details on the accelerometer used and its function to the prototype, information on the ARM processor and development of their kit, their main characteristics and limits, information on the Integrated Development Environment (IDE) and the computer language used. It developed the prototype of the game based on the classic Tetris game, taking into account its limits and use the accelerometer to detect movements, which will be used for controlling the movements of parts of the game without the aid of any other button. Keywords: Accelerometer. Software board. ARM Microcontroller. 1 Introdução 1 Já é de conhecimento comum a todos que a indústria de jogos tem crescido muito nos últimos anos, atingindo a todas as faixas etárias, movimentando altos valores financeiros e gerando muita lucratividade para os seus investidores. Isso motivou um investimento em pesquisas de novas tecnologias de software e hardware para desenvolverem seus jogos, estreitando ainda mais a distância entre a realidade e o mundo virtual dos jogos. 1 Robson Vitor Rezini Protótipo de game embarcado em plataforma ARM dotado de acelerômetro e Miguel Alexandre Wisintainer Após uma pesquisa, a DFC Intelligence [a DFC Intelligence é uma empresa de pesquisa e consultoria de mercado focada na área de jogos] concluiu que haverá um crescimento significativo na indústria de jogos eletrônicos nos próximos anos. Até 2011, a indústria mundial que valia US$ 29 bilhões até 2005, passará a valer aproximadamente US$ 44 bilhões [1]. Com essas tecnologias novas, surgiu o acelerômetro, que capta movimentos e age aos estímulos do jogador. A utilização destes componentes na área de entretenimento é muito atual. Sua utilização pode ser muito extensa. Com a captura dos movimentos é possível utilizá-lo para navegação em menus, controle de objetos do mundo virtual como bola, jogador e peças entre outros, e até outras aplicações que podem ir além do mundo dos jogos, como detecção de terremotos, detecção de impacto em discos rígidos e outros dispositivos comuns do cotidiano. Os acelerômetros já estão presentes em alguns celulares e consoles de videogames de última geração, como o smartphone Nokia N95, o console Nintendo Wii e o celular iPhone da Apple. Tentando contribuir para a popularização e conhecimento do acelerômetro, surge a idéia de prototipar um game utilizando-o como principal meio de interface entre o jogador e o jogo, mostrando assim suas funcionalidades e seus benefícios, não só ao mundo dos jogos, mas também a outras aplicações que necessitam de uma solução na qual o mesmo se encaixe. 1.1 Escopo e Problema Como visto anteriormente, as indústrias estão investindo em novas tecnologias como o acelerômetro para atrair mais jogadores e como o mesmo está presente na área de atuação da Ciência da Computação, é muito importante o desenvolvimento e a pesquisa deste componente para indivíduos que atuam nesta área, não deixando assim o mercado se desenvolver sem a pesquisa acadêmica. Como são altos os recursos investidos, deve-se incentivar as pesquisas acadêmicas nestas tecnologias, para atrair uma parte deste recurso diretamente ao meio acadêmico, visando o desenvolvimento do conhecimento. Agora, focando diretamente no objeto alvo deste trabalho, o acelerômetro, observa-se que não se trata de algo com conhecimento difundido em meio acadêmico, se trata de um novo recurso da área de eletrônica, ainda pouco explorado nas instituições de ensino e um recurso que, pelas suas características, tem um potencial de uso quase ilimitado, dependendo unicamente da criatividade do desenvolvedor na sua utilização. Será utilizado o kit STM3210B-PRIMER da STMicroleletronics, um kit de desenvolvimento baseado no processador STM32 ARM Cortex – M3, que possui um LCD de interface gráfica colorida, conexão USB, buzzer, acelerômetro e utiliza programas desenvolvidos em C/C++, itens que beneficiam o desenvolvimento de jogos. Essa escolha também se deve a própria STMicroeletronics desenvolver os acelerômetros do console da Nintendo, o Wii, e do Iphone da Apple provando desta forma que seus produtos são precisos e de boa qualidade. 1.2 Objetivos O objetivo deste artigo é desenvolver um protótipo de jogo em plataforma ARM que utilize o componente eletrônico acelerômetro como principal interface de interação entre o jogador e o jogo. Os objetivos específicos são: a) identificar um jogo que possua características compatíveis com o dispositivo STM3210BPRIMER. b) adequar o roteiro e as regras do jogo selecionado para compatibilizá-lo com as limitações do dispositivo STM3210B-PRIMER; c) portar o jogo selecionado para a plataforma ARM do dispositivo STM3210B-PRIMER. d) traduzir a informação do acelerômetro em informação útil ao jogo selecionado. e) utilizar o acelerômetro como única forma de navegação no jogo. 2 Fundamentação Teórica Relacionamos aqui, os conceitos mais importantes, que servirão como base para o desenvolvimento do protótipo. São descritas as principais características de um microcontrolador ARM, do kit STM3210BPRIMER e do acelerômetro e apresentados alguns trabalhos correlatos. 2.1 Microcontrolador ARM Os microcontroladores ARM são um marco na indústria de semicondutores. Nunca uma arquitetura foi tão rapidamente difundida e maciçamente fabricada como a arquitetura ARM. Parte deste sucesso se deve às suas características atraentes que incluem um design simples, alta velocidade, grande diversidade de modelos e fabricantes e quantidade de software disponível, entre Robson Vitor Rezini Protótipo de game embarcado em plataforma ARM dotado de acelerômetro e Miguel Alexandre Wisintainer outras. Não é por acaso que esses microcontroladores estão presentes na maioria dos equipamentos portáteis vendidos atualmente, incluindo telefones celulares, computadores de mão (PDAs), MP3 players, videogames etc. [2]. No caso do microcontrolador ARM STM32F103B6 presente no kit de desenvolvimento, a STMicroeletronics [3] descreve suas características como, um microcontrolador ARM baseado na família Cortex-M3 de 32 bits, com 72MHZ de freqüência máxima, com até 128 Kbytes de memória flash, nove interfaces de comunicação diferentes, uma delas sendo USB 2.0 e sete timers internos. De modo geral, os microcontroladores ARM, são processadores de pequeno porte e baixo custo, que possuem em um único chip o processador, os registradores, a memória, as interfaces e os barramentos necessários para o seu funcionamento. 2.2 Acelerômetro A detecção de movimento em dispositivos é possível graças ao acelerômetro, um dispositivo eletromecânico com tamanho e custos reduzidos. No kit, o acelerômetro LIS3LV02DL é utilizado, seu funcionamento baseia-se em pequenos sensores que, segundo a STMicroeletronics [4], é feito de uma tecnologia microscópica, conhecida como Micro Electro Mechanical Systems (MEMS), onde os mesmo possuem pequenas estruturas de silício, representadas na Figura 1, que são imersas em um substrato presentes em três pontos do acelerômetro chamados âncoras, essas estruturas são livres de movimentos, movendo-se para qualquer direção, de acordo com a movimentação do acelerômetro. Quando uma aceleração for aplicada aos sensores, as estruturas se deslocam no substrato, causando um desequilíbrio elétrico entre as hastes, esse desequilíbrio é medido aplicando-o como um pulso elétrico em um capacitor preso a estrutura, e depois se lê a carga do mesmo, essa carga é muito baixa, mas mesmo assim possui limites para não danificar os componentes. Existe ainda um amplificador de sinais, responsável por amplificar os pulsos elétricos. Figura 1: Foto microscópica dos sensores do acelerômetro LIS3LV02DL. 2.2 Kit STM3210B-PRIMER O STM3210B-PRIMER é um kit de desenvolvimento inovador e de baixo custo, concebido para fornecer divertimento e introdução às características dos microcontroladores ARM Cortex – M3 [5]. Este kit de desenvolvimento é muito útil para pessoas que queiram iniciar o estudo dos acelerômetros, já que possui vários itens que auxiliam no desenvolvimento de aplicações e uma interface USB para comunicação com outros dispositivos. STMicroeletronics [6] descreve seu kit, representado pela Figura 2, como sendo um pacote de desenvolvimento inovador e divertido que fornece ferramentas de introdução aos microcontroladores ARM Cortex – M3, possuindo comunicação USB com o computador e softwares e ferramentas de edição de códigos desenvolvidos pela Raisonance baseados na linguagem C++. Figura 2: Kit de desenvolvimento STM3210B-PRIMER. Robson Vitor Rezini Protótipo de game embarcado em plataforma ARM dotado de acelerômetro e Miguel Alexandre Wisintainer 2.3 Trabalhos Correlatos Existem atualmente alguns hardwares e softwares desenvolvidos para utilizar o acelerômetro, a maioria ainda presente na área de entretenimento. Como esses hardwares e softwares são novos e estão tendo muito sucesso em suas vendas, isso nos leva a crer que esta área tem muito a ganhar com o uso do acelerômetro. 2.3.1 Nintendo Wii O Nintendo Wii é um console de videogame de última geração que possui uma característica diferente dos consoles de outros fabricantes. O seu controle, o Wii Remote, representado na Figura 3, possui acelerômetros para a detecção de movimentos, aumentando a interatividade com o jogo. Figura 4: O iphone, sendo rotacionado e mudando a posição de sua tela. 3 Desenvolvimento Figura 3: Wii Remote, controle do console Nintendo Wii, que possui um acelerômetro integrado. 2.3.1 Iphone O iPhone, representado na Figura 4, é um novo e revolucionário celular que permite fazer uma chamada com um simples toque em sua tela, é um celular que vem fazendo muito sucesso desde seu lançamento. No iPhone o acelerômetro ainda é um dispositivo que não chama muito a atenção, pois o celular possui muitos outros itens que despertam mais a atenção dos usuários, mas aos poucos vão sendo desenvolvidas novas aplicações e o uso deste dispositivo pode se tornar mais presente no aparelho. Basicamente no Iphone o acelerômetro é utilizado para verificar em que posição o celular está, em posição de retrato ou em posição de paisagem. Quando o acelerômetro detecta a mudança da posição da tela, ele gera uma interrupção e faz o iPhone ajustar instantaneamente a tela de acordo com a nova posição. Como o principal objetivo deste artigo foi desenvolver um protótipo de game que utilize o acelerômetro como meio de navegação do jogador, foi desenvolvido um protótipo do game Tetris para o kit de desenvolvimento escolhido, a Figura 5 ilustra o game, onde o acelerômetro fica com a tarefa de captar os movimentos do usuário para movimentar as peças do jogo. Este game diferenciou-se de outros possíveis candidatos à implementação por se utilizar do acelerômetro sem modificar as regras básicas e clássicas do jogo. Este game baseia-se em encaixar as peças de diferentes formatos que surgem, uma de cada vez, no alto da tela, na base da tela de forma a preencher totalmente as linhas horizontais, não deixando nenhum espaço livre entre as peças. Quando uma linha é preenchida, a mesma desaparece da tela e o jogador soma pontos, o jogo termina quando as linhas incompletas se empilham até o topo da tela do jogo e o usuário não tem mais vidas para continuar a jogar. continuar a jogar. Robson Vitor Rezini Protótipo de game embarcado em plataforma ARM dotado de acelerômetro e Miguel Alexandre Wisintainer Arquivo Figura 5: O jogo Tetris Inicialização e gerenciamento do botão. buzzer.c Funções dedicadas ao buzzer, com suporte a sons no formato RTTTL. circle_api.h Biblioteca de controle geral do kit de desenvolvimento. draw.c Utilitários de desenho. lcd.c Driver LCD para ST7637. led.c Gerenciamento dos LEDs. mems.c Inicialização e gerenciamento do acelerômetro. menu.c Gerenciador geral dos menus e caixas de diálogo. menu_app.c Funções gerais para lidar com o menu da aplicação. menu_settings.c Gestão de um menu. pointer.c Diversos utilitários para gerenciamento dos ponteiros. rtc.c Gestão e utilitários do relógio interno. Util.c Funções úteis pata o kit, como conversão de inteiro para string. 3.1 Ferramentas e Codificação Para desenvolver o código fonte da aplicação, foi escolhida a IDE Ride7, isso se deve à ele ser a única voltada á família STM32 de microcontroladores ARM, prover todas as ferramentas necessárias para o desenvolvimento do jogo e por utilizar a linguagem de programação C/C++, bastante popular e muito utilizada em meio acadêmico e profissional. Outro motivo que levou a escolha dessa IDE, foi que a mesma é desenvolvida pela da mesma fabricante do kit de desenvolvimento (hardware), com isso diminuímos a chance de ocorrer inconsistências e incompatibilidades entre a IDE e o kit de desenvolvimento (hardware). Esta IDE, traz um padrão de codificação e documentação especificados pelo fabricante, que se seguido, permitira a postagem deste protótipo no fórum do próprio fabricante que aborda o kit de desenvolvimento. Resolveu-se seguir esta metodologia padronizada afim de manter uma qualidade e utilizar mais tarde o fórum do fabricante como ferramenta de testes, pois os códigos fontes e arquivos executáveis são todos submetidos à avaliação dos programadores do fabricante e posteriormente divulgados a comunidade de desenvolvedores. Acompanhando o kit de desenvolvimento, vem a documentação e a Firmware do mesmo, com APIs já configuradas para trabalhar com os componenetes do kit, esta API se chama Circle-OS. Com ela pode-se acessar informações do acelerômetro, clock de processamento, eventos e configurações dos botões e escrita do LCD. A Tabela 1 ilustra os arquivos e suas funções na API. Descrição button.c Tabela 1: Tabela com os arquivos da API Circle-OS. A partir desta API, foi possível gerenciar o comportamento do acelerômetro, utilizando o arquivo “mems.c”, sendo o mais importante para o desenvolvimento do protótipo, pois fornece informações sobre o acelerômetro através da função “MEMS_GetInfo( )”, essa informação é guardada em um tipo de estrutura da própria biblioteca chamada “tMEMS_Info” que pode ser acessada em qualquer momento na aplicação, desde que declarada, conforme código fonte da Figura 6. Robson Vitor Rezini Protótipo de game embarcado em plataforma ARM dotado de acelerômetro e Miguel Alexandre Wisintainer /*************************************************************** * Function Name : Application_Ini * Description : Initialization function of Circle_App. This * Input : None * Return : MENU_CONTINUE_COMMAND ***************************************************************/ enum MENU_code Application_Ini ( void ) { POINTER_SetMode(POINTER_OFF); if(strcmp(UTIL_GetVersion(), NEEDEDVERSION) < 0) { return MsgVersion(); } Initial_MEMS_X = 0; Initial_MEMS_Y = 0; MEMS_GetInfo()->DoubleClick = 0; pMEMS_info = (MEMS_GetInfo()); LCD_SetScreenOrientation ( V12 ) ; VariableInit(); DesignInit(); } return MENU_CONTINUE_COMMAND; Figura 6 : Exemplo de uso da função MEMS_GetInfo(). A partir dessa informação pode-se começar a trabalhar com o acelerômetro, traduzindo as variáveis e seus valores para um significado usual no protótipo, como mostra a Figura 7. //Get information from the accelerometer Current_MEMS_X = pMEMS_info -> OutX_F4 >> 2; Current_MEMS_Y = pMEMS_info -> OutY_F4 >> 2; deltaX = Current_MEMS_X - Initial_MEMS_X; deltaY = Current_MEMS_Y - Initial_MEMS_Y; //Check the direction of movement if(abs(deltaX)>abs(deltaY))//more X than Y { if(Current_MEMS_X>0) Direction=2; if(Current_MEMS_X<0) Direction=4; } if(abs(deltaX)<abs(deltaY))//more Y than X { if(Current_MEMS_Y>0) Direction=3; if(Current_MEMS_Y<0) Direction=1; } Figura 7 : Exemplo do uso das informações do acelerômetro. A primeira parte do código da Figura 7 utiliza duas variáveis de locomoção do acelerômetro, a “OutX_F4” e a “OutY_F4”, que trazem a posição dos acelerômetros nos eixos X e Y respectivamente, no momento em que são atribuídos. Com estes valores, podemos calcular as quanto foi a movimentação de X e Y em relação á posição inicial de X e Y, obtendo assim um valor delta, representado pelas variáveis “deltaX” e “deltaY”. Como no protótipo implementado queria-se somente saber para qual direção o jogador moveu o kit (para cima, ou para baixo, ou para o lado esquerdo ou direito) a fim de mover as peças do game, resolveu-se calcular Robson Vitor Rezini Protótipo de game embarcado em plataforma ARM dotado de acelerômetro e Miguel Alexandre Wisintainer qual a direção que obteve mais deslocamento, sendo assim calculou-se se X ou Y obteve maior movimentação, sabendo assim se a movimentação foi horizontal (eixo x) ou vertical (eixo y), após isso bastou apenas sabe se os valores eram negativos ou positivos para designar se o movimento foi para o lado esquerdo ou direito, no caso da movimentação horizontal, ou foi para cima ou para baixo, no caso da movimentação vertical. Esse trecho do código de checagem de direção e movimentação foi a parte mais importante do trabalho pois com isso pode-se saber qual foi a intenção do jogador e quais as medidas devem-se ser tomadas para mover ou alterar o status do jogo. Com as funções de captura de movimentos implementadas, bastou-se codificar o game e suas funções de rotação, movimentação, desenho de imagens, controle de pontos e outras mais pertinentes ao jogo em si mesmo e não ao uso do acelerômetro, por isso não se faz necessário a sua documentação neste artigo. Também é possível achar inúmeras implementações do jogo Tetris na internet para diversas plataformas, tendo-se uma idéia geral de sua implementação. 3.2 Resultados e Discussão Para demonstrar e testar na prática o funcionamento do protótipo resolveu-se submeter o mesmo à avaliação dos técnicos, que não é reportada ao desenvolvedor, e dos usuários do fórum do fabricante do kit que hoje conta com trinta e seis projetos cadastrados e quatro mil setecentos e oitenta e três usuários cadastrados , com isso tem-se uma validação real do protótipo, visando uma qualidade boa de código, funcionamento e jogabilidade, provando que o uso do acelerômetro no desenvolvimento do game foi justificado, e que o mesmo ocorreu de maneira a não prejudicar a jogabilidade, trazendo mais benefícios e desafios ao jogador. Após submeter o protótipo ao fórum do fabricante, teve-se uma grande surpresa. Além de o projeto ter passado pela avaliação dos programadores do fabricante, o mesmo apareceu como destaque na página inicial do fórum, apresentando a todos o game como projeto destaque. Nessa situação, começaram a aparecer inúmeros downloads do mesmo, e visitas à página de documentação e download do protótipo. Após duas semanas presente no fórum do fabricante, o protótipo de game Tetris desenvolvido já tinha a melhor avaliação de seus jogadores, ou seja, foi o projeto melhor avaliado, liderando a lista de projetos mais populares do fórum. O endereço do fórum é http://www.stm32circle.com/. 4 Conclusão Pode-se concluir que se conseguiu chegar aos objetivos propostos, desenvolvendo um game em plataforma ARM que utilize o acelerômetro como interface de captação de movimento, provando que seu uso contribui ainda mais para a jogabilidade do game. Conclui-se também que o acelerômetro se trata de um dispositivo multiuso com infinitas aplicações, atuando em várias áreas da informática, como entretenimento, segurança, portabilidade e outras. Como o seu uso é abrangente espera-se que surjam cada vez mais aplicações e tecnologias que o utilizem. O meio acadêmico tem muito conhecimento a desenvolver acerca do mesmo, conseguindo assim atrair investimentos acadêmicos criando tecnologias novas. O desenvolvimento deste jogo provou que até pequenas aplicações e jogos podem se fazer do uso do mesmo atraindo mais usuários e jogadores, como provou o fórum do fabricante, onde o jogo obteve sucesso e popularidade muito rapidamente. Mesmo o game não sendo um game de alta tecnologia gráfica com interfaces 3D e uso de inteligência artificial, com o uso do acelerômetro, pode-se conseguir fazer com que o mesmo chame a atenção dos jogadores. Idéias de novas aplicações que o utilizem surgem a toda hora, pois a imaginação é o limite de seu uso. Aplicações como dispositivos de segurança anti-choque em HD’s, dispositivos de checagem de nível de inclinação, coordenação de movimentos, dispositivos de equilíbrio para robôs bípedes são só alguns exemplos de aplicações futuras que podem ser implementadas utilizando o acelerômetro como sensor. O crescimento do seu uso e tecnologia, vai só depender do desenvolvimento de novas pesquisas, que não param mais de surgir. Referências [1] PORTAL TERRA. Indústria mundial de games valerá US$ 44 bilhões. [S.l.], 2006. Disponível em: <http://games.terra.com.br/interna/0,,OI1162241 -EI1702,00.html>. Acesso em: 25 mar. 2008. [2] PEREIRA, Fábio. Tecnologia ARM: microcontroladores de 32 bits. São Paulo: Érica, 2007. [3] STMICROELETRONICS. STM32F103x6 STM32F103x8 STM32F103xB: performance line, ARM-based 32-bit MCU with flash, USB, CAN, seven 16-bit timers, two ADCs and nine Robson Vitor Rezini Protótipo de game embarcado em plataforma ARM dotado de acelerômetro e Miguel Alexandre Wisintainer communication interfaces. [S.l.], 2008b. Disponível em: <http://www.st.com/stonline/products/literature/d s/13587.pdf >. Acesso em: 26 mar. 2008. [4] STMICROELETRONICS. LIS3LV02DL: MEMS inertial sensor 3-axis - ±2g/±6g digital output low voltage linear accelerometer. [S.l.], 2008a. Disponível em: <http://www.st.com/stonline/products/literature/d s/12094/lis3lv02dl.pdf>. Acesso em: 26 mar. 2008. [5] RAISONANCE. STM32-primer: fun, easy introduction kit for STM32 microcontrollers. [S.l.], 2007. Disponível em: <http://elmicro.com/files/raisonance/stm32primer-manual.pdf>. Acesso em: 01 abr. 2008. [6] STMICROELETRONICS. STM32 primer. [S.l.], 2007a. Disponível em: <http://www.st.com/mcu/contentid-105-110STM3210B_PRIMER.html>. Acesso em: 01 abr. 2008.