Tabla de contenido:

Sintetizador Wii Nunchuck: 4 pasos
Sintetizador Wii Nunchuck: 4 pasos

Video: Sintetizador Wii Nunchuck: 4 pasos

Video: Sintetizador Wii Nunchuck: 4 pasos
Video: Wii Nunchuck MIDI controller roll and pitch in Procdraw 2024, Noviembre
Anonim
Sintetizador Wii Nunchuck
Sintetizador Wii Nunchuck

El mundo de la música de Wii:

Decidí finalmente combinar mi amor por la música con la poca experiencia en programación que he ganado en los últimos años. Me ha interesado crear un instrumento propio desde que vi una charla de Tod Machover en mi escuela. Si no está familiarizado con su trabajo, dele un Google, ya que ha estado ampliando los límites de la música, la tecnología y su intersección durante varios años (laboratorios de medios del MIT, Rock Band, Guitar Hero, etc.).).

He conectado mi Nunchuck a un Arduino Uno que se ejecuta en la biblioteca de síntesis de sonido de Mozzi debido al uso bien documentado de ambos en línea. Para mayor facilidad, estoy usando un adaptador de tablero de WiiChuck que se conecta directamente al Arduino. Este proyecto relativamente simple reproduce una serie de tonos dependiendo del tono (YZ-Plane) medido desde el acelerómetro del Nunchuck. El valor Y del joystick se asigna a la ganancia para hacer que el tono sea más alto o más suave. También cambia los acordes dependiendo del botón Z y activa una envolvente de modulación de fase cuando se presiona el botón C. Luego, la frecuencia de la envolvente se modifica con el rollo medido desde el Nunchuck (imagen girando una perilla).

Recursos:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x adaptador de WiiChuck
  • 1 x conector estéreo hembra de 3,5 mm compatible con placa de pruebas
  • 1 x cable de audio de 3,5 mm
  • 1 x altavoz de algún tipo (puede conectar un timbre al principio para probarlo
  • 4-5 alambres de varios colores

Opcional pero recomendado:

  • 1 x resistencia de 330 ohmios
  • 1 x condensador de 1 uF

Paso 1: Conectando su NunChuck

Conectando tu NunChuck
Conectando tu NunChuck
Conectando tu NunChuck
Conectando tu NunChuck
Conectando tu NunChuck
Conectando tu NunChuck

Copia / pega la clase WiiChuck de Arduino Playground. Necesitaremos la versión con la declaración de pines PWR y GND. Guárdelo como WiiChuck.hy guárdelo en el mismo directorio que su proyecto.

Ahora copie / pegue lo siguiente en Arduino IDE y cárguelo.

#include "Wire.h" // # incluye "WiiChuckClass.h" // lo más probable es que sea WiiChuck.h para el resto de nosotros. #incluya "WiiChuck.h" WiiChuck chuck = WiiChuck ();

configuración vacía () {

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

bucle vacío () {

retraso (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 (",");

// no es una función // if (chuck.buttonC ()) {

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

Serial.println ();

}

Desconecte su Arduino de la energía y conecte su adaptador WiiChuck a los pines analógicos 2-5 en su Arduino.

Conéctese a la alimentación nuevamente y asegúrese de que los valores de Nunchuck se envíen a su Arduino y se impriman en el Monitor serie. Si no ve ningún cambio en los números, asegúrese de que las conexiones sean buenas y que Nunchuck esté funcionando. ¡Pasé unos días tratando de arreglar el software antes de darme cuenta de que el cable de mi Nunchuck estaba roto internamente!

A continuación, conectaremos todo a Mozzi…

Paso 2: Conociendo a Mozzi

Conociendo a Mozzi
Conociendo a Mozzi

Primero, deberá descargar la última versión de Mozzi. Se alimentan de donaciones, así que haga una donación si lo desea y descargue la biblioteca. Puede agregarlo a sus bibliotecas fácilmente eligiendo Sketch> Bibliotecas> Agregar biblioteca. ZIP … desde Arduino IDE.

Ahora conectaremos el conector para auriculares de 3,5 mm a la placa de pruebas y Arduino para que podamos conectarnos fácilmente más tarde (puede desconectar el Nunchuck y el adaptador por ahora).

  1. Conecte su Jack a la esquina inferior derecha del tablero para dejar espacio para el resto. El conector debe tener 5 pines de ancho.
  2. Conecte la fila del medio a tierra con un cable de puente.
  3. Conecte la fila superior del gato a una fila vacía arriba (Fila 10 en la imagen). Este es el cable que transporta la señal de audio.
  4. Conecte el Pin digital ~ 9 a la fila 10 también.
  5. Conecte Ground en su Arduino al riel de tierra en la placa de pruebas.
  6. No es necesario que use la resistencia y el condensador todavía, pero puede notar un chillido agudo si no lo hace. Actúa como un filtro de paso bajo para eliminar frecuencias por encima de ~ 15 kHz.

Abra el boceto de Sinewave de Mozzi en Arduino IDE seleccionando Archivo> Ejemplos> Mozzi> Básicos> Sinewave. Este es esencialmente el equivalente de Mozzi a "Hello World".

Sube el boceto y conecta un altavoz a la placa de pruebas. También puede usar un timbre si aún no ha conectado la placa de pruebas al conector de audio.

Si no escucha un A4 (440Hz) constante proveniente de su altavoz, asegúrese de que todas las conexiones estén bien y vuelva a intentarlo.

A continuación, conectaremos el Nunchuck al Arduino.

Paso 3: Poniéndolo todo junto

Poniendolo todo junto
Poniendolo todo junto

Ahora vamos a utilizar el valor de rollo del Nunchuck para cambiar la frecuencia de una onda sinusoidal.

Desde Arduino IDE, elija Archivo> Ejemplos> Mozzi> Sensores> Frecuencia piezoeléctrica

Necesitaremos agregar algunas líneas a este código para que funcione con el Nunchuck. Agrega una inclusión a la biblioteca de WiiChuck y crea una instancia de un objeto de WiiChuck llamado chuck. También puede comentar la declaración de PIEZO_PIN o simplemente eliminarla, ya que no la usaremos.

#include "WiiChuck. H"

Mandril de WiiChuck = WiiChuck (); // const int PIEZO_PIN = 3; // establece el pin de entrada analógica para el piezo

Ahora en la configuración, necesitaremos agregar lo siguiente:

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

y finalmente necesitaremos cambiar algunas cosas en updateControl ():

void updateControl () {

chuck.update (); // obtener los últimos datos de nunchuck // leer el piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // el valor es 0-1023 int piezo_value = map (Comente la línea que establece piezo_value y agregue lo siguiente debajo:

void updateControl () {chuck.update (); // obtener los últimos datos de nunchuck // leer el piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // el valor es 0-1023 // No necesitamos la línea anterior, pero ¿por qué no asignar el rollo al mismo rango? int piezo_value = map (chuck.readRoll (), -180, 180, 0 1023);

Sube el código y la frecuencia debe corresponder a tu Nunchuck's Roll. Intente mapearlo en diferentes rangos de frecuencia. Si no lo ha notado más abajo en el boceto, el valor del sensor se multiplica por 3, por lo que actualmente estamos reproduciendo tonos de 0 Hz a aproximadamente 3000 Hz.

Paso 4: Toques finales

Toques finales
Toques finales

Ahora está listo para cargar la versión final del código que he reunido del paso anterior y algunos ejemplos más de Mozzi (Phase_Mod_Envelope y Control_Gain para ser exactos). Para hacer mi vida más fácil, también incluí un archivo llamado pitches.h que simplemente define valores de frecuencia con nombres de notas familiares (es decir, NOTE_A4).

Sugiero leer la documentación de Mozzi ya que gran parte del código proviene directamente de los ejemplos, excepto el código del Nunchuck.

Aquí hay un enlace a mi repositorio de Git. Se incluyen todos los archivos importantes, excepto la biblioteca de Mozzi, que debe obtener de su sitio web para que esté actualizado. Descarga WiiMusic.ino y cárgalo en tu dispositivo para escuchar cómo suena. Le sugiero que juegue con los parámetros que estoy cambiando (cambiar los rangos del mapa, dividir / multiplicar números, etc.) ya que así es como encontré el sonido particular que estaba buscando.

Reflexión

No siento que haya terminado del todo. Eso no quiere decir que no esté satisfecho con el proyecto o el sonido que hace, pero siento que simplemente sumergí los dedos de los pies en un nuevo mundo que quiero seguir explorando, así que agregaré una nueva rama de este proyecto a medida que continúe. trabajar.

Aún así, dicho esto, este fue mi primer viaje verdadero al mundo de los microcontroladores, así que estoy muy agradecido por la experiencia de aprendizaje. Las veinte horas que pasé trabajando en él me dieron ideas navideñas para mí y para prácticamente todos los miembros de mi familia. Lamento un poco no haber trabajado en este proyecto con otra persona, ya que podría haber usado muchos consejos y orientación en el camino. Sin embargo, personalmente aprendí mucho a través de mis pruebas, incluidos tres días de jalarme de los pelos tratando de depurar un problema de software que nunca estuvo allí (un cable interno en el Nunchuck se había roto).

Todavía hay una serie de posibilidades de seguir adelante. Por ejemplo, me encantaría usar el Arduino como un tipo de interfaz MIDI entre un controlador MIDI y la salida de auriculares para cambiar los parámetros de la nota MIDI, ya que hay muchos para elegir (volumen, corte, frecuencia de envolvente, inflexión de tono, modulación, vibrato, lo que sea). Esto permitiría mucha más flexibilidad, incluido el cambio de parámetros con los botones y simplemente tocar un acorde que no esté codificado en una matriz de C ++.

Recomendado: