¡Bienvenido a mi post sobre cómo construir nuestra propia batería electrónica MIDI! En este tutorial, aprenderemos a utilizar la placa arduino uno para crear una batería física que se comunicará con el software «Pro Tools 10» a través del puerto USB.
Para lograr esto, utilizaremos el «Plugin» EZ Drummer, que nos permitirá reproducir sonidos reales de batería y crear nuestras propias bases o temas. Debido a la complejidad del proyecto, lo dividiré en dos partes: la parte hardware y la parte software.
La parte hardware se refiere a la construcción de los pads y pedales que accionaremos para simular la batería física. La parte software se refiere a la instalación de los programas necesarios y al código que tendremos que cargar en nuestro arduino uno para que con cada golpe en los pads o cada vez que pisemos los pedales suenen los tambores, platos y el bombo de la batería virtual del EZ Drummer.
¡Sin más demora, comencemos con este emocionante desafío!
Hardware
La construcción de los pads es esencial en este proyecto. Es donde golpearemos para generar una señal que estimulará nuestro arduino para ejecutar sonidos mediante el software. Para lograr esto, utilizaremos sensores piezoeléctricos como sensores de golpe. Cada vez que golpeemos los pads, estos sensores generarán una señal eléctrica que nuestro arduino podrá leer a través de sus entradas analógicas.
Es importante conectar correctamente los sensores piezoeléctricos en nuestro Arduino. Estos sensores están polarizados, por lo que es crucial conectar el terminal positivo correctamente. Este terminal se encuentra soldado en la parte central del piezo y debe conectarse a la entrada analógica correspondiente del Arduino.
Por otro lado, el terminal negativo, soldado en la parte exterior del piezo, siempre debe conectarse a la masa (GND) del Arduino. Además, entre los dos terminales del piezo es necesario conectar una resistencia de 1 MΩ en paralelo para limitar el voltaje y corriente generados por el sensor y proteger así la entrada analógica del Arduino. A continuación se muestra cómo se deben instalar correctamente estos sensores piezoeléctricos en nuestro Arduino.
El Arduino Uno solo tiene 6 entradas analógicas, por lo que solo se pueden conectar un máximo de 6 pads para la batería virtual. Esto limita el número de tambores y platos que se pueden simular en el software EZ Drummer. Para tener una estructura más compacta y golpear los sensores piezoeléctricos, se recomienda pegarlos con cola de contacto en una superficie circular de mayor tamaño que también vibre al ser golpeada. Una opción es utilizar un tupperware circular de plástico, pero esta parte es a elección de cada uno.
Además, para darle un aspecto más atractivo a los pads, se pueden añadir 6 LEDS alrededor de cada tupperware que se iluminarán cada vez que se golpee en el pad correspondiente. Estos LEDS deben conectarse en serie, es decir, la patilla más corta de cada LED se conecta a masa (GND) a través de una resistencia de 220Ω para limitar la corriente que lo atraviesa y evitar quemarlo.
La otra patilla, más larga, se conecta al pin digital del Arduino programado para encender y apagar los LEDS del pad correspondiente. Se conectan 6 LEDS por cada pad debido a que el Arduino tiene suficiente corriente en un pin digital para encender todos al mismo tiempo cada vez que se golpee en el pad correspondiente sin problemas de alimentación. Es importante tener en cuenta que el pad 1 se compone del piezo 1 y del grupo de LEDS 1 dentro del tupperware de plástico.
Para finalizar y amortiguar el sonido de «plástico» al golpear la tapa, se agregó una pieza de goma EVA en la parte superior de cada pad. Al final del proceso, todo debe estar integrado dentro de cada tupperware, dando como resultado tres salidas o cables por cada pad. Uno de estos cables se conectará a la masa del Arduino (GND), ya que la masa para el piezoeléctrico y los LEDs es la misma.
Otro cable se conectará a la entrada analógica del Arduino correspondiente y el tercero se conectará al pin digital que controla los LEDs de cada pad. A continuación se muestra cómo quedaría cada uno de los 6 pads.
Para finalizar la creación de la batería virtual, se deben crear y conectar dos pedales: uno para el bombo y otro para el plato Charles. Además, se agrega un pulsador para controlar el «doble bombo» y dos LEDS para indicar el estado de cada uno de los pedales en todo momento. La construcción de los pedales se realiza utilizando un pulsador de timbre convencional, un trozo de madera como base y cable para conectarlos al Arduino.
A continuación se presenta el resultado final de cómo deben quedar cada uno de los pedales.
Para finalizar la fabricación e instalación de la parte física de la batería (HARDWARE), vamos a crear y conectar los dos pedales necesarios (Charles y bombo), además de conectar un pulsador para el control del “doble bombo” y dos LEDs para indicar el estado tanto del bombo como del plato Charles en cada momento.
La construcción de los pedales se hará con un pulsador de timbre convencional que cortaremos en ángulo de 30 grados para acomodarlo a la base, un trozo de madera que utilizaremos como base del pedal, donde fijaremos el pulsador de timbre para su correcta sujeción cuando lo apoyemos en el suelo y por supuesto cable para su conexión a nuestro Arduino.
También remarcar que tanto el pedal del plato Charles como el del bombo son idénticos en su estructura física, además ambos irán conectados a entradas digitales de Arduino mediante conexión pull-down con una resistencia de 10KΩ, pero dentro de la programación van a tener tareas distintas.
Además, tendremos que conectar también un pulsador, de la misma manera que los pedales (pull-down con resistencia de 10KΩ), a uno de los pines digitales de Arduino, que cuando sea presionado será el encargado de cambiar la función de “bombo simple” a “doble bombo” del pedal del bombo. Para saber en todo momento en que MODO de los dos nos encontramos, se encenderá un LED conectado a través de una resistencia de 220Ω, para limitar la corriente que lo atraviesa, a otro pin digital de Arduino cuando estemos en “doble bombo” permaneciendo apagado cuando ejecutemos el “bombo simple”.
En esta parte también tenemos otro LED conectado a un nuevo pin digital de Arduino, limitado en corriente mediante una resistencia de 220Ω, para indicarnos cuando estamos pisando (LED encendido) o no (LED apagado) el pedal del Charles en cada momento para que, mediante programación y software, suene a “Charles cerrado” cuando pisamos el pedal o a “Charles abierto” cuando el pedal se encuentra en reposo. A continuación os muestro todo el diagrama de conexión de todos estos últimos periféricos que vamos a añadir a nuestra batería.
Para asegurarnos de no olvidar las conexiones de la batería con Arduino, a continuación se presenta una tabla detallada de las conexiones. Además, se incluye una imagen de cómo deben quedar los 6 pads de la batería una vez conectados. Es recomendable utilizar una protoboard o crear nuestra propia placa de circuito impreso (PCB) para conectar la batería de manera «plug and play», de esta manera evitaremos tener que montarlo todo desde cero cada vez que usemos la batería electrónica y evitaremos contactos falsos entre los componentes.
Software
La programación es más compleja que la configuración del hardware, pero no hay que preocuparse ya que no se abordará en profundidad. El objetivo es simplemente instalar el software necesario para hacer sonar la batería y cargar el programa en Arduino para que actúe como interfaz entre el hardware y el software. Primero, se instalará el programa «Pro Tools 10.3.7» y luego se agregará el plugin «EZ Drummer». Este software es compatible con Windows 7 y versiones posteriores, los usuarios de MAC OS o LINUX tendrán que buscar una manera de obtener el software.
A continuación se proporcionan los enlaces para descargar el software, que incluye todos los archivos y las instrucciones necesarias para la instalación correcta.
Una vez instalado el Pro Tools y el plugin EZ Drummer, el siguiente paso será instalar LoopBe1 Monitor. Este es un dispositivo MIDI interno que nos permite transferir datos MIDI entre programas de computadora. LoopBe1 actúa como un «cable invisible» conectando la salida MIDI de una aplicación a la entrada MIDI de otra, y en nuestro caso servirá como enlace entre la salida del conversor Serie a MIDI y la entrada MIDI de Pro Tools. LoopBe1 se ejecutará en segundo plano una vez instalado y estará siempre activo a menos que sea silenciado (MUTE).
Puedes descargar esta aplicación en el siguiente enlace.
Descarga del Puerto MIDI Virtual – LoopBe1 Monitor
Una vez que todo el hardware esté conectado correctamente a nuestro Arduino, el siguiente paso será conectarlo al PC a través del USB. Luego, cargaremos el programa llamado «Bateria_MIDI.ino», que se encuentra disponible para descargar al final de este post. Si aún no tienen el IDE de Arduino y los drivers de la placa instalados, les recomendamos revisar un post anterior donde se detalla cómo hacerlo. Además, si quieren aprender a cargar correctamente un programa (sketch) en su Arduino, hay un post adicional que explica cómo hacerlo.
El siguiente paso será descargar y ejecutar el conversor serie a MIDI según se indica a continuación.
Con el conversor en ejecución, la primera prueba que tenemos que hacer para comprobar que nuestro ARDUINO envía correctamente los mensajes MIDI al golpear los PADS o pisar el pedal del bombo es configurarlo como se muestra en la siguiente imagen.
Después de seleccionar la velocidad de comunicación, que en nuestro caso es siempre 57600 bps (baudios), y por último seleccionar tanto el puerto MIDI de entrada como el de salida. Todas las opciones de los menús se seleccionan pulsando las letras del teclado del PC que hay entre corchetes antes de cada opción.
Si hemos configurado correctamente el conversor, al golpear cualquiera de los pads o pisar el pedal del bombo sonarán las notas MIDI en piano que tengamos asignadas mediante programación para el pad o el pedal del bombo, además de encenderse los LEDS del pad que estemos golpeando y por supuesto el cuadrado del Serial RX se tiene que poner de color verde.
Esto todavía no tiene mayor relevancia puesto que es solamente para comprobar que todo va bien hasta el momento y que existe una buena comunicación MIDI con el PC, sino fuese así, tendríamos que revisar todo para ver que hemos hecho mal o que se nos ha olvidado hacer. Una vez corroborado todo esto pasamos a configurar definitivamente el conversor de la misma manera que lo acabamos de hacer, para que se comunique con “PRO TOOLS”.
Lo que hace el conversor ahora es enviar el MIDI por la salida «LoopBE Internal MIDI» y no directamente al «sintetizador de Microsoft» como hemos hecho en el caso anterior, para posteriormente poder enlazar esa salida MIDI directamente a una entrada MIDI de Pro Tools y a su vez asignar ese MIDI a los platos, tambores y el bombo del «Plugin» EZ Drummer.
Siempre que queramos cargar nuevamente un programa en nuestro arduino, tenemos que cerrar el conversor puesto que ocupa la comunicación USB y el IDE quedaría sin posible comunicación con nuestro arduino (Nos tocaría volver a ejecutar y configurar el conversor cada vez que nos comuniquemos con el IDE). Ya nos estamos acercando al resultado final de nuestra batería electrónica, solo nos queda configurar la entrada MIDI en Pro Tools, asignar el «plugin» EZ Drummer a una pista MIDI que crearemos y además crear una pista de audio por si queremos ir grabando nuestros primeros temas y compases.
Para configurar nuestra batería electrónica con Arduino y Pro Tools, primero debemos descomprimir y abrir la carpeta descargada. Luego, ejecutamos el archivo «Arduino.ptx» para abrir Pro Tools con todas las pistas necesarias para trabajar. Es importante tener en cuenta que siempre que ejecutemos el EZ Drummer, debemos ingresar el código de autorización. Para obtenerlo, vamos a la carpeta EZ Drummer descargada y ejecutamos el «KeyGen.exe». Copiamos el «Computer ID» de la pantalla del EZ Drummer y lo pegamos en el KeyGen, luego damos al botón «Generate» para obtener nuestro código de autorización. Una vez autorizado, el programa tarda unos segundos en cargarse completamente.
Finalmente, vamos a la pestaña del Pro Tools «Configuración» -> «Periféricos» -> «Controladores MIDI» y configuramos el canal 8 seleccionado, ya que es el canal que se utiliza para enviar el MIDI desde Arduino.
Ahora solamente nos queda de revisar que la entrada MIDI esté correctamente activado, para ello nos vamos a la pestaña de Pro Tools: “Configuración” à “MIDI” à Dispositivos de entrada… y nos cercioramos de que la casilla “LoopBe Internal MIDI” esté activada.
Para finalizar la configuración del software tenemos que revisar la configuración del “Plugin” EZ Drummer para que suene correctamente nuestra batería para ello tenemos que configurar las pistas de la siguiente manera:
Para que suene la batería solamente nos queda activar el botón “REC” de la pista de “Audio 1”, además para grabar nuestros temas tenemos que activar los botones “REC” y “PLAY” generales de Pro Tools (Arriba a la derecha de la pantalla principal), y comenzar a tocar. A continuación os dejo un video donde podréis seguir paso a paso la configuración de todo lo anteriormente explicado.
El programa «Bateria_MIDI.ino» se carga en el Arduino y su función es enviar mensajes MIDI al PC a través del puerto USB cada vez que se golpea un PAD o se presiona el pedal del bombo. Estos mensajes MIDI están compuestos por el estado de la nota (ON/OFF), el canal MIDI utilizado para la transmisión, el tono de la nota y la velocidad de reproducción. Utilizamos la función «void MIDI_TX(unsigned char MENSAJE, unsigned char TONO, unsigned char VELOCIDAD)» para lograr esto. Además, el programa también permite configurar funciones adicionales para personalizar la batería electrónica.
- #define canal 7: Canal MIDI del 0 a 15 (+1 en el «mundo real»). Utilizo el 8 porque es el que utilizo dentro de Pro Tools 10.
- unsigned char Nota[6] = {11,69,50,47,43,58}: contiene las notas MIDI que enviamos al presionar los PADS (del 1 al 6). Estas notas MIDI, dependiendo el SOTWARE que estemos utilizando, pueden ser unas u otras (de 0 a 127), aunque en este caso están configuradas para el “Plugin” EZ Drummer dentro de Pro Tools 10 (Charles, caja, TOM 1, TOM 2, TOM de suelo y platillos).
- int Nota_pedal = 36: Nota MIDI que enviamos cuando pisamos el pedal del Bombo, también configurada para el “Plugin” ES Drummer (Bombo). Mediante el pulsador denominando “pulsador_bombo”, conectado mediante PULL DOWN a la entrada digital 10 de Arduino, podremos cambiar el MODO del pedal del Bombo de “Bombo simple” a “Doble Bombo” al accionarle.
-
int Sensibilidad_golpeo[6] = {400,400,400,400,400,400}: Es el valor de la sensibilidad de golpeo de los PADS (valor máximo 1023). A mayor valor menor sensibilidad, es decir, más golpe tendremos que dar en el PAD para que se reproduzca el sonido correspondiente.
- int Respuesta[6] = {70,70,70,70,70,70}: Es el tiempo mínimo de espera o respuesta entre golpes (en milisegundos). A mayor valor menor respuesta de la batería, es decir, tendremos que esperar más tiempo para poder golpear nuevamente un PAD y que tenga respuesta dentro del “plugin” EZ Drummer.
- int Velocidad_pedal = 120: Velocidad del pedal entre 0 y 127 (elegir la que más os guste).
-
int Tiempo_maximo = 70: Tiempo mínimo de espera que tiene que transcurrir hasta que se permite pisar una segunda vez el pedal y que suene el Bombo (respuesta del pedal).
Para finalizar os dejo el “Keyboard Layout” de las notas MIDI que relacionan directamente el teclado del editor MIDI de Pro Tools con los respectivos sonidos de batería del “plugin” EZ Drummer.
Lista de Materiales
-
- ARDUINO UNO Rev.3
- Cable USB tipo A-B
- 6 Sensores piezoeléctricos
- 6 Resistencias de 1MΩ
- 38 LEDS de 3mm (de distintos colores)
- 8 Resistencias de 220Ω
- 1 Pulsador
- 2 Interruptores de timbre
- 2 Trozos de madera (base pedales)
- 4 Tirafondos
- 3 Resistencias de 10KΩ
- 6 Tupperware redondos de plástico
- Plancha de Goma EVA
- Cola de contacto
- Soldador de 30W y estaño
- Protoboard o en su defecto fabricar PCB
- Cables de conexión
- ARDUINO UNO Rev.3
Código del programa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 |
/* TITULO: Batería MIDI con Pro Tools 10 y EZ Drummer. AUTOR: MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA Con este programa enviamos mensajes MIDI con una velocidad de 57600 BAUDIOS desde ARDUINO al PC, a través del puerto serie USB, cada vez que golpeemos uno de los PADS o cada vez que presionemos el pedal del Bombo, para que sean leídos por Pro Tools a través de una entrada MIDI, gracias al conversor serie a MIDI y el puerto virtual MIDI (LoopBe) que tenemos que instalar para que se reproduzcan los sonidos de batería del "Plugin" EZ Drummer (Caja, TOMS, platillos y bombo). Este mensaje MIDI que enviamos, consta de tres partes claramente diferenciadas: - STATUS: Compuesto por el estado de la NOTA MIDI(ON/OFF) y el canal MIDI por el que transmitimos. - TONO: Es el TONO de la NOTA MIDI que transmitimos (de 0 a 127). - VELOCIDAD: Es la velocidad con la que se reproduce la NOTA MIDI que transmitimos (de 0 a 127). Podremos personalizar dentro del programa el canal MIDI por el que se realiza la transmisión del mensaje MIDI, los tonos de las NOTAS MIDI reproducidas al golpear los PADS o al pisar el pedal del Bombo, la sensibilidad para la activación de los PADS, el tiempo de espera (respuesta) entre el golpeo de los PADS o cuando pisamos dos veces el pedal del Bomboo y por último la velocidad del pedal del Bombo. Para una mayor información sobre el programa os recomiendo revisar los comentarios realizados a lo largo del mismo. ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | LED_Charles(+) | [ ]RST MOSI/11[ ]~| LED_Bombo(+) | [ ]3V3 +---+ 10[ ]~| PA (pulsador_bombo) | [ ]5v -| A |- 9[ ]~| PA (pedal) | [ ]GND -| R |- 8[ ] | PA (Charles) | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | LEDS 1(+) | -| I |- 6[ ]~| LEDS 2(+) PIEZO 1(+) | [ ]A0 -| N |- 5[ ]~| LEDS 3(+) PIEZO 2(+) | [ ]A1 -| O |- 4[ ] | LEDS 4(+) PIEZO 3(+) | [ ]A2 +---+ INT1/3[ ]~| LEDS 5(+) PIEZO 4(+) | [ ]A3 INT0/2[ ] | LEDS 6(+) PIEZO 5(+) | [ ]A4/SDA RST SCK MISO TX>1[ ] | PIEZO 6(+) | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - El terminal(-) de todos los PIEZOS a GND. - Resistencia de 1M ohm entre los terminales (+) y (-) de cada PIEZO. - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos) - Conexión PULL-DOWN de los pulsadores - Pulsador_bombo: - PB (Pulsador_bombo) conectado a VCC. - PA (Pulsador_bombo) conectado a GND a través de una R=10K ohms. - Pedal Charles: - PB (Charles) conectado a VCC. - PA (Charles) conectado a GND a través de una R=10K ohms. - Pedal Bombo: - PB (pedal) conectado a VCC. - PA (pedal) conectado a GND a través de una R=10K ohms. - Cátodo(-) de todos los LEDS (pata más corta) a GND a través de una R=220 ohms, una para cada grupo de LEDS. SOTWARE REQUERIDO: -> Puerto MIDI Virtual - loopBE: https://mega.nz/#!as40kIaY!P8gPtd1ZidftKjnIS316M2wncZRe5mfwBOW-rOV2P_U -> Conversor - Serial_MIDI_Converter_V2D: https://mega.nz/#!PooVGZza!SuRLVJEfNJ_54oIMQEQMceEfMc7jGLNBG2xsY7bh9FU -> Pro Tools 10: https://mega.nz/#!m4JzFBBQ!T4DZ49dqpnBxL2B0-fpl1ncu8X605eoyqTlaq-gv5M0 -> EZ Drummer: https://mega.nz/#!u8BDWYwZ!39pimPFn63hweH6XwEcvPgceVAAd9nlVJ1ZsvvUM07E */ // Canal MIDI del 0 a 15, +1 en el "mundo real" (Utilizo el 8 porque le configuro en Pro Tools 10). #define canal 7; // Notas MIDI de 0 a 127 (Mid C = 60) --> {Charles abierto, Caja, TOM 1, TOM 2, TOM de piso, platillos}. unsigned char Nota[6] = {46,33,50,47,43,58}; int Nota_pedal = 36; // Nota MIDI para el Bombo. int Sensibilidad_golpeo[6] = {400,400,400,400,400,400}; // Valor máximo 1023. A mayor valor menor sensibilidad. // Tiempo de espera entre golpes en milisegundos (respuesta). A mayor valor menor respuesta de la batería electrónica. int Respuesta[6] = {90,90,90,90,90,90}; // Variables para el control del pedal del Bombo. int Velocidad_pedal = 120; // Velocidad del pedal entre 0 y 127 (elige la que más te guste). int Tiempo_maximo = 70; // Tiempo de espera del pedal para poder pisarle por segunda vez (Respuesta del pedal) boolean Bandera_velocidad = true; // Variable interna para el control de la velocidad. // Variables para el control de los PADS boolean Pad_Activo[6] = {0,0,0,0,0,0}; // Matriz que almacena el estado inicial de los PADS (OFF). int Comienzo_sonido[6] = {0,0,0,0,0,0}; // Matriz para contar el tiempo que dura la NOTA al golpear cada PAD. // Variables internas para el pedal del Bombo int tiempo_pedal = 0; // Cuenta el tiempo desde que pisamos el pedal (inicialmente cero). boolean bombo_activo = false; // Estado inicial del pedal del Bombo. unsigned char status; // Variable para almacenar el ESTADO del mensaje MIDI (Estado NOTA MIDI <ON/OFF> + CANAL). int Nota_ON = 144; // Variable con valor 144 que activa la NOTA MIDI. int Nota_OFF = 128; // Variable con valor 128 que desactiva la NOTA MIDI. int pedal = 9; // Pin digital para el interruptor del pedal del bombo int valor_pedal; // Variable para almacenar el estado del pedal int pin = 0; // Variable auxiliar para recorrer las matrices (Arrays) int velocidad = 0; // Variable interna para el control de la velocidad de las NOTAS int LED_bateria[6] = {7, 6, 5, 4, 3, 2}; // Pines digitales para los LEDs de los PADS int LED_Bombo = 11; // Pin digital para el LED del estado del Bombo int LED_Charles = 12; // Pin digital para el LED del estado del Charles // Variables para la función del BOMBO y DOBLE BOMBO const int pulsador_bombo = 10; // Pin digital para el pulsador del MODO del Bombo const int tiempoAntirrebote = 10; // Tiempo en ms para evitar el rebote del pulsador del Bombo // Variables para el control del pulsador del Bombo int cuenta = 0; int estadoBoton; int estadoBotonAnterior; // Variables para la función del CHARLES int charles = 8; // Pin digital para el pedal del charles int estado_charles; // Variable que almacena el estado del pedal del Charles void setup() { Serial.begin(57600); // Comienza la comunicación serie a 57600 BAUDIOS pinMode(LED_Charles, OUTPUT); // Pin digital 12 como SALIDA pinMode(LED_Bombo, OUTPUT); // Pin digital 11 como SALIDA pinMode(pulsador_bombo, INPUT); // Pin digital 10 como ENTRADA pinMode(pedal, INPUT); // Pin digital 9 como ENTRADA pinMode(charles, INPUT); // Pin digital 8 como ENTRADA // Pines digitales del 7 al 2 como SALIDAS for(int i=0; i<6; i++) { pinMode(LED_bateria[i], OUTPUT); } } void loop() { // Función que cambia la NOTA MIDI del charles en función del ESTADO del pedal charles NOTA_Charles(); // Función para controlar los PADS CONTROL_PADS(); // Función para controlar el BOMBO CONTROL_Bombo(); } // Función que transmite el mensaje MIDI void MIDI_TX(unsigned char MENSAJE, unsigned char TONO, unsigned char VELOCIDAD) { status = MENSAJE + canal; // Estado de la NOTA MIDI (ON/OFF) + canal MIDI de transmisión // Enviamos los valores por el puerto serie USB de ARDUINO Serial.write(status); // Estado del mensaje Serial.write(TONO); // Tono de la NOTA MIDI Serial.write(VELOCIDAD); // Velocidad de la NOTA MIDI } // Función que cambia la NOTA MIDI del charles en función del ESTADO del pedal charles void NOTA_Charles() { // Obtenemos el valor del pedal del Charles estado_charles = digitalRead(charles); // Si no hemos pisado el pedal del Charles if(estado_charles == LOW) { Nota[0] = 46; // Nota MIDI para Charles abierto digitalWrite(LED_Charles, LOW); // LED del Charles apagado } // Si hemos pisado el pedal del Charles if(estado_charles == HIGH) { Nota[0] = 42; // Nota MIDI para Charles cerrado digitalWrite(LED_Charles, HIGH); // LED del Charles encendido } } // Función para controlar los PADS void CONTROL_PADS() { // Recorremos las 6 entradas analógicas (A0, A1,....A5) for(int pin=0; pin < 6; pin++) { // Guardamos el valor analógico de la entrada velocidad = analogRead(pin); // Si el golpe está dentro del tiempo de respuesta .. if((velocidad > Sensibilidad_golpeo[pin])) { // Si el PAD no estaba activado if((Pad_Activo[pin] == false)) { // Calculamos la velocidad de golpeo if(Bandera_velocidad == true) { velocidad = (velocidad / 8) -1 ; } else { velocidad = 127; } // Enviamos el mensaje MIDI para encender la NOTA MIDI_TX(Nota_ON,Nota[pin],velocidad); Comienzo_sonido[pin] = 0; Pad_Activo[pin] = true; digitalWrite(LED_bateria[pin], HIGH); // Activamos los LEDS del PAD } // Si no hemos golpeado el PAD correspondiente else { // Incremento el tiempo entre golpes en una unidad Comienzo_sonido[pin] = Comienzo_sonido[pin] + 1; } } // Si el PAD estaba ya activado else if((Pad_Activo[pin] == true)) { // Incremento el tiempo entre golpes en una unidad Comienzo_sonido[pin] = Comienzo_sonido[pin] + 1; // Si se ha superado el tiempo de respuesta if(Comienzo_sonido[pin] > Respuesta[pin]) { // Enviamos el mensaje MIDI para apagar la NOTA MIDI_TX(Nota_OFF,Nota[pin],127); Pad_Activo[pin] = false; digitalWrite(LED_bateria[pin], LOW); // Desactivamos los LEDS del PAD } } } } // Función para controlar el BOMBO void CONTROL_Bombo() { // Se adquiere el estado del pulsador del bombo estadoBoton = digitalRead(pulsador_bombo); // Se cuentan las veces que lo hemos pulsado if(estadoBoton != estadoBotonAnterior) { if(antirrebote(pulsador_bombo)) { cuenta++; } } estadoBotonAnterior = estadoBoton; // Se reinicia la cuenta cuando llega a 2 if(cuenta==2) { cuenta = 0; } // Se adquiere el estado del pedal del bombo valor_pedal = digitalRead(pedal); // Se evalúa el valor de la cuenta del pulsador del bombo switch(cuenta) { // Bombo normal: LED apagado case 0: digitalWrite(LED_Bombo, LOW); pedal_Bombo(); // Función para "Bombo simple" break; // Doble bombo: LED encendido case 1: digitalWrite(LED_Bombo, HIGH); pedal_doble_Bombo(); // Función para "doble Bombo" break; } } // Función para "Bombo simple" void pedal_Bombo() { // Si hemos pisado el pedal del bombo if(valor_pedal == HIGH) { // Si el bombo estaba desactivado if((bombo_activo == false)) { // Enviamos el mensaje MIDI para encender la NOTA MIDI_TX(Nota_ON,Nota_pedal,Velocidad_pedal); tiempo_pedal = 0; bombo_activo = true; } // Si el bombo estaba ya activado else { // Incremento el tiempo entre pisadas del pedal en una unidad tiempo_pedal = tiempo_pedal + 1; } } // Si no hemos pisado el pedal del bombo else if((bombo_activo == true)) { // Incremento el tiempo entre pisadas del pedal en una unidad tiempo_pedal = tiempo_pedal + 1; // Si se ha superado el tiempo de respuesta if(tiempo_pedal > Tiempo_maximo) { // Enviamos el mensaje MIDI para apagar la NOTA MIDI_TX(Nota_OFF,Nota_pedal,Velocidad_pedal); bombo_activo = false; } } } // Función para "doble Bombo" void pedal_doble_Bombo() { // Si hemos pisado el pedal del bombo if(valor_pedal == HIGH) { // Si el bombo estaba desactivado if((bombo_activo == false)) { // Enviamos el mensaje MIDI para encender la NOTA MIDI_TX(Nota_ON,Nota_pedal,Velocidad_pedal); delay(45); // Tiempo de espera // Enviamos el mensaje MIDI para apagar la NOTA MIDI_TX(Nota_OFF,Nota_pedal,Velocidad_pedal); delay(45); // Tiempo de espera // Enviamos el mensaje MIDI para encender la NOTA MIDI_TX(Nota_ON,Nota_pedal,Velocidad_pedal); tiempo_pedal = 0; bombo_activo = true; } // Si el bombo estaba activado else { // Incremento el tiempo entre pisadas del pedal en una unidad tiempo_pedal = tiempo_pedal + 1; } } // Si no hemos pisado el pedal del bombo else if((bombo_activo == true)) { // Incremento el tiempo entre pisadas del pedal en una unidad tiempo_pedal = tiempo_pedal + 1; // Si se ha superado el tiempo de respuesta if(tiempo_pedal > Tiempo_maximo) { // Enviamos el mensaje MIDI para apagar la NOTA MIDI_TX(Nota_OFF,Nota_pedal,Velocidad_pedal); bombo_activo = false; } } } // Función que evita el rebote del pulsador del bombo boolean antirrebote(int pin) { int contador = 0; boolean estado; boolean estadoAnterior; do { estado = digitalRead(pin); if(estado != estadoAnterior) { contador = 0; estadoAnterior = estado; } else { contador = contador+ 1; } delay(1); } while(contador < tiempoAntirrebote); return estado; // Devuelve el valor del ESTADO del pulsador } |
Descarga del programa “Bateria_MIDI.ino”
Video
Conclusiones
En resumen, se ha presentado un proyecto para construir una batería electrónica utilizando un Arduino Uno y varios sensores piezoeléctricos. El programa «Bateria_MIDI.ino» se carga en el Arduino y su función es enviar mensajes MIDI al PC a través del puerto USB cada vez que se golpea un PAD o se presiona el pedal del bombo. Además, el programa permite configurar funciones adicionales para personalizar la batería electrónica. Se ha detallado la lista de materiales necesarios y las características de las notas MIDI utilizadas en el proyecto.
En conclusión, este proyecto es una excelente oportunidad para los amantes de la música y la tecnología para crear su propia batería electrónica y experimentar con diferentes configuraciones y sonidos. Agradecemos al lector por su tiempo y esperamos que haya disfrutado del post. Agradecemos a los lectores por su atención y los invitamos a comentar sus dudas o preguntas.
Es lamentable que tan importante proyecto no se pueda realizar ya que eliminaron los archivos y programas importantes que permiten realizar este interesante proyecto. Solamente queda el mensaje escrito, pero de ahí no se puede seguir, solamente leerlo y ya.