Universidade Tecnológica Federal do Paraná – UTFPR Departamento Acadêmico de Eletrônica – DAELN Departamento Acadêmico de Informática – DAINF Engenharia de Computação Oficina de Integração 3 (IF66J) – S71 – 2015/2 Relatório Técnico Xilofone sintético didático André Eleutério – [email protected] Christiano Oishi de Carvalho – [email protected] Claudio Toledo Filho – [email protected] Dezembro de 2015 Resumo É normal que um número grande de pessoas tenha dificuldade para ingressar no mundo da música, devido à alta complexidade de aprendizado dos instrumentos musicais. Neste trabalho, apresenta-se um xilofone sintético com função didática, que ensina determinadas músicas através de elementos visuais. Foi desenvolvido um sistema que permite o usuário ter um primeiro contato com a música. O xilofone construído utiliza sensores piezoelétricos para detectar a interação com as teclas e LEDs como referência visual. Optou-se pela construção da estrutura em madeira, com teclas de acrílico e um alto-falante acoplado. Além disso, foram adicionados um controle de volume e uma chave que aciona uma distorção musical. Para que o usuário tenha uma maior interatividade com o xilofone, uma conexão Bluetooth com um dispositivo móvel foi utilizada. O próprio usuário poderá selecionar as músicas, gravar o que está sendo tocado e compartilhar com os amigos novas músicas criadas por ele. 1 Introdução O xilofone projetado pela equipe Ultron é um equipamento muito útil para o aprendizado musical. Sua estrutura em madeira e acrílico o torna portátil e atrativo visualmente. Através do acionamento de LEDs é possível aprender e tocar qualquer música que tenha sido enviada via Bluetooth de um aparelho celular. Como o xilofone se trata de um instrumento de percussão, foram escolhidos os sensores piezoelétricos, por transformarem energia da vibração em um sinal elétrico [HOL02]. Para tornar o aprendizado mais intuitivo, diferentes cores de LEDs foram inseridos nas teclas feitas de acrílico. A comunicação via Bluetooth permite ao xilofone se comunicar com qualquer celular que tenha suporte à essa tecnologia e ao aplicativo instalado. Alimentando todo o sistema com uma bateria de 5V, pode-se tocar o xilofone em qualquer lugar. O diagrama da Figura 1 apresenta a visão geral do xilofone didático desenvolvido, denominado Ultron. 1 Relatório Técnico: Ultron Figura 1: Diagrama com a visão geral do xilofone 2 Relatório Técnico: Ultron 3 1.1 Requisitos 1.1.1 Requisitos Funcionais Tocar em um alto-falante o som correspondente à tecla tocada do xilofone Reproduzir uma determinada música enviada pela estação base usando o acendimento de LEDs Gravar o que foi tocado na estação base Compartilhar a música tocada para que os amigos do usuário possam aprender a tocar a música gravada Selecionar no aplicativo a dificuldade da música (fácil ou difícil) Atribuição de uma nota de acordo com os acertos do usuário Acendimento dos LEDs da tecla quando ela for tocada Variação da intensidade dos LEDs de acordo com a intensidade do toque Variar a intensidade dos LEDs da tecla dependendo do tempo de espera para ela ser tocada (quando estiver na forma de aprendizagem) Reproduzir som no formato WAVE Ter uma chave que aplica distorção Comprido Comprido Comprido Comprido Comprido Comprido Comprido Contornado Contornado Não comprido Não comprido Tabela 1: Requisitos funcionais do sistema 1.1.2 Requisitos Não Funcionais Captura da vibração das teclas usando o sensor piezoelétrico Comunicação entre a estação base e o sistema embarcado utilizando a tecnologia Bluetooth. Gravar arquivos texto no Android. Banco de dados online Comunicação entre banco de dados online e Android via Internet Tabela 2: Requisitos não funcionais do sistema Comprido Comprido Comprido Comprido Comprido Relatório Técnico: Ultron 4 2 Principais materiais e recursos utilizados 2.1 Arduino O Arduino é o que chamamos de plataforma de computação física ou embarcada. O seu hardware é um projeto simples de hardware livre para o controlador, possuindo um processador Atmel AVR e suporte de entrada/saída embutido [MCR11] . O seu software utiliza uma linguagem de programação padrão, baseada na linguagem C. O modelo utilizado no projeto é o Arduino Mega 2560, com as especificações: Microcontrolador Tensão de operação Tensão de entrada Portas digitais Portas PWM Portas analógicas Memória Clock Atmega2560 5V 7-12V 54 15 16 Flash de 256Kb 16MHz Tabela 3: Especificação Arduino Mega 2560 2.2 Android O Android é um sistema operacional baseado em Linux e desenvolvido pela empresa Google. A sua interface com o usuário é baseada na manipulação direta, sendo desenvolvido para dispositivos móveis com tela sensível ao toque. O código do sistema é disponibilizado pelo Google sob licença de código aberto. O desenvolvimento da aplicação é primeiramente em linguagem Java, usando o ambiente de desenvolvimento do software Android (SDK) [AND], que inclui um depurador, uma biblioteca, um emulador, documentação, códigos exemplos e tutoriais, o que facilita o desenvolvimento. 2.3 Sensores Piezoelétricos A captação dos toques nas teclas foi feita através dos sensores piezoelétricos. Os sensores piezoelétricos têm a capacidade converter a força exercida sobre ele por compressão, impacto, ou vibração em um sinal elétrico cujo a amplitude depende da intensidade da força aplicada [PIN]. O sensor piezoelétrico gera níveis de tensão variados de acordo com a força da batida. Fazendo medições experimentais, obtivemos níveis de tensão de aproximadamente 1,5V para uma batida leve e até 12V para batidas mais fortes. Quando a batida é realizada o sensor gera picos de tensão relativamente Relatório Técnico: Ultron 5 altos para a necessidade da aplicação. Como experimentalmente obtivemos resultados satisfatórios, não fizemos o acondicinamento do sinal. Para leitura do sinal elétrico proporcionado pelo sensor, cada um deles foi colocado em paralelo com um resistor de 1 M Ω e, em seguida ligado a uma entrada analógica do Arduino [ARDb]. Na programação bastou utilizar a função "analogRead()"do Arduino que retorna um valor inteiro de 0 a 1023 dependendo da intensidade do sinal. 2.4 Comunicação Bluetooth Toda a comunicação feita entre o Xilofone Sintético e o Aplicativo de gerenciamento foi feita através do Bluetooth. O Bluetooth é um padrão global de comunicação sem fio e de baixo consumo de energia que permite a transmissão de dados entre dispositivos, desde que um esteja próximo do outro. Para o Arduino operar com a comunicação, foi utilizado um módulo que faz todo o gerenciamento Bluetooth que em seguida se comunica de forma serial com o Arduino. A ligação foi feita conforme descrita nas pinagens do módulo e, apenas foi identificado no código quais eram os pinos responsáveis pela comunicação serial, através da biblioteca "SoftwareSerial.h"[PAG]. A plataforma Android possui uma API própria para controlar toda a comunicação Bluetooth. Com os exemplos disponibilizados em [ARDa], uma classe foi elaborada implementando todas as funções básicas da comunicação: procura de dispositivos, conexão com dispositivo, envio de dados e recebimentos de dados. 3 Xilofone sintético 3.1 Estrutura O xilofone sintético desenvolvido é composto por 7 teclas e, abaixo de cada uma, há um sensor que capta a vibração que ocorre quando a tecla sofre um impacto. A base é uma caixa de madeira confeccionada especialmente para o projeto. O topo é removível para ser possível fácil acesso aos circuitos dentro da caixa. As teclas são peças de acrílico que também foram confeccionadas especialmente para o projeto. A informação obtida é processada pelo Arduino que reproduz um arquivo de áudio .wav correspondente ao som da nota musical da tecla. O som é reproduzido por um alto-falante acoplado ao xilofone. A base é uma caixa de madeira para fixar toda parte dos circuitos dentro dela. Os principais componentes da entrutura do xilofone são: 1) 7 teclas de acrílico; 2) 7 sensores piexoelétricos; 3) 4 LEDs de alto brilho para cada tecla; 4) 1 alto-falante; 5) 1 amplificador de áudio. A Figura 2 mostra a estrutura externa e interna do xilofone. Relatório Técnico: Ultron 6 (a) (b) Figura 2: A estrutura (a) externa e (b)interna do xilofone. 3.2 Custo do Projeto A Tabela 1 mostra qual foi o custo aproximado para construção do xilofone, separando os valores por itens. Relatório Técnico: Ultron 7 Tabela 4: Custo para a construção do xilofone ITEM Arduino Mega 2560 Módulo Bluetooth RS-232 HC-05 Módulo SD Sensor piezoelétrico LEDs de alto brilho Alto-falante Bateria 5V Placa de Acrílico Chapa de Compensado Placa de circuito impresso Percloreto de Ferro Outros componentes TOTAL $/UN R$ 72.00 R$ 36.00 R$ 9.00 R$0,41 R$0,60 R$ 6.00 R$ 20.00 R$ 30.00 R$ 40.00 R$ 8.00 R$ 10.00 - QUANTIDADE 1 1 1 10 28 1 1 1 1 1 1 - VALOR R$ 72.00 R$ 36.00 R$ 9.00 R$ 4.10 R$ 16.80 R$ 6.00 R$ 20.00 R$ 30.00 R$ 40.00 R$ 8.00 R$ 10.00 R$ 50.00 R$ 301.90 3.3 Firmware 3.3.1 Atraso por software Para evitar o uso da função "delay()"do Arduino, a qual trava a execução de todos os processos do xilofone num determinado tempo, optou-se pelo uso de um método que simula uma programação paralela, que é descrito através do fluxograma da Figura 3: armazenar em uma variável o tempo em que a função foi executada e chamar a função seguinte apenas quando o tempo atual da máquina, subtraído com tempo armazenado for maior ou igual ao tempo determinado de espera. Figura 3: Fluxograma do método de atraso por software adotado. Essa ideia foi de grande importância para o funcionamento do projeto, pois Relatório Técnico: Ultron 8 era necessário aguardar intervalos de tempos sem que todo o sistema ficasse "travado", podendo então, ler informaçoes dos sensores ou executar outras funções do projeto. 3.3.2 Leitura dos sensores Sabendo que a função "analogRead()"retornava um inteiro de 0 a 1023 dependendo da intensidade da batida, uma taxa de sensibilidade foi definida, a qual, se o valor obtido do sensor ultrapasse essa taxa, o sistema acionaria os comandos da tecla tocada. 3.3.3 Intensidade da batida Dependendo da intensidade da batida o sistema retorna um efeito visual por mais tempo, ou seja, acendendo os LEDS da teclas tocada por mais tempo caso a intensidade da batida ultrapasse um limite da sensiblidade definida. 3.3.4 Ensinando músicas O primeiro método consiste em acender os LEDs da tecla corresponde à nota e, aguardando o usuário tocar a mesma para então, acender a tecla da nota seguinte. Neste modo o sistema percorre o vetor de notas e tempo da música enviado para o xilofone, e em cada iteração acende os LEDs da tecla que deve ser tocada. Quando o usuário toca uma tecla é verificado se a tecla tocada é a correta. Caso contrário, o sistema foi definido para retornar ao começo da música. Se a nota tocada é a correta , os LEDs da tecla da próxima nota são acesos e da atual apagados, repetindo todo o processo de verificação da tecla tocada novamente. Figura 4: Fluxograma primeiro método de aprendizagem O segundo método consiste em acender apenas um LED por vez da tecla que deverá ser tocada conforme o tempo da música. O tempo correto que a tecla deverá ser tocada é quando todos os LEDs estiverem acessos. Desta forma o sistema percorre o vetor de notas e tempos da música pegando as informações Relatório Técnico: Ultron 9 da nota atual e da nota seguinte. Na nota atual ele acende todos os LEDs da tecla correspondente e na nota seguinte acende os 3 primeiros LEDs, em sequência, dependendo do tempo de espera para essa nota. Se duas teclas estiverem totalmente acesas o sistema apaga a primeira que foi acesa , continuando o funciomento para as notas seguintes. Se o usuário errar a tecla, o sistema não faz nada e aguarda o usuário acertar. Caso o usuário acerte, os LEDs da tecla são apagados. Figura 5: Fluxograma segundo método de aprendizagem Nos 2 métodos ao finalizar a música o xilofone retorna um efeito visual de LEDs representando o fim da música e então envia uma informações de desempenho para o aplicativo 3.3.5 Avaliação de desempenho de aprendizado No primeiro método a avaliação consiste e armazenar a quantidade de erro de notas tocadas, e o tempo de espera que o sistema contou até o usuário tocar a tecla correta, quando estava acesa. No segundo método o sistema armazena a quantidade de notas erradas, o tempo de espera que até o usuário tocar a tecla correta e também as notas que ele não tocou, pois nesse modo só é aguardado o toque até a próxima tecla acesa. 3.3.6 Gravando músicas Primeiramente é definido um vetor de inteiros para o armazenamento da música gravada. As posições pares, ressaltando que o índice começa em zero, é para armazenar quais notas são tocadas e as posições ímpares o tempo de espera para a nota seguinte. Essa forma de armazenamento que a sequência da informações gravadas no vetor é a mesma da sequência da música tocada. Relatório Técnico: Ultron 10 Quando uma tecla é pressionada, no momento da gravação, é armazenada na posição atual do vetor a nota referente aquela tecla e, em seguida uma contagem de tempo é iniciada. No instante que uma próxima tecla é tocada, a contagem finaliza e salva na posição seguinte do vetor. Novamente o processo armazenamento anterior é iniciado. Figura 6: Fluxograma do processo de gravação 3.3.7 Reproduzindo gravações Tendo a música gravada, a reprodução ocorre percorrendo o vetor (com a gravação), em que, a cada ciclo é reproduzida a nota contida na posição atual, juntamente com um efeito visual de LEDS sobre a tecla característica. O tempo entre cada nota, é respeitado, sendo que um novo ciclo só é iniciado quando o tempo de espera é concretizado. 3.3.8 Enviando gravações para o aplicativo Após a gravação, o envio só é iniciado quando o xilofone receber o comando referente. O envio foi feito através do método "write()"da biblioteca "Software Serial.h"que transforma a informação passada pelo argumento em forma de bytes para então enviar ao aplicativo. Todas a notas e tempos gravados no vetor são enviados separadamente e em sequência. 3.4 Reprodução do som A equipe desenvolveu duas maneiras de reproduzir som. A primeira foi a utilização de uma função do Arduino, tone(). A segunda foi a montagem de um conversor DA e integração com o sistema para reprodução de arquivos WAVE. Foram desenvolvidas duas alternativas pois o segundo método oferecia riscos de mal-funcionamento que poderiam comprometer o projeto, e era necessário ter uma alternativa. Relatório Técnico: Ultron 11 3.4.1 Reprodução de tons no Arduino O Arduino contém uma função "tone()", com ela é possível mandar para os pinos de áudio ondas que reproduzem tons. Apenas é identificado nos argumentos da função, o pino de sáida de áudio, a frequência da onda e tempo de reprodução(em milisegundos). A função é responsável por configurar o pino de sáida para alta frequência e enviar em um determinado tempo uma onda quadrada com a frequência escolhida pelo usuário. 3.4.2 Leitura e Reprodução de áudio WAVE Um arquivo WAVE é composto por uma sequência de bytes a qual armazenam as amostras da onda do som gravada, respeitando uma certa taxa de amostragem definida na hora da criação . O arquivo WAVE foi aberto através da função "open()"da biblioteca "sdFat.h" e lido byte a byte com ajuda das funções "available()"e "read()". A cada leitura de byte foi mandado para o pino de saída de áudio (definidos antes no início do código do Arduino) o valor inteiro relacionado a amostra da onda lida. O tempo de amostragem, ou mais especificamente o tempo de espera para ler a próxima amostra, foi definido com base na taxa de amostragem do arquivo WAVE e ajustes em "tentativa e erro"devido aos tempos de leitura. Os arquivos WAVES, possuíam uma taxa de amostragem de 8KHz, resolução de 8 bits e canal mono. 3.4.3 Método utilizado A decisão final da equipe foi por utilizar a reprodução de tons com a função tone() nativa do Arduino. A escolha foi feita pois o método de reprodução WAVE se mostrou ineficiente e não condizente com a motivação do projeto. As notas geradas não eram da qualidade desejada. Como o Xilofone tem intuito didático, era necessário identificar claramente as notas para aprender e treinar essa percepção. Além disso, o processamento do arquivo WAVE gerava atrasos no Xilofone e prejudicava a sincronização do acendimento dos LEDs e da reprodução do áudio. O método de reprodução por tons gera sons sintéticos porém claramente identificáveis. O que perdemos com essa decisão foi a capacidade de utilizar o filtro de reverb, que estava implementado em MATLAB para utilização com os arquivos WAVE. 3.5 Circuitos A Figura 4 apresenta o diagrama esquemático do xilofone. Relatório Técnico: Ultron 12 Figura 7: Diagrama esquemático do xilofone 3.5.1 LEDs Cada uma das teclas do xilofone possue 4 LEDs de alto brilho, o que torna possível a variação da intensidade da tecla. Cada quarteto de LEDs foi ligado em uma porta analógica do Arduino, em série com um resistor de 100 Ohms e com um diodo, o que permitiu o acendimento de um LED por vez. 3.5.2 Amplificador de Áudio Foi utilizado um dispositivo básico para amplificação de áudio de uma caixa de som. Foram retirados os componentes que não faziam parte do amplificador e aproveitado o restante da circuitaria original da caixa de som como amplificador de áudio do sistema embarcado. 4 Aplicativo de gerenciamento 4.1 Estrutura O aplicativo desenvolvido para Android é composto por: 1. A tela inicial que traz as opções de navegação para as telas ensinar música, gravar música, configurações, e também uma botão para o início dos comandos de conexão com o xilofone, como mostra a Figura 5(a). 2. A tela de ensinar música contém a lista de músicas salvas no dispositivo e os botões de chamada das funções enviar músicas, excluir música e baixar músicas, como mostra a Figura 5(b). Relatório Técnico: Ultron 13 3. A tela de pontuação que mostra o resultado do desempenho do usuário em relação a sua aprendizagem, como mostra a Figura 5(c). 4. A tela de gravação que contém os botões para o envio dos comandos iniciar, parar e tocar as gravações e também o botão para salvar ou compartilhar a gravação, como mostra a Figura 5(d). (a) (b) (c) (d) Figura 8: Telas do aplicativo para Android. (a) tela do menu, (b) tela de ensinar música, (c) tela da pontuação e (d) tela de gravação. 4.2 Programação 4.2.1 Interface A interface é composta por uma tela principal, que gerencia toda a navegação entre telas do aplicativo. Para cada tela, foi montado um layout específico com todos os elementos necessários para o execução das funções. Quando o usuário requisita a chamada de uma nova tela, geralmente através do pressionamento de algum botão, o sistema da tela principal altera o layout atual pelo da requisitada. Afim de evitar erros e fechamentos inesperados no aplicativos os componentes do layout foram inicializado apenas quando o próprio layout era solicitado. 4.2.2 Leitura e envio de músicas para aprendizado Primeiramente foi definido um formato de arquivo texto, como sendo o método de armazenamento das músicas que o xilofone poderia ensinar. O arquivo é composto pelo nome da música, na primeira linha, o autor de quem fez a música, na segunda linha, e na sequência todo vetor corresponde a música. Na leitura, a biblioteca "File"foi utilizada para gerenciar os arquivo contidos na pasta do dispositivo. O método pra listar os arquivos da pasta foi "list()". Para leitura foi usado a classe "BufferedReader()"para ler linha a linha do arquivo. A decodificação das informações foi feita seguindo a sequência definida no Relatório Técnico: Ultron 14 arquivo texto da música. No caso do vetor da música salvo, foi necessário usar a classe "Integer"para transformar um conjunto de números em formato Caracter no formato Inteiro. Essa transformação foi necessária pois a manipulação das notas e tempos, neste projeto, é trabalhada com valores inteiros. O envio da música consiste em percorrer todo vetor que armazena as notas e tempos e cada iteração transformar o valor do índice atual em byte e então realizar o envio para o xilofone. 4.2.3 Pontuação de desempenho na aprendizagem Após o término do aprendizado de uma música, o xilofone envia as informações de desempenho. O aplicativo foi definido para processar essas informações conforme descrito a seguir: No primeiro método de aprendizagem: 1. a cada nota tocada errada o usuário perde 5% da pontuação máxima 2. a cada 100 milissegundos de espera até tocar a nota correta, o usuário perde 1% da pontuação máxima No segundo método de aprendizagem: 1. a cada nota tocada errada o usuário perde 6% da pontuação máxima 2. a cada 100 milissegundos de espera até tocar a nota correta, o usuário perde 1% da pontuação máxima 3. a cada nota não tocada usuário perde 10% da pontuação máxima A pontuação máxima foi definida para 1000 pontos. 4.2.4 Gravando e compartilhando músicas Toda gravação da música ocorre no xilofone. O aplicativo apenas envia o comando para a inicialização e parada da gravação. Quando a gravação termina o Arduino envia a música da mesma forma que o aplicativo, ou seja, de nota à nota e tempo à tempo. Aplicativo recebe essa informações e armazena num vetor inteiro, mas isso só ocorre se o usuário decidir salvar a gravação, para evitar envio de informações desnecessárias. Com a música no dispositivo, é chamada uma tela com os elementos de campo de texto nome e autor para identificação da música. Se o usuário decidir compartilhar, todas informações da música são codificadas no formato JSON[JSO] e enviados para um banco de dados online acessível por todos os usuários que possuem o aplicativo. JSON é formato "universal"que é muito conveniente para troca de informações entre aplicações. Todas as músicas enviadas para o aplicativo são salvas após as informações do nome e autor forem digitadas. Foi utilizado a classe "File"para criar o arquivo Relatório Técnico: Ultron 15 e a classe "FileOutputStream"para gravar os dados no arquivo. Para o salvar vetor da notas e tempos da música, este foi percorrido e cada iteração foi concatenando os valores do vetor em uma string com ajuda do método "toString()"da classe "Integer", para converter inteiro em string. O download consiste em acessar o banco de dados online receber no formato JSON a música escolhida. O aplicativo decodifica e salva como nas música que foram gravadas. 4.2.5 Filtro de distorção Foi desenvolvido um filtro para a distorção do som produzido. O filtro é ativado com uma chave. O filtro escolhido foi o reverb. O filtro foi desenvolvido e testado em MATLAB antes de ser traduzido e portado para o sistema embarcado. O filtro baseia-se em uma equação de diferenças [OPP75] e a filtragem foi feita com a função filter() nativa do MATLAB. A leitura do arquivo de som (em formato .wav) foi feita com a função audioread(), que também calcula a frequência de amostragem do som. Após a filtragem, é criado um arquivo .wav com a função nativa audiowrite(). Apesar de ter sido implementado, o filtro não foi utilizado na versão final do projeto, pois o método escolhido para a reprodução do som utilizando o arduino não permitiu a sua integração. 5 Comunicação A Tabela 1 apresenta os caracteres de comando adotados no protocolo de comunicação entre o aplicativo Android e o xilofone, via Bluetooth. Tabela 5: Comandos definidos para a execução da funções no aplicativo m n b r s p o y m u Configura o xilofone para recepção do vetor da música Inicia a função de ensinar música Para a função de ensinar música Inicia a gravação das notas da música Finaliza a gravação Inicia a reprodução da música gravada Finaliza a reprodução da música gravada Configura o xilofone e realiza o envio da música gravada Configura para recepção do vetor da música gravada Configura para recepção de desempenho de aprendizagem da música Relatório Técnico: Ultron 16 6 Conclusão A equipe atingiu todos os requisitos funcionais mais importantes. O xilofone captura a vibração das teclas; toca as notas correspondentes às 7 teclas no altofalante com som limpo; acende os LEDs da tecla tocada; ensina o usuário a tocar músicas utilizando o acendimento dos LEDs; se comunica com o aplicativo através de bluetooth e possui funções de gravação, armazenamento e compartilhamento através do aplicativo. Não foi possível utilizar variações na intensidade dos LEDs para as duas funções que a requeriam: codificar a intensidade do toque na tecla e, na função de aprendizagem da música, codificar quanto tempo faltava para a próxima nota ser tocada. A implementação da intensidade dos LEDs foi feita, mas era muito difícil discernir diferenças a mesma em ambientes que não estejam completamente escuros. Para contornar a primeira situação, as teclas ficam acesas por mais tempo dependendo da intensidade do toque na tecla. Isso dá um retorno visual para o usuário informando a intensidade do toque. Para a segunda situação, acendemos os LEDs da tecla progressivamente de acordo com quanto tempo falta para ela ser tocada. As teclas possuem 4 LEDs, e acendemos eles um por um de acordo com o tempo da música. Também não foi possível criar três níveis de dificuldade para a função de aprendizagem. O objetivo era implementar os níveis Fácil, Médio e Difícil. O nível Fácil consiste em tocar as teclas que o xilofone acende. Nesse nível o xilofone espera a tecla ser tocada antes de acender a próxima nota. Isso ensina a sequência de notas porém não ensina o ritmo da música. No nível Difícil o ritmo foi codificado com o acendimento progressivo dos 4 LEDs de cada tecla.Não foi possível implementar o nível Médio pois não há como inserir um nível intermediário de dificuldade pois não é possível incluir notas além das 7 já representadas. O xilofone toca apenas uma oitava, e seria necessário codificar outras oitavas para dificultar o nível Fácil. A equipe tinha como objetivo atingir os requisitos e produzir um trabalho de qualidade que prezasse por detalhes e pelo visual. Esses objetivos foram alcançados e a equipe considera o trabalho um sucesso. Referências [AND] Android studio overview. [ARDa] Android developers - bluetooth. [ARDb] Tutorial ARDUINO. Arduino - knock. [HOL02] Thorn HOLMES. Electronic and Experimental Music. New York: Routledge, 2002. Relatório Técnico: Ultron [JSO] 17 Introducing jason. [MCR11] M MCROBERTS. Arduino Básico. Novatec, 2011. [OPP75] A OPPENHEIM. Digital Signal Processing. Prentice-Hall, 1975. [PAG] Mitchell PAGE. Wireless communication with pc and arduino board using bluetooth. [PIN] Alexandre PINO. Instrumentação e técnicas de medida: Sensores termoelétricos e piezoelétricos.