Paduino 0.1 (pads MIDI basados en arduino)

#31 por Man with the x-ray eyes el 10/02/2013
Hola, gracias por el enlace, yo también soy bastante ignorante en estos temas, pero ya sabemos que la ignorancia es atrevida... Seguro que cualquiera que sepa lo suficiente de electrónica se llevará las manos a la cabeza cuando vea mis posts, :oops:

En el video veo dos diferencias básicas respecto a mi proyecto:
1) Usa diodos, según dice para tener una respuesta más fiable de los piezos, así que tendré que probarlo a ver si puedo mejorar la sensibilidad y las respuesta.
2) Él usa el "serial to midi converter" y el "midi yoke" porque envía las señales midi a través del USB, yo sin embargo las mando por un cable midi (DIN5), que para mí es más útil, ya que en principio no lo voy a usar solo con un ordenador, así lo puedo conectar a un módulo de sonidos, a un teclado o a cualquier cacharro que me encuentre con "midi in".

¿tú lo quieres comunicar por cable midi o por USB? porque dependiendo de cómo vayas a hacerlo tendrás que guiarte más por este proyecto o por el otro. Si no tienes entrada midi en la tarjeta de sonido, no te quedará mas remedio que hacerlo por USB, si no, personalmente preferiría el DIN5, por lo que te decía de poder llevarte tu cacharro y conectarlo a cualquier aparato con entrada midi, sin necesidad de que sea un ordenador.
Subir
#32 por farruko el 13/02/2013
ola yo lo quiero hacer con una salidda midi como la tuya ya e empezado el protoboard i voi a poner los botones,pondre los avances i las preguntas,un saludo

no es oro todo lo que reluce

Subir
#33 por farruko el 11/03/2013
ola the man with the x-ray eyes ya tengo la bateria casi terminada la semana que viene pondre algunas fotos pero ahora me ha surgido una pregunta,los piezo e visto que hay gente que los suelda a cables coaxiales o de antena de toda la vida para que no tengan ruido porque como la señal es muy pequeña si el cable no es mallado se puede inducir ruido eléctrico que hace que se dispare,tu que me aconsejas?muchas gracias amigo un saludo

no es oro todo lo que reluce

Subir
#34 por Man with the x-ray eyes el 11/03/2013
Hola Farruko!
Yo la verdad es que no he tenido problemas hasta ahora, pero también es verdad que solo lo he usado en casa y no en un local o en un directo, por ejemplo, donde a lo mejor puedes tener otras interferencias.
Lo que está claro es que será una mayor protección y en ningún caso perjudicará al proyecto, así que si tienes el cable y puedes hacerlo con ése, pues te ahorras posibles problemas.
Espero impaciente esas fotos....
Un saludo!
Subir
#35 por Kefren el 28/04/2014
Hola The Man, yo te escribí un par de mensajes privados, pero creo que será mejor que comparta con todos lo que me pasa.
Quiero aclarar que soy de los que se animan, pero no sé casi nada de arduino ni programación, apenas me doy maña en releer los códigos e intento interpretarlos para copiar lo que necesito y supongo que funcionará.

En tu código, yo agregué líneas para conformar una batería completa, que ya tengo armada con piezos y todo, pero tengo un gran inconveniente, y es que apenas la conecto, en mi ez drummer empieza a tocar sola, haciendo una ametralladora de sonidos entre todos los cuerpos de la batería.

Al circuito, le agregué de la siguiente manera:
Así como está conectado el piezo al análogo 0 a través de una resistencia de 10K a maza y su positivo a 5V, puse a cada piezo lo mismo pero en los análogos 1, 2, 3, 4... al 7
Entiendo que todos van a masa a través de resistencia y que todos los piezos conectan su positivo a los 5V. Corrígeme si estoy equivocado por favor.

No se si el problema lo tengo en los piezoeléctricos o en el código. No instalé los botones de cambio de sonido, pues no quiero utilizarlos, pero pienso si eso influye en algo en mi problema.
Si fueras tan amable, podrías revisarlo?
Tengo 50 años y hace 20 que vendí mi batería y quiero volver a tocar, y lamentablemente no puedo comprar una acústica...

Uso una Mega 2560 y un cable midi-usb que funciona bien con otros instrumentos.
Aquí dejo el código completo, a ver si vos o alguien más es capaz de descubrir lo que me pasa.

/*
PADUINO based on MIDI note player (by Tom Igoe)

This sketch shows how to use two piezos to send Midi notes. It's able to change the note of wich one, using pushbuttons.

The circuit:
* digital pin 1 connected to MIDI jack pin 5
* MIDI jack pin 2 connected to ground
* MIDI jack pin 4 connected to +5V through 220-ohm resistor
Attach a MIDI cable to the jack, then to a MIDI synth, and play music.
PiezoA connected to analog pin 0
PiezoB connected to analog pin 1
buttonmasA connected to digital pin2
buttonmenosA connected to digital pin3
buttonmasB connected to digital pin4
buttonmenosB connected to digital pin5
created 13 Jun 2006
modified 2 Jul 2009

modified 21 may 2012 by The man with the x-ray eyes
This example code is in the public domain.
https://elcastizo-vpn/wiki/index.php/Incluir_dos_botones_de_selecci%C3%B3n_de_sonido_al_piezo_MIDI
*/
#define PIEZOATHRESHOLD 14//change this value
#define PIEZOBTHRESHOLD 14
#define PIEZOCTHRESHOLD 14
#define PIEZODTHRESHOLD 14
#define PIEZOETHRESHOLD 14
#define PIEZOFTHRESHOLD 14
#define PIEZOGTHRESHOLD 14
#define PIEZOHTHRESHOLD 14
#define piezoAPin 0
#define piezoBPin 1
#define piezoCPin 2
#define piezoDPin 3
#define piezoEPin 4
#define piezoFPin 5
#define piezoGPin 6
#define piezoHPin 7
// this constant won't change:
const int buttonmasAPin = 2;
const int buttonmenosAPin = 3;// the pin that the pushbutton is attached to
const int buttonmasBPin = 4;
const int buttonmenosBPin = 5;// the pin that the pushbutton is attached to
const int ledPin = 13; // the pin that the LED is attached to
// Variables will change:
int noteA = 38; //Redoblante MIDI note 69=A (440hz)
int noteB = 50; //TOM 1
int noteC = 45; //TOM 2
int noteD = 66; //CHANCHA
int noteE = 35; //BOMBO
int noteF = 49; //CRASH 1
int noteG = 51; //RIDE
int noteH = 46; //OPEN HI-HAT
int buttonmasAState = 0; // current state of the button
int lastButtonmasAState = 0; // previous state of the button
/// int buttonmenosPushCounter = 0; // counter for the number of button presses
int buttonmenosAState = 0; // current state of the button
int lastButtonmenosAState = 0; // previous state of the button

int buttonmasBState = 0; // current state of the button
int lastButtonmasBState = 0; // previous state of the button
/// int buttonmenosPushCounter = 0; // counter for the number of button presses
int buttonmenosBState = 0; // current state of the button
int lastButtonmenosBState = 0; // previous state of the button

int valA;
int valB;
int valC;
int valD;
int valE;
int valF;
int valG;
int valH;
void setup() {
// initialize the button pin as a input:
pinMode(buttonmasAPin, INPUT);
pinMode(buttonmenosAPin, INPUT);
pinMode(buttonmasBPin, INPUT);
pinMode(buttonmenosBPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
// Set MIDI baud rate:
Serial.begin(31250);
}

void loop() {
valA = analogRead(piezoAPin);
if( valA >= PIEZOATHRESHOLD ) {

while(analogRead(piezoAPin) >= PIEZOATHRESHOLD/3) {

}
noteOn(0x90,noteA,0x45);
// delay(0);
noteOn(0x90,noteA,0x40);
}
valB = analogRead(piezoBPin);
if( valB >= PIEZOBTHRESHOLD ) {

while(analogRead(piezoBPin) >= PIEZOBTHRESHOLD/3) {

}
noteOn(0x90,noteB,0x45);
// delay(0);
noteOn(0x90,noteB,0x40);//0x00 = note off, but 0x40= no velocity
}
valC = analogRead(piezoCPin);
if( valC >= PIEZOCTHRESHOLD ) {

while(analogRead(piezoCPin) >= PIEZOCTHRESHOLD/3) {

}
noteOn(0x90,noteC,0x45);
// delay(0);
noteOn(0x90,noteC,0x40);
}
valD = analogRead(piezoDPin);
if( valD >= PIEZODTHRESHOLD ) {

while(analogRead(piezoDPin) >= PIEZODTHRESHOLD/3) {

}
noteOn(0x90,noteD,0x45);
// delay(0);
noteOn(0x90,noteD,0x40);
}
valE = analogRead(piezoEPin);
if( valE >= PIEZOETHRESHOLD ) {

while(analogRead(piezoEPin) >= PIEZOETHRESHOLD/3) {

}
noteOn(0x90,noteE,0x45);
// delay(0);
noteOn(0x90,noteE,0x40);
}
valF = analogRead(piezoFPin);
if( valF >= PIEZOFTHRESHOLD ) {

while(analogRead(piezoFPin) >= PIEZOFTHRESHOLD/3) {

}
noteOn(0x90,noteF,0x45);
// delay(0);
noteOn(0x90,noteF,0x40);
}
valG = analogRead(piezoGPin);
if( valG >= PIEZOGTHRESHOLD ) {

while(analogRead(piezoGPin) >= PIEZOGTHRESHOLD/3) {

}
noteOn(0x90,noteG,0x45);
// delay(0);
noteOn(0x90,noteG,0x40);
}
valH = analogRead(piezoHPin);
if( valH >= PIEZOHTHRESHOLD ) {

while(analogRead(piezoHPin) >= PIEZOHTHRESHOLD/3) {

}
noteOn(0x90,noteH,0x45);
// delay(0);
noteOn(0x90,noteH,0x40);
}

buttonmasAState = digitalRead(buttonmasAPin);
buttonmenosAState = digitalRead(buttonmenosAPin);
buttonmasBState = digitalRead(buttonmasBPin);
buttonmenosBState = digitalRead(buttonmenosBPin);

// compare the buttonState to its previous state
if (buttonmasAState != lastButtonmasAState) {
// if the state has changed, increment the counter
if (buttonmasAState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
if (noteA <127)
{ noteA++; }
else { noteA = 0; }
// compare the buttonState to its previous state
}
}
if (buttonmenosAState != lastButtonmenosAState) {
// if the state has changed, increment the counter
if (buttonmenosAState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
if (noteA > 0)
{ noteA--; }
else { noteA = 127; }

}
// compare the buttonState to its previous state
// if the current state is LOW then the button wend from on to off:

}

// save the current state as the last state,
//for next time through the loop
lastButtonmasAState = buttonmasAState;
lastButtonmenosAState = buttonmenosAState;

if (buttonmasBState != lastButtonmasBState) {
if (buttonmasBState == HIGH) {
if (noteB <127)
{ noteB++; }
else { noteB = 0; }
}
}
if (buttonmenosBState != lastButtonmenosBState) {
if (buttonmenosBState == HIGH) {
if (noteB > 0)
{ noteB--; }
else { noteB = 127; }

}
}

// save the current state as the last state,
//for next time through the loop

lastButtonmasBState = buttonmasBState;
lastButtonmenosBState = buttonmenosBState;
}
// plays a MIDI note. Doesn't check to see that
// cmd is greater than 127, or that data values are less than 127:
void noteOn(int cmd, int pitch, int velocity) {
Serial.write(byte (cmd));
Serial.write(byte (pitch));
Serial.write(byte (velocity));
}


MUCHAS GRACIAS A QUIENES ME AYUDEN CON ESTA AVENTURA!
Subir
#36 por Kefren el 28/04/2014
Perdón, dejo el esquema del circuito que hice para que lo vean más claramente

http://proyecto1.com.ar/circuitoMIDI_kefren.png
Subir
#37 por Kefren el 30/04/2014
ALGUNA RESPUESTA?
GRACIAS
Subir
#38 por Daniel Tamayo el 05/08/2014
hola que tal
Subir
#39 por Daniel Tamayo el 05/08/2014
Bueno primeramente saludos compañero, te aviso que yo ise algo parecido a tu proyecto, solo que con un Arduino Uno que cuenta con solo 6 entradas analogicas, mas limitado que el tuyo, veo que en tus comentarios mencionaste que no quisiste poner los botones de cambio de sonido, y en el codigo que pusiste viene la programacion para los botones ¿entonses?. Bueno yo me arme una bateria hace ya unos dias y ya me funciona bien los 6 piezo electricos todos por separado, sin latencia y al igual que tu removi la opcion de los botones.
bueno te pongo algunas soluciones y no te ofendas por algunas solo trato de descartar algunos de los errores tipicos.
- que este el com correcto
- que este seleccionado el modelo arduino correcto
- que este el programador correcto seleccionado en el software Arduino

ahora que si no es nada de esto, pues te posteo mi codigo de mi bateria, el cual como te comente este cuenta con 6 variables para las lecturas de piezo electricos y le puse un boton que es para activar o desactivar el pedal de hi-hats.


---------------------------------------------------------------------------------------------------------------------------------
/*
The circuit:
* digital pin 1 connected to MIDI jack pin 5
* MIDI jack pin 2 connected to ground
* MIDI jack pin 4 connected to +5V through 220-ohm resistor
Attach a MIDI cable to the jack, then to a MIDI synth, and play music.
PiezoA connected to analog pin 0
PiezoB connected to analog pin 1

This example code is in the public domain.
https://elcastizo-vpn/wiki/index.php/Incluir_dos_botones_de_selecci%C3%B3n_de_sonido_al_piezo_MIDI
*/
#define PIEZOATHRESHOLD 500//change this value - este valor se ajusta deacuerdo a los pad´s utilizados
#define PIEZOBTHRESHOLD 500//change this value - este valor se ajusta deacuerdo a los pad´s utilizados
#define PIEZOCTHRESHOLD 500
#define PIEZODTHRESHOLD 500
#define PIEZOETHRESHOLD 500
#define PIEZOFTHRESHOLD 500

#define piezoAPin 0
#define piezoBPin 1
#define piezoCPin 2
#define piezoDPin 3
#define piezoEPin 4
#define piezoFPin 5


//#define piezoAPin 1
//const int ledPin = 13; // the pin that the LED is attached to

int pedalHH = 0;
int noteA = 36; // kick
int noteB = 40; // Snare
int noteC = 50; //HiHat CLOSED
int noteD = 77; //Crash
int noteE = 69; //tom1
int noteF = 67; //Tom2
int noteG = 56; //HiHat OPEN

int valA;
int valB;
int valC;
int valD;
int valE;
int valF;

const int buttonPin = 2; // the number of the pushbutton pin

void setup() {
// initialize digital read:
pinMode(buttonPin, INPUT);
// initialize serial communication:
// Set MIDI baud rate:
Serial.begin(31250);
//31250
}

void loop() {
valA = analogRead(piezoAPin);
if( valA >= PIEZOATHRESHOLD ) {

while(analogRead(piezoAPin) >= PIEZOATHRESHOLD/3) {

}
noteOn(0x90,noteA,0x45);
//delay(0);
noteOn(0x90,noteA,0x40);
}

valB = analogRead(piezoBPin);
if( valB >= PIEZOBTHRESHOLD ) {

while(analogRead(piezoBPin) >= PIEZOBTHRESHOLD/3) {

}
noteOn(0x90,noteB,0x45);
//delay(0);
noteOn(0x90,noteB,0x40);
}

valC = analogRead(piezoCPin);
pedalHH = digitalRead(buttonPin);
if (pedalHH > 0d) // SI ESTA ACTIVADO EL SWITCH
{
if( valC >= PIEZOCTHRESHOLD ) {

while(analogRead(piezoCPin) >= PIEZOCTHRESHOLD/3) {

}
noteOn(0x90,noteG,0x45);
//delay(0);
noteOn(0x90,noteG,0x40);
}
}

else{ // SI NO ESTA ACTIVADO EL SWITCH
if( valC >= PIEZOCTHRESHOLD ) {

while(analogRead(piezoCPin) >= PIEZOCTHRESHOLD/3) {

}
noteOn(0x90,noteC,0x45);
//delay(0);
noteOn(0x90,noteC,0x40);
}
}

valD = analogRead(piezoDPin);
if( valD >= PIEZODTHRESHOLD ) {

while(analogRead(piezoDPin) >= PIEZODTHRESHOLD/3) {

}
noteOn(0x90,noteD,0x45);
//delay(0);
noteOn(0x90,noteD,0x40);
}

valE = analogRead(piezoEPin);
if( valE >= PIEZOETHRESHOLD ) {

while(analogRead(piezoEPin) >= PIEZOETHRESHOLD/3) {

}
noteOn(0x90,noteE,0x45);
//delay(0);
noteOn(0x90,noteE,0x40);
}

valF = analogRead(piezoFPin);
if( valF >= PIEZOFTHRESHOLD ) {

while(analogRead(piezoFPin) >= PIEZOFTHRESHOLD/3) {

}
noteOn(0x90,noteF,0x45);
//delay(0);
noteOn(0x90,noteF,0x40);
}


}
// plays a MIDI note. Doesn't check to see that
// cmd is greater than 127, or that data values are less than 127:
void noteOn(int cmd, int pitch, int velocity) {
Serial.write(byte (cmd));
Serial.write(byte (pitch));
Serial.write(byte (velocity));
-----------------------------------------------------------------------------------------------------------------------
Espero te ayude.... saludos
Subir
#40 por Pablo el 25/04/2015
Buen día apenas quiero comprar un arduino y meterme en este mundo, y me surgio la duda de que si podría utilizar un arduino Leonardo, espero su pronta respuesta y soy nuevo por aquí, SALUDOS!
Subir
#41 por Facundo Brizuela el 20/09/2016
Yo pude hacer una bateria que se conecta con el usb del arduino a la camputadora, asi pude usarlo en simuladores de bateria, con grabadora y editor, y un juego como lo es el Guitar Hero pero para bateria.
El que este interesado en el tema puede dejarme un mensaje en mi correo: faacundo.brlz@gmail.com.
Contesto cualquier duda. Espero se me deje un mensaje.
Subir
Respuesta rápida

Regístrate o para poder postear en este hilo