Mudanças entre as edições de "Hermeto"

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
(Descrição inicial da conexão das palancas)
m
 
(38 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
 
[[Arquivo:Hermeto.png|300px|thumb|right| Arquitetura Geral]]
 
[[Arquivo:Hermeto.png|300px|thumb|right| Arquitetura Geral]]
   
Projeto de [[wikipedia:Tenori-on | Tenori-on]] multi-usuário projetado para o [https://sites.google.com/site/opencallforgdd/the-challenge ADK Chalenge] e será apresentado no [http://www.google.com/events/developerday/2011/sao-paulo/ GDD Brasil 2011].
+
Projeto de [[wikipedia:Tenori-on | Tenori-on]] multi-usuário projetado para o [https://sites.google.com/site/opencallforgdd/the-challenge ADK Chalenge] e foi apresentado no [http://www.google.com/events/developerday/2011/sao-paulo/ GDD Brasil 2011].
   
 
Source no gitHub: https://github.com/thiagoalz/Hermeto
 
Source no gitHub: https://github.com/thiagoalz/Hermeto
Linha 8: Linha 8:
 
|style="border-left:1px solid #29691e;border-top:1px solid #29691e;border-right:1px solid #29691e;"|<big><strong>Status</strong></big>
 
|style="border-left:1px solid #29691e;border-top:1px solid #29691e;border-right:1px solid #29691e;"|<big><strong>Status</strong></big>
 
|-valign="top"
 
|-valign="top"
|style="padding:0px 6px 3px 6px;border-left:1px solid #29691e;border-bottom:1px solid #29691e;border-right:1px solid #29691e;"|<ul><li>Início: 19/07/2011</li><li>Status: Andamento</li><li>Participantes: [[User:Thiagoalz|Lechuga]], GutoMaia, Klaus, Habib, Roberto.</li></ul>
+
|style="padding:0px 6px 3px 6px;border-left:1px solid #29691e;border-bottom:1px solid #29691e;border-right:1px solid #29691e;"|<ul><li>Início: 19/07/2011</li><li>Status: Concluído / Aprimoramento</li><li>Participantes: [[User:Thiagoalz|Lechuga]], GutoMaia, Klaus, Habib, Roberto.</li></ul>
 
|}<BR><BR><BR><BR><BR>
 
|}<BR><BR><BR><BR><BR>
   
Linha 32: Linha 32:
   
 
===Hardware===
 
===Hardware===
Comunicação com controle de Atari: [https://sites.google.com/site/joetcochran/joylite-maze/how-to <nowiki>[3]</nowiki>]
+
Pegando como idéia o funcionamento do controle de atari [https://sites.google.com/site/joetcochran/joylite-maze/how-to <nowiki>[3]</nowiki>], atestei que é possível detectar o pressionar de um botão simplesmente o aterrando (Código de exemplo: https://gist.github.com/1144555).
  +
Assim, conectamos todos os controles dessa maneira. 5 "botões" (cima, baixo, direita, esquerda, botao) soltos ou aterrados. Desse modo, as palancas de fliperama funcionam de maneira EXATAMENTE igual ao controle de ATARI, e de uma maneira MUITO simples para conectar ao arduino.
  +
[http://pinouts.ru/Inputs/JoystickAtari2600_pinout.shtml pinagem do atari]
   
  +
Testado com a palanca e o botão que temos, em conjunto com a biblioteca SimpleJoystick que criamos ([https://github.com/thiagoalz/Hermeto/tree/master/ADKCode/libraries/SimpleJoystick github do projeto]), e funcionou perfeitamente!
Pegando como idéia o funcionamento do controle de atari, verifiquei que é possível detectar o pressionar de um botão simplesmente o aterrando (Código de exemplo: https://gist.github.com/1144555).
 
  +
Testei também com um cabo de rede de 3 metros para a conexão e funcionou sem problemas :D
Assim, vamos conectar todos os controles dessa maneira. 5 "botões" (Cima, baixo, direita, esquerda, botao) soltos/aterrados. Desse modo, as palancas de fliperama funcionarão de maneira EXATAMENTE igual ao controle de ATARI, e de uma maneira MUITO simples para conectar ao arduino.
 
  +
Já soldei tudo e adicionei conectores. Ficou bem legal!
  +
Conector para controle de atari já está pronto tb :)
  +
  +
Padrão de cores utilizado no cabo de rede:
  +
* M=GND
  +
* M/B=GND
  +
* A=Up
  +
* A/B=Down
  +
* V=Left
  +
* V/B=Right
  +
* L=Button
  +
  +
M e M/B estão em curto. Utilizei 2 cabos apenas por comodidade (Só achei conector de 2 entradas). Poderia perfeitamente utilizar apenas 1.
   
 
===Software===
 
===Software===
Modelo de [[wikipedia:Tenori-on | Tenori-on]]: [http://wonderfl.net/c/qf4b <nowiki>[2]</nowiki>]
 
   
  +
https://github.com/thiagoalz/Hermeto
Identificamos dois projetos para android de software livre (GPL3) que implementam funcionalidades similares e podem ser uteis:
 
* [http://www.ewanhemingway.co.uk/programming/androidome Androidome]: Implementa uma interface (OSC) para se comunicar com um PureData na mesma rede. É mais completo, mas necessita de um PC+PureData+Wi-fi.
 
* [http://ewanhemingway.co.uk/tags/tonematrix ToneMatrix]: Mais simples, mas toca os sons ele mesmo!
 
   
  +
Link para configuração do AVD do Motorola Xoom no Eclipse:
Provavelmente usaremos o ToneMatrix como base. Fica mais simples com tudo no celular, com menos pontos de falha e mais facil pra mixar com sons que estao no celular.
 
  +
http://mobile.tutsplus.com/tutorials/android/android-sdk_tablet_virtual-device-configuration/
   
Source no gitHub: https://github.com/thiagoalz/Hermeto
+
How-to Buld: https://github.com/thiagoalz/Hermeto/blob/master/README.markdown
  +
  +
  +
'''Principal'''
  +
  +
Source no gitHub: https://github.com/thiagoalz/Hermeto/tree/master/AndroidMain
  +
  +
Tutorial comunicação acessórios: http://developer.android.com/guide/topics/usb/accessory.html
  +
  +
  +
'''Client'''
  +
  +
Source no gitHub: https://github.com/thiagoalz/Hermeto/tree/master/AndroidClient
  +
  +
Estamos utilizando XMPP para a comunicação Cliente-Servidor.
  +
[http://today.java.net/pub/a/today/2006/10/05/instant-messaging-for-jabber-with-smack.html Usando o smack para xmpp]
  +
  +
Protocolo de comunicação XMPP:
  +
<pre>
  +
Client: HELLO Nickname
  +
Server: HELLO Nickname ClientID
  +
Client: ClientID up
  +
Client: ClientID down
  +
Client: ClientID left
  +
Client: ClientID right
  +
Client: ClientID button
  +
Client: ClientID disconnect (Notifica o server que está saindo)
  +
</pre>
   
 
===ADK===
 
===ADK===
  +
  +
Source no gitHub: https://github.com/thiagoalz/Hermeto/tree/master/ADKCode
  +
 
Documentação ADK: http://developer.android.com/guide/topics/usb/adk.html
 
Documentação ADK: http://developer.android.com/guide/topics/usb/adk.html
   
  +
Foi criada uma biblioteca para controlar os Joysticks na ADK (https://github.com/thiagoalz/Hermeto/tree/master/ADKCode/libraries/SimpleJoystick). Basta adicionar a pasta "SimpleJoystick" na pasta "libraries" do arduino e rodar o exemplo (Pelo proprio menu da IDE).
Source no gitHub: https://github.com/thiagoalz/Hermeto
 
  +
  +
A primeira versão do Driver ADK já está no github. Seu código é uma evolução do driver padrão (demokit), portanto a compatibilidade é mantida totalmente.
  +
Utilizei os pinos de 22-41 para a conexão de 4 joysticks, cada um com 5 portas (up, down, left, right, button).
  +
Como as portas pares e impares não são sequenciais na placa, cada controle utiliza somente um dos tipos para facilitar ligação.
  +
  +
Conexão de Joysticks :
  +
{| border=1
  +
! Joystick
  +
! Up
  +
! Down
  +
! Left
  +
! Right
  +
! Button
  +
|-
  +
| 0
  +
| 22
  +
| 24
  +
| 26
  +
| 28
  +
| 30
  +
|-
  +
| 1
  +
| 32
  +
| 34
  +
| 36
  +
| 38
  +
| 30
  +
|-
  +
| -
  +
| -
  +
| -
  +
| -
  +
| -
  +
| -
  +
|-
  +
| 2
  +
| 23
  +
| 25
  +
| 27
  +
| 29
  +
| 31
  +
|-
  +
| 3
  +
| 33
  +
| 35
  +
| 37
  +
| 39
  +
| 41
  +
|}
  +
  +
<span style="color:red">Alerta: Os pinos 50 e 51 ficaram completamente loucos com meu código. Não sei se estão com problemas ou se comportam naturalmente de maneira distinta).</span>
  +
  +
Quando alguma ação é executada em alguns dos joysticks uma mensagem é enviada ao celular no seguinte formato:
  +
  +
<pre>
  +
msg[0] = 0x9; // Código da Mensagem
  +
msg[1] = i; // Número do Joystick
  +
msg[2] = c; // Número da ação
  +
acc.write(msg, 3);
  +
</pre>
  +
  +
O número da ação é representado segundo:
  +
# Up
  +
# Down
  +
# Left
  +
# Right
  +
# Button
  +
  +
(Nota-se, que não há suporte para duas ações [Up+Right] ao mesmo tempo)
   
 
===Design===
 
===Design===
 
===Sons===
 
===Sons===
  +
Os primeiros sons já foram criados pelo Klaus.
Usaremos sons não convencionais. Klaus está fazendo esse levantamento.
 
  +
Nessa nova etapa vamos permitir que o usuário escolha entre 3 sets de instrumentos distintos, para aumentar a variedade.
  +
O Klaus irá produzir 3 sets de 16 sons!
   
 
==Referências==
 
==Referências==

Edição atual tal como às 09h07min de 28 de dezembro de 2011

Arquitetura Geral

Projeto de Tenori-on multi-usuário projetado para o ADK Chalenge e foi apresentado no GDD Brasil 2011.

Source no gitHub: https://github.com/thiagoalz/Hermeto

Status
  • Início: 19/07/2011
  • Status: Concluído / Aprimoramento
  • Participantes: Lechuga, GutoMaia, Klaus, Habib, Roberto.






Introdução

O que poderia ser mais divertido do que interagir com a festa? Mais legal do que influenciar, e deixar sua marca no som que está rolando? É com essa ideia em mente que surge o projeto Hermeto. Em meados de 2005, o artista japonês Toshio Iwai criou um instrumento musical eletrônico denominado Tenori-on, que prontamente foi reproduzido por outros grupos, inclusive em versões livres, como seu “primo” Monome. O instrumento consiste em uma tela com uma matriz de botões, geralmente de 16x16, de forma que cada um pode ser ativado criando inúmeros sons de forma criativa (fonte: Wikipedia). O instrumento pode ser visto em funcionamento nas referências [1] e [2]. Então, por que não criar um Tenori-on gigante e colaborativo?

Objetivo

O objetivo desse projeto, portanto, é utilizar um tablet Xoom, em conjunto com um kit ADK , para criar um Tenori-on (16x16) tamanho família, que utilizará também sons tipicamente brasileiros, para que qualquer participante possa interagir mixando-os na sonzeira rolando.

Descrição Técnica e Funcionalidades

O instrumento desenvolvido conterá, inicialmente, apenas as funcionalidades principais do original. Uma faixa vertical percorrendo e tocando a matriz de sons, de maneira similar ao exemplo de código demonstrado em [2]. Contudo, já na versão inicial o usuário também poderá variar a velocidade (BPM) da faixa e selecionar batidas padrão ou músicas como base da mixagem. Outra diferença será a utilização de sons tipicamente brasileiros, como percussão, berimbau e pandeiro, em conjunto com os sons puramente eletrônicos. O usuário poderá interagir com o instrumento diretamente através do tablet e também através de controles, que estarão ligados à placa ADK. Serão utilizados 2 tipos de controle, um de atari (Utilizando o método descrito em [3]) e um montado especialmente para o projeto, contendo 2 reguladores de volume e um botão, tudo em tamanho família. Os reguladores poderão modificar linha e coluna, e o botão irá confirmar a seleção no Tenori-on. As seguintes funcionalidades serão implementadas dependendo de disponibilidade de materiais e tempo hábil para desenvolvimento: (a) Interação com o Tenori-on através de película touchscreen ligada à placa ADK, (b) Implementação de aplicação cliente para interação com o Tenori-on através de outros aparelhos android utilizando mesma rede wi-fi.

A figura ao lado demonstra a arquitetura final da solução. Temos: (a) Xoom rodando aplicação com simulação de Tenori-on; (b) Projetor, ou TV, conectado à sadia HDMI do Xoom; (c) Controle de Atari conectado à placa ADK; (d) Controle artesanal conectado à placa ADK. (e) Placa ADK conectada ao Xoom; (f) Roteador Wi-fi; (g) Telefones Android com aplicação cliente instalada.

Andamento

Hardware

Pegando como idéia o funcionamento do controle de atari [3], atestei que é possível detectar o pressionar de um botão simplesmente o aterrando (Código de exemplo: https://gist.github.com/1144555). Assim, conectamos todos os controles dessa maneira. 5 "botões" (cima, baixo, direita, esquerda, botao) soltos ou aterrados. Desse modo, as palancas de fliperama funcionam de maneira EXATAMENTE igual ao controle de ATARI, e de uma maneira MUITO simples para conectar ao arduino. pinagem do atari

Testado com a palanca e o botão que temos, em conjunto com a biblioteca SimpleJoystick que criamos (github do projeto), e funcionou perfeitamente! Testei também com um cabo de rede de 3 metros para a conexão e funcionou sem problemas :D Já soldei tudo e adicionei conectores. Ficou bem legal! Conector para controle de atari já está pronto tb :)

Padrão de cores utilizado no cabo de rede:

  • M=GND
  • M/B=GND
  • A=Up
  • A/B=Down
  • V=Left
  • V/B=Right
  • L=Button

M e M/B estão em curto. Utilizei 2 cabos apenas por comodidade (Só achei conector de 2 entradas). Poderia perfeitamente utilizar apenas 1.

Software

https://github.com/thiagoalz/Hermeto

Link para configuração do AVD do Motorola Xoom no Eclipse: http://mobile.tutsplus.com/tutorials/android/android-sdk_tablet_virtual-device-configuration/

How-to Buld: https://github.com/thiagoalz/Hermeto/blob/master/README.markdown


Principal

Source no gitHub: https://github.com/thiagoalz/Hermeto/tree/master/AndroidMain

Tutorial comunicação acessórios: http://developer.android.com/guide/topics/usb/accessory.html


Client

Source no gitHub: https://github.com/thiagoalz/Hermeto/tree/master/AndroidClient

Estamos utilizando XMPP para a comunicação Cliente-Servidor. Usando o smack para xmpp

Protocolo de comunicação XMPP:

Client: HELLO Nickname
Server: HELLO Nickname ClientID
Client: ClientID up
Client: ClientID down
Client: ClientID left
Client: ClientID right
Client: ClientID button
Client: ClientID disconnect (Notifica o server que está saindo)

ADK

Source no gitHub: https://github.com/thiagoalz/Hermeto/tree/master/ADKCode

Documentação ADK: http://developer.android.com/guide/topics/usb/adk.html

Foi criada uma biblioteca para controlar os Joysticks na ADK (https://github.com/thiagoalz/Hermeto/tree/master/ADKCode/libraries/SimpleJoystick). Basta adicionar a pasta "SimpleJoystick" na pasta "libraries" do arduino e rodar o exemplo (Pelo proprio menu da IDE).

A primeira versão do Driver ADK já está no github. Seu código é uma evolução do driver padrão (demokit), portanto a compatibilidade é mantida totalmente. Utilizei os pinos de 22-41 para a conexão de 4 joysticks, cada um com 5 portas (up, down, left, right, button). Como as portas pares e impares não são sequenciais na placa, cada controle utiliza somente um dos tipos para facilitar ligação.

Conexão de Joysticks :

Joystick Up Down Left Right Button
0 22 24 26 28 30
1 32 34 36 38 30
- - - - - -
2 23 25 27 29 31
3 33 35 37 39 41

Alerta: Os pinos 50 e 51 ficaram completamente loucos com meu código. Não sei se estão com problemas ou se comportam naturalmente de maneira distinta).

Quando alguma ação é executada em alguns dos joysticks uma mensagem é enviada ao celular no seguinte formato:

msg[0] = 0x9; // Código da Mensagem
msg[1] = i;   // Número do Joystick
msg[2] = c;   // Número da ação
acc.write(msg, 3);

O número da ação é representado segundo:

  1. Up
  2. Down
  3. Left
  4. Right
  5. Button

(Nota-se, que não há suporte para duas ações [Up+Right] ao mesmo tempo)

Design

Sons

Os primeiros sons já foram criados pelo Klaus. Nessa nova etapa vamos permitir que o usuário escolha entre 3 sets de instrumentos distintos, para aumentar a variedade. O Klaus irá produzir 3 sets de 16 sons!

Referências

  1. Tenori-on em execução: http://www.youtube.com/watch?v=_SGwDhKTrwU
  2. Exemplo de Tenori-on em flash: http://wonderfl.net/c/qf4b
  3. Arduino com controle de Atari: https://sites.google.com/site/joetcochran/joylite-maze/how-to