Arduino midi, problemas para terminar proyecto

#1 el 23/04/2012
Publicidad
hola compañeros un saludo, resulta que he comenzado con arduino pero tengo problemas, quiero realizar un contrlador como este :

http://www.instructables.com/id/Arcade-Button-MIDI-Controller/


el proyecto que yo quiero hacer tiene 16 potenciometros y 30 botones, lo voy a montar sobre una placa Arduino mega 2560 , el codigo base lo saque de la pagina del proyecto, solo que no se si pueda usar ese mismo codigo para hacer funcionar los 16 potenciometros y los 30 botones, mi duda es:

¿Este codigo me sirve para conectar directamente mi placa y los botones y pontenciometros, osea tengo que modificar el codigo o añadirle algo mas?

¿Como tengo que modificar el codigo si es el caso?

No pido que me hagan el proyecto, solo que me asesoren sobre el mismo, mis conocimientos sobre programacion y electronica son basicos pero he conseguido quien me ayude con la electronica pero para el codigo nade me sabe explicar (fui a la escuela de ingenieria electronica y automatizacion en mi ciudad y nadie me pudo o quizo ayudar).

Espero sus respuestas y ojala alguien me pueda ayudar, saludos y suerte!!!
Subir
#2 el 23/04/2012
Viendo el codigo por encima (el cual esta MUY bien hecho y documentado), tienes que cambiar esto:

// Number of digital inputs. Can be anywhere from 0 to 18.
#define NUM_DI 12
// Number of analogue inputs. Can be anywhere from 0 to 6.
#define NUM_AI 6


Por el numero de entradas analogicas y digitales que usaras. Si son 16 potes y 30 botones, pues, quedaria asi:

// Number of digital inputs. Can be anywhere from 0 to 18.
#define NUM_DI 32
// Number of analogue inputs. Can be anywhere from 0 to 6.
#define NUM_AI 16


Ademas de eso, en esta parte del codigo:

// Array containing a mapping of digital pins to channel index. This array size must match NUM_DI above.
byte digitalInputMapping[NUM_DI] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
// Array containing a mapping of analogue pins to channel index. This array size must match NUM_AI above.
byte analogueInputMapping[NUM_AI] = { A0, A1, A2, A3, A4, A5 };


Deberas colocar los pines que consideraras usar, desde el 0, hasta el 31 (en dado caso de que uses 32 botones), para analógico y digital. No se como sera la arquitectura de arduino, pero me imagino que quedaria asi:

byte digitalInputMapping[NUM_DI] = { 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 };
byte analogueInputMapping[NUM_AI] = { A0, A1, A2, A3, A4, A5, A7, A8, A9, A10, A11, A12, A13, A14, A15 };


PERO OJO! Esto es, asumiendo que uses un arduino que tenga tantas entradas digitales y analogicas. 8-[

De antemano, dudo que tengas 32 entradas numeradas de esa forma en un arduino, pero no lo se con certeza, porque la verdad nunca he programado para esa arquitectura, y ni idea de como son las librerias que tra arduino para compilar este programa.

Tambien te anuncio que un arduino UNO no te servira, no al menos directamente para tu proyecto, puesto que tiene un máximo de 6 entradas analogicas, y 14 digitales (me imagino que menos que eso, asumiendo que dos de estas patillas sirvan para los puertos seriales).

Si quieres lanzarte en una aventura de esas, podrias, o bien hacer multiplexado de señales (estos modulos te vendrian bien: (http://www.ucapps.de/mbhp_ain.html y http://www.ucapps.de/mbhp_din.html , pero esto requerira que te sientes un buen rato a entender los circuitos y hacer el codigo de nuevo) o, un camino mucho mas simple, buscarte un arduino mas grande (seguro que el Mega te viene de lujo).

Porfavor... no se te olvide colocar fotos de tu proyecto. ;)

Saludos.

"Reflexionando un poco, un frullato (flutter-tonguing, flatterzunge) es un LFO aplicado a la amplitud de un voltaje que entra en un VCO."

Nuevo tema: http://soundcloud.com/betances/miodesopcias

Subir
#3 el 23/04/2012
Hola compañero gracias por la respuesta, utilizo una placa arduino mega 2560 que tiene 16 entradas analogicas y mas de 40 digitales, creo que con eso sera suficiente para mi proyecto, ¿lo que tengo que cambiar, solo lo cambio tal como tu me lo escribes?, osea ¿Solo lo copio y lo reemplazo en el codigo por las cosas que tu me estas poniendo?.

Gracias por tu respuesta y por la ayuda, y claro cuando lo termine subire imagenes y un video del cacharro funcionando, saludos y suerte!!!
Subir
#4 el 23/04/2012
Haz esos cambios y compilalo, a ver que tal. Lo peor que puede pasar, es que no compile.

El proyecto es totalmente factible.

El codigo, por suerte, es muy simple. Tiene 70% de comentarios y solo 30% de codigo. :desdentado:

Me avisas como va.

PD: Aca analizando, no capto por que en esta linea:

byte digitalInputMapping[NUM_DI] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };

comienza con 2, y no con 0. Intuyo que es porque 0 y 1 son patillas para I/O seriales, pero no lo se con certeza. Vere el datasheet a ver que tal.

"Reflexionando un poco, un frullato (flutter-tonguing, flatterzunge) es un LFO aplicado a la amplitud de un voltaje que entra en un VCO."

Nuevo tema: http://soundcloud.com/betances/miodesopcias

Subir
#5 el 23/04/2012
Si. En efecto, 0 y 1 son, respectivamente, RX y TX. De ahi conectarias los viejos Din5 que por desgracia a los fabricantes les ha dado por omitir. :tasmal:

En el mega, 0 y 1 tambien son RX y TX, pero es que... tambien hay otros puertos en lo que va desde 14 hasta 21. Al menos en PIC, estos puertos vienen como default como IO digitales paralelos, no seriales. No se si aca sea igual. Si es igual, no hay de que preocuparse... ahora, si vienen por default en serial, hay que configurarlos con codigo para que sean paralelos.

Ahi creo que necesitaremos a Mudo. :desdentado:

Pero ensambla tu cosa, y me dices que tal.

"Reflexionando un poco, un frullato (flutter-tonguing, flatterzunge) es un LFO aplicado a la amplitud de un voltaje que entra en un VCO."

Nuevo tema: http://soundcloud.com/betances/miodesopcias

Subir
#6 el 24/04/2012
Hola betances , prove el codigo tal como esta y al parecer funciona, no he cambiado nada del codigo pero lo voy ha hacer, he logrado hacer que un potenciometro conectado a la salida analoga A0 en la pata central del potenciometro, la salida de 5v a una pata lateral y en la otra pata lateral GND (que creo es tierra) , mueva un parametro en traktor (la ecualizacion de medios), sin embargo el parametro asignado aunque funciona como que brinca, es decir en le programa el potenciometro digital del medios brinca o tiembla (como si tuviera parkinson), no entiendo por que suceda esto. Para lograr la comunicacion entre la placa y traktor uso dos programas, el serial midi converter v2d y el midi joke.

Cargo el sketch en arduino, lo compilo y todo bienm lo cargo en la placa y todo bien, abro el serial midi converter, selecciono el porta 3 (que es por el cual se conecta la placa al pc), despues seleciono midi port 1 midi joke como entrada y midi port 2 midi joke 2 como salida, de esta forma se crea uncable midi virtual que debe conectar la placa arudino con el traktor, al mometno de asignar un parametro en traktor, seleciono el parametro y al cuando quiero asignarlo a midi los valores osilan como locos, es decir si asigno el potencimetro virtual de la ecualizacion media deberia quedarsae fijo en una señal midi digamos canal 4 cc26, pero en vez de esto cambia como loco de parametro, asigno a alguno y despues en traktor lo que asigno tiembla, es raro y tal vez ni yo me entiendo jajajaja

¿Cual sera el problema, el codigo que esta mal? , ¿La comunicacion entre la placa, el serial midi converter y el midi joke? no se que suceda agradeceria cualquier ayuda, saludos y suerte!!!
Subir
#7 el 24/04/2012
Alguien escribió:
sin embargo el parametro asignado aunque funciona como que brinca, es decir en le programa el potenciometro digital del medios brinca o tiembla


Varias cosas:

1. Que es "potenciometro digital"? usas realmente un potenciometro digital, o que? Tu potenciometro es asi?

potenciometro1.jpg

2. Cuando dejas el potenciometro quieto, no deberia moverse. Ahora... cuando le pones un dedo encima, asi sea para no moverlo, es normal que se tambalee el digito. Por mucho pulso que tengas, siempre temblaras un minimo con la mano (el minimo para que veas que se mueve como con parkinson).

3. Si no tienes nada conectado a las entradas analogicas, es normal que el integrado haga LECTURAS ALEATORIAS de esas entradas. Por eso es que ves que se mueve como loco todo. :mrgreen:

Te recomiendo que pongas TODOS los potenciometros, correctamente soldados, y luego, pruebes. No sueldes nada a la placa. Usa cables con conectores especiales.

Nos avisas.

"Reflexionando un poco, un frullato (flutter-tonguing, flatterzunge) es un LFO aplicado a la amplitud de un voltaje que entra en un VCO."

Nuevo tema: http://soundcloud.com/betances/miodesopcias

Subir
#8 el 24/04/2012
Tambien se me ocurre, si luego de conectar todo sigue tambaleandose, es que la alimentacion que le estas dando al aparato no esta filtrada correctamente, o quizas estas jalando demasiada corriente y estas tumbando la tension.

Con que alimentas el circuito? Con el USB?

Si es con el USB, queda descartado eso.

Los potenciometros, de que valores son? Si son de valores muy chicos, hay riezgo de que cuando pongas 16 en paralelo hagan una resistencia muy chica que tumbe la tension. :!:

Potes de 10k o mas tienden a ser ideales para tu proyecto.

"Reflexionando un poco, un frullato (flutter-tonguing, flatterzunge) es un LFO aplicado a la amplitud de un voltaje que entra en un VCO."

Nuevo tema: http://soundcloud.com/betances/miodesopcias

Subir
#9 el 24/04/2012
Hola compañero betances, primero que nada gracias por tu ayuda, en verdad me estas ayudando mucho y te lo agradesco :plasplas: :birras: :ook: .

Respecto a tus observaciones te explico:

1.-"Que es "potenciometro digital"? usas realmente un potenciometro digital, o que? Tu potenciometro es asi?"

Un potenciometro digital es la representacion que hace el programa de un potenciometro real, es decir yo tengo un potenciometro real como el que tu me pones en la imagen, y en el programa ese potenciometro tiene una represenacion, en mi caso representa un potenciometro para manejar la ecualizacion de medios, a travez de arduino mi idea es controlar ese potenciometro "digital" de tracktor con el potenciometro real (te dejo una imagen de como es un potenciometro digital en tracktor).


2. "Cuando dejas el potenciometro quieto, no deberia moverse. Ahora... cuando le pones un dedo encima, asi sea para no moverlo, es normal que se tambalee el digito. Por mucho pulso que tengas, siempre temblaras un minimo con la mano (el minimo para que veas que se mueve como con parkinson)."

El potenciometro digital tiembla como loco, es decir muevo el potenciometro fisico y se mueve en el programa , pero al soltarlo deberia quedarse quieto y asignado pero en el programa tiembla como si lo estuviera moviendo , es decir pequeños saltos de un lado a otro (y mi pulso no es el de un cirujano pero tampoco el de un adolesente puberto frente al ordenador un viernes en la noche jejejeje ) . Lo raro es que al asignar el parametro , las lecturas midi que me da no son estables oscilan demasiado, saltan entre muchisimos parametros.




3. "Si no tienes nada conectado a las entradas analogicas, es normal que el integrado haga LECTURAS ALEATORIAS de esas entradas. Por eso es que ves que se mueve como loco todo. :mrgreen:"

Prove con un potenciometro conectado a la salida digital A0, 5v y GND, pata central para digital y las laterales para 5v y Gnd y seguia haciendo lo que te comento de que brinca el potenciometro y me manda mensajes midi confusos, quite el potenciometro y sigue haciendo lo mismo, el potencometro fue de 2k y de 5k, en la tarde pruebo con uno de 50k.


Voy a probar conectando todas las piesas soldadas y haciendo la prueba con la placa a ver si funciona.

La alimentacion de la placa es via usb, entonces no creo que ese sea el problema, use potenciometros para la prueba de 5 y 2 k , provare con potenciometros de 50k, sin embargo es raro que sin nada conectado sigue mandando señales confusas. Creo que el problema es ta en la velocidad con la que se envian los datos midi desde arduino al midi serial converter, la cual es 115000 o algo asi, ¿tu sabes algo de esto?, ¿en el codigo de arduino donde puedo cambiar esto?



Gracias por la ayuda, espero tu respuesta, saludos y suerte!!!!
Archivos adjuntos:
potenciometro digital.jpg
Subir
#10 el 24/04/2012
Encontre algo sobre la velocidad de transferencia en este post http://www.hispasonic.com/foros/convertidor-serial-data-to-midi-data/199127 lo intente pero sigue el problema de osilacion , no se bien como hacerlo cambie unas cosas en el codigo de arduino como menciona en el post pero no paso nada, la unica velocidad de transferencia de datos a la que me funciona es a 115000 o algo asi, en el post sugieren que la cambie a 32000 o algo asi, la cambie en el codigo de arduino, en el programa para programar en arduino y en serial midi converter y sigue el problema, ¿alguna sugerencia?
Subir
#11 el 24/04/2012
Betances ¿podrias pasarme tu mail o tu contacto en facebook para tener comunicacion mas rapida y directa?. Saludos y suerte!!!
Subir
#12 el 24/04/2012
Alguien escribió:
Un potenciometro digital es la representacion que hace el programa de un potenciometro real, es decir yo tengo un potenciometro real como el que tu me pones en la imagen, y en el programa ese potenciometro tiene una represenacion, en mi caso representa un potenciometro para manejar la ecualizacion de medios, a travez de arduino mi idea es controlar ese potenciometro "digital" de tracktor con el potenciometro real (te dejo una imagen de como es un potenciometro digital en tracktor).


Ah... ok ok. Asi si. :desdentado:

Alguien escribió:
El potenciometro digital tiembla como loco, es decir muevo el potenciometro fisico y se mueve en el programa , pero al soltarlo deberia quedarse quieto y asignado pero en el programa tiembla como si lo estuviera moviendo , es decir pequeños saltos de un lado a otro (y mi pulso no es el de un cirujano pero tampoco el de un adolesente puberto frente al ordenador un viernes en la noche jejejeje ) . Lo raro es que al asignar el parametro , las lecturas midi que me da no son estables oscilan demasiado, saltan entre muchisimos parametros.


El problema es de codigo entonces. Lo mas seguro que este pasando aca, es que estas enviando en el mismo canal los parametros que lee de tu potenciometro, y de otras entradas simultaneamente. Vere el codigo otra vez, porque ahora que lo pienso, hemos establecido las entradas, y el numero de ellas, pero no hemos decidido que parametro midi corresponde a cada entrada. :!:

Alguien escribió:
Prove con un potenciometro conectado a la salida digital A0, 5v y GND, pata central para digital y las laterales para 5v y Gnd


Ojo. La pata centra SIEMPRE debe ir a la entrada analogica del arduino. Ni se te ocurra conectarlo de otra forma.


Haz una prueba con el código original, sin cambios. Si funciona perfecto, pues, nos sentamos a ver el código.

"Reflexionando un poco, un frullato (flutter-tonguing, flatterzunge) es un LFO aplicado a la amplitud de un voltaje que entra en un VCO."

Nuevo tema: http://soundcloud.com/betances/miodesopcias

Subir
#13 el 28/01/2014
Hola, soy nuevo en esto y estoy intentando construir mi primer controlador midi, me he guiado por un post de vuestra pagina (http://www.hispasonic.com/foros/mi-1er-controlador-midi-arduino/382085),despues de haber realizado las conecciones y programado la placa los valores son inestables y al probarlos en ableton el potenciometro virtual oscila demasiado . yo estoy trabajando con :
- placa arduino uno
- 6 potenciometros analogos de 10k
Mi pregunta es la siguinte , es correcto el codigo que estoy empleando para dicho proyecto o habra ruido electrico que descontorla la señal
aqui os dejo el codigo y el plano

void setup()
{
Serial.begin(31250); // Default speed of MIDI serial port
pinMode(13, OUTPUT); // Light LED on pin 13 to notify of readynes
digitalWrite(13, HIGH);
}

int iAn0Val=0;
int iAn1Val=0;
int iAn2Val=0;
int iAn3Val=0;
int iAn4Val=0;

void loop()
{

//1
int iAn0ValPrev = iAn0Val;
iAn0Val = analogRead(0)/8;
analogPinMidiTX(1,iAn0Val,iAn0ValPrev);

//2
int iAn1ValPrev = iAn1Val;
iAn1Val = analogRead(1)/8;
analogPinMidiTX(2,iAn1Val,iAn1ValPrev);

//3
int iAn2ValPrev = iAn2Val;
iAn2Val = analogRead(2)/8;
analogPinMidiTX(3,iAn2Val,iAn2ValPrev);

//4
int iAn3ValPrev = iAn3Val;
iAn3Val = analogRead(3)/8;
analogPinMidiTX(4,iAn3Val,iAn3ValPrev);

//5
int iAn4ValPrev = iAn4Val;
iAn4Val = analogRead(4)/8;
analogPinMidiTX(5,iAn4Val,iAn4ValPrev);

}

void analogPinMidiTX(int iChan, int iVal, int iValPrev)
{
//only TX the value over midi if it is changed, as to prevent spamming the midi port and thus confusing the receiving application in learning mode
if(iValPrev != iVal)
{
MidiTX(176,iChan,iVal);
}
}

void MidiTX(unsigned char MESSAGE, unsigned char CONTROL, unsigned char VALUE) //pass values out through standard Midi Command
{
Serial.print(MESSAGE);
Serial.print(CONTROL);
Serial.print(VALUE);
}
Archivos adjuntos:
Captura de pantalla - 280114 - 20:31:57.png
Subir
#14 el 28/01/2014
Hola yo tuve el mismo problema y al parecer todos los que hicieron el proyecto también, el autor de post señala que tuvo el mismo problema, sin embargo existe un post parecido en donde el autor hizo un controlador midi también con arduino y las demás personas que lo hicieron tuvieron el mismo problema; una persona preguntaba sobre esto y el autor del post le decía que era problema del cable de tierra (o masa no se como le llames tu) o si no problema del código, no recuerdo bien pero creo al final se soluciono, te dejo el otro post de una pagina llamada indestructables, la info viene en ingles (motivo por el cual no entendí bien la solución), lee los comentarios que vienen en la parte de abajo, en unos de ellos hablan del problema que tienes, si puedes solucionar el problema me gustaría que me pasaras la info para lograr hacer funcionar de manera correcta mi controlador.


http://www.instructables.com/id/Arcade-Button-MIDI-Controller/?lang=es


Saludos y suerte!!!
Subir
Respuesta rápida
Identíficate o regístrate para poder responder en este hilo.