Índice:

Sintetizador Wii Nunchuck: 4 etapas
Sintetizador Wii Nunchuck: 4 etapas

Vídeo: Sintetizador Wii Nunchuck: 4 etapas

Vídeo: Sintetizador Wii Nunchuck: 4 etapas
Vídeo: Wii Remote (Motion plus) + Nunchuk - китайская копия 2024, Novembro
Anonim
Sintetizador Wii Nunchuck
Sintetizador Wii Nunchuck

The World of Wii Music:

Decidi finalmente combinar meu amor pela música com o pouco de experiência em programação que ganhei nos últimos anos. Estou interessado em criar um instrumento meu desde que vi uma palestra de Tod Machover na minha escola. Se você não está familiarizado com o trabalho dele, dê a ele um Google, já que ele vem expandindo os limites da música, da tecnologia e de seus pontos de encontro há vários anos (laboratórios de mídia do MIT, Rock Band, Guitar Hero etc.)

Conectei meu Nunchuck a um Arduino Uno em execução na biblioteca de síntese de som Mozzi devido ao uso bem documentado de ambos online. Para facilitar, estou usando um adaptador de placa de ensaio WiiChuck que se conecta diretamente ao Arduino. Este projeto relativamente simples reproduz uma série de tons dependendo do Pitch (YZ-Plane) medido a partir do acelerômetro do Nunchuck. O valor Y do joystick é mapeado para o ganho para tornar o tom mais alto ou mais suave. Ele também muda acordes dependendo do botão Z e ativa um envelope de modulação de fase quando o botão C é pressionado. A frequência do envelope é então modificada com o Roll medido a partir do Nunchuck (imagem girando um botão).

Recursos:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x adaptador WiiChuck
  • 1 x conector estéreo fêmea de 3,5 mm compatível com placa de ensaio
  • 1 cabo de áudio de 3,5 mm
  • 1 x alto-falante de algum tipo (Você pode conectar uma campainha primeiro para testá-lo
  • 4-5 fios de várias cores

Opcional, mas recomendado:

  • 1 x resistor de 330 Ohm
  • 1 x 0,1 uF capacitor

Etapa 1: conectando seu NunChuck

Conectando seu NunChuck
Conectando seu NunChuck
Conectando seu NunChuck
Conectando seu NunChuck
Conectando seu NunChuck
Conectando seu NunChuck

Copie / cole a classe WiiChuck do Arduino Playground. Precisaremos da versão com a declaração dos pinos PWR e GND. Salve-o como WiiChuck.h e mantenha-o no mesmo diretório do seu projeto.

Agora copie / cole o seguinte no Arduino IDE e faça o upload.

#include "Wire.h" // # include "WiiChuckClass.h" // provavelmente é WiiChuck.h para o resto de nós. #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();

void setup () {

// nunchuck_init (); Serial.begin (115200); chuck.begin (); chuck.update (); //chuck.calibrateJoy (); }

void loop () {

atraso (20); chuck.update ();

Serial.print (chuck.readPitch ());

Serial.print (","); Serial.print (chuck.readRoll ()); Serial.print (",");

Serial.print (chuck.readJoyX ());

Serial.print (","); Serial.print (chuck.readJoyY ()); Serial.print (",");

if (chuck.buttonZ) {

Serial.print ("Z"); } else {Serial.print ("-"); }

Serial.print (",");

// não é uma função // if (chuck.buttonC ()) {

if (chuck.buttonC) {Serial.print ("C"); } else {Serial.print ("-"); }

Serial.println ();

}

Desconecte o Arduino da alimentação e conecte o adaptador WiiChuck aos pinos analógicos 2-5 do Arduino.

Conecte a energia novamente e certifique-se de que os valores do Nunchuck estão sendo enviados para o seu Arduino e impressos no Monitor Serial. Se você não está vendo nenhuma mudança nos números, certifique-se de que suas conexões sejam boas e que seu Nunchuck esteja funcionando. Passei alguns dias tentando consertar o software antes de perceber que o fio do meu Nunchuck estava quebrado internamente!

A seguir, conectaremos tudo ao Mozzi…

Etapa 2: Conhecendo Mozzi

Conhecendo Mozzi
Conhecendo Mozzi

Primeiro, você precisará baixar a versão mais recente do Mozzi. Eles são alimentados por doações, então doe se você se sentir inclinado a fazer o download da biblioteca. Você pode adicioná-lo às suas bibliotecas facilmente escolhendo Sketch> Libraries> Add. ZIP Library … do Arduino IDE.

Agora, conectaremos o conector de fone de ouvido de 3,5 mm à placa de ensaio e ao Arduino para que possamos conectá-lo facilmente mais tarde (você pode desconectar o Nunchuck e o adaptador por enquanto).

  1. Conecte seu Jack no canto inferior direito da placa para abrir espaço para o resto. O conector deve ter 5 pinos de largura.
  2. Conecte a linha do meio ao aterramento com um fio jumper.
  3. Conecte a linha superior do conector a uma linha vazia acima (linha 10 na imagem). Este é o fio que conduz o sinal de áudio.
  4. Conecte o pino digital ~ 9 à linha 10 também.
  5. Conecte o aterramento em seu Arduino ao trilho de aterramento na placa de ensaio.
  6. Você não precisa necessariamente usar o resistor e o capacitor ainda, mas você pode notar um guincho agudo se não usar. Ele atua como um filtro passa-baixo para eliminar as frequências acima de ~ 15 kHz.

Abra o esboço Sinewave de Mozzi no IDE Arduino escolhendo Arquivo> Exemplos> Mozzi> Básico> Sinewave. Este é essencialmente o equivalente Mozzi de "Hello World".

Carregue o esboço e conecte um alto-falante à placa de ensaio. Você também pode usar uma campainha se ainda não tiver conectado a placa de ensaio ao conector de áudio.

Se você não ouvir um A4 constante (440 Hz) vindo de seu alto-falante, certifique-se de que todas as conexões estão boas e tente novamente.

A seguir, conectaremos o Nunchuck ao Arduino!

Etapa 3: juntando tudo

Juntando tudo
Juntando tudo

Agora vamos usar o valor de rotação do Nunchuck para alterar a frequência de uma onda senoidal.

No IDE do Arduino, escolha Arquivo> Exemplos> Mozzi> Sensores> Frequência Piezo

Precisaremos adicionar algumas linhas a esse código para fazê-lo funcionar com o Nunchuck. Adicione uma inclusão à biblioteca WiiChuck e instancie um objeto WiiChuck chamado chuck. Você também pode comentar a declaração de PIEZO_PIN ou apenas excluí-la, pois não a usaremos.

#include "WiiChuck. H"

Mandril WiiChuck = WiiChuck (); // const int PIEZO_PIN = 3; // definir o pino de entrada analógica para o piezo

Agora na configuração, precisaremos adicionar o seguinte:

chuck.begin (); chuck.update ();

e, finalmente, precisaremos mudar algumas coisas em updateControl ():

void updateControl () {

chuck.update (); // obtém os dados mais recentes do nunchuck // lê o piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // o valor é 0-1023 int piezo_value = map (Comente a linha que define piezo_value e adicione o seguinte abaixo:

void updateControl () {chuck.update (); // obtém os dados mais recentes do nunchuck // lê o piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // o valor é 0-1023 // Não precisamos da linha acima, mas por que não mapear a rolagem para o mesmo intervalo? int piezo_value = map (chuck.readRoll (), -180, 180, 0 1023);

Faça o upload do código e a frequência deve corresponder ao seu Nunchuck's Roll. Tente mapeá-lo para diferentes faixas de frequência. Se você não percebeu mais abaixo no esboço, o valor do sensor é multiplicado por 3, portanto, estamos atualmente reproduzindo tons de 0 Hz a cerca de 3000 Hz.

Etapa 4: toques finais

Toques Finais
Toques Finais

Agora você está pronto para carregar a versão final do código que eu reuni na etapa anterior e mais alguns exemplos de Mozzi (Phase_Mod_Envelope e Control_Gain para ser exato). Para tornar minha vida mais fácil, também incluí um arquivo chamado pitches.h que simplesmente define valores de frequência com nomes de notas familiares (ou seja, NOTE_A4).

Eu sugiro a leitura da documentação do Mozzi, pois grande parte do código vem direto dos exemplos, exceto o código para o Nunchuck.

Aqui está um link para meu repositório Git. Todos os arquivos importantes estão incluídos, exceto a biblioteca Mozzi, que você deve obter no site para que esteja atualizado. Baixe WiiMusic.ino e carregue-o em seu dispositivo para ouvir como soa. Eu sugiro que você brinque com os parâmetros que estou alterando (alterar os intervalos do mapa, dividir / multiplicar números, etc.), pois foi assim que encontrei o som específico que estava procurando.

Reflexão

Eu não sinto que terminei. Isso não quer dizer que não esteja satisfeito com o projeto ou com o som que ele faz, mas sinto que acabei de mergulhar meus pés em um novo mundo que quero continuar explorando, então adicionarei um novo ramo deste projeto à medida que continuo trabalhar.

Mesmo assim, tendo dito isso, esta foi minha primeira verdadeira jornada no mundo dos microcontroladores, então estou muito grato pela experiência de aprendizado. As cerca de vinte horas que passei trabalhando nisso me deram ideias de Natal para mim e para praticamente todos os membros da minha família. Lamento não ter trabalhado neste projeto com outra pessoa, pois poderia ter usado muitos conselhos e orientações ao longo do caminho. No entanto, eu pessoalmente aprendi muito com meus testes, incluindo três dias arrancando meus cabelos tentando depurar um problema de software que nunca existiu (um fio interno do Nunchuck havia quebrado).

Ainda existem várias possibilidades a seguir. Por exemplo, eu adoraria usar o Arduino como um tipo de interface MIDI entre um controlador MIDI e a saída de fone de ouvido para alterar os parâmetros da nota MIDI, pois há tantos para escolher (volume, corte, frequência de envelope, pitch bend, modulação, vibrato, etc.). Isso permitiria muito mais flexibilidade, incluindo a alternância de parâmetros com os botões e simplesmente tocar um acorde que não está codificado em um array C ++.

Recomendado: