Teclado MIDI de papel con Arduino

#1 por Man with the x-ray eyes el 18/01/2015
Hola amigos,
Aquí os subo otro proyecto gracioso con Arduino: Un teclado controlador MIDI ¡hecho de papel!
Solo he hecho una versión de prototipo, con 7 notas (Do-Si) aunque se podrían hacer 12 fácilmente.
Lo hice basándome en este proyecto: https://www.copy.com/s/brrTUR3NBIZp/2.%20DIY%20Piano en el que hace un pianito que emite sonido. Pero sabiendo que el Arduino no puede generar grandes sonidos decidí hacerle unos cambios y hacerlo MIDI.

La base del proecto es que el grafito es conductor, entonces al pulsar una tecla pintada, la corriente circula por el camino de grafito que has pintado.

Materiales:

1 Arduino
1 PCB o 1 Placa de prototipado.
7 Resistencias de 10M.
1 Resistencia de220 Ohm.
1 Conector MIDI macho.
7 Clips.
1 Lápiz 2B. (cuanto más blando mejor, más conductor)
Cables.
Papel para pintar el piano.

Código:
Alguien escribió:
/* DIY MIDI Piano

- DIY Piano with Arduino.
- ONLY needed some very cheap materials,
e.g. pencil, A4 paper, paper clip, speaker, male-to-male jumper, breadboard and Arduino Uno board.
- Of course the Arduino Uno board is not cheap, but it is reusable for other projects too. So it is worth to own one.

- This project using the concept of capasitive sensor, so no switch/button is required for it.
- Here is the link of capacitive sensor. For better understanding, please visit the page.
http://playground.arduino.cc//Main/CapacitiveSensor?from=Main.CapSense



Created by:
Oh Hai Seng || Junny Oh 07 November 2013
Midified by The Man With the X-Ray Eyes on December 2014
*/



// Import the CapacitiveSensor Library.
#include <CapacitiveSensor.h>



// Set the Send Pin & Receive Pin.
CapacitiveSensor cs_2_3 = CapacitiveSensor(2,3); // 10M resistor between pins 4 & 2, pin 2 is sensor pin, add a wire and or foil if desired
CapacitiveSensor cs_2_4 = CapacitiveSensor(2,4); // 10M resistor between pins 4 & 6, pin 6 is sensor pin, add a wire and or foil
CapacitiveSensor cs_2_5 = CapacitiveSensor(2,5); // 10M resistor between pins 4 & 8, pin 8 is sensor pin, add a wire and or foil
CapacitiveSensor cs_2_6 = CapacitiveSensor(2,6); // 10M resistor between pins 4 & 8, pin 8 is sensor pin, add a wire and or foil
CapacitiveSensor cs_2_7 = CapacitiveSensor(2,7); // 10M resistor between pins 4 & 8, pin 8 is sensor pin, add a wire and or foil
CapacitiveSensor cs_2_8 = CapacitiveSensor(2,8 ); // 10M resistor between pins 4 & 8, pin 8 is sensor pin, add a wire and or foil
CapacitiveSensor cs_2_9 = CapacitiveSensor(2,9); // 10M resistor between pins 4 & 8, pin 8 is sensor pin, add a wire and or foil

int Do = 72;
int Re = 74;
int Mi = 76;
int Fa = 77;
int Sol = 79;
int La = 81;
int Si = 83;
int lasttotal1 =0;
int lasttotal2 =0;
int lasttotal3 =0;
int lasttotal4 =0;
int lasttotal5 =0;
int lasttotal6 =0;
int lasttotal7 =0;

void setup()
{
cs_2_3.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example

// Arduino start communicate with computer.
Serial.begin(31250);
}

void loop()
{
// Set a timer.
long start = millis();



// Set the sensitivity of the sensors.
long total1 = cs_2_3.capacitiveSensor(3);//con valores más altos (30 originalmente), la nota se repetía
long total2 = cs_2_4.capacitiveSensor(3);
long total3 = cs_2_5.capacitiveSensor(3);
long total4 = cs_2_6.capacitiveSensor(3);
long total5 = cs_2_7.capacitiveSensor(3);
long total6 = cs_2_8.capacitiveSensor(3);
long total7 = cs_2_9.capacitiveSensor(3);




// When hand touches the sensor send a MIDI message
// I set a threshold for it, so that the sensor won't be too sensitive.

if (total1 < 1000){
noteOn(0x90, Si, 0x00);
}
else if (total1 > 1000 && lasttotal1 > 1000) {
}
else {
noteOn(0x90, Si, 0x45);
}

if (total2 < 1000){
noteOn(0x90, La, 0x00);
}
else if (total2 > 1000 && lasttotal2 > 1000){
}
else {
noteOn(0x90, La, 0x45);
}

if (total3 < 700) {
noteOn(0x90, Sol, 0x00);
}
else if (total3 > 700 && lasttotal3 > 700) {
}
else {
noteOn(0x90, Sol, 0x45);
}

if (total4 < 700) {
noteOn(0x90, Fa, 0x00);
}
else if (total4 > 700 && lasttotal4 > 700) {
}
else {
noteOn(0x90, Fa, 0x45);
}

if (total5 < 1000) {
noteOn(0x90, Mi, 0x00);
}
else if (total5 > 1000 && lasttotal5 > 1000) {
}
else {
noteOn(0x90, Mi, 0x45);
}

if (total6 < 2000) {
noteOn(0x90, Re, 0x00);
}
else if (total6 > 2000 && lasttotal6 > 2000) {
}
else {
noteOn(0x90, Re, 0x45);
}

if (total7 < 2000) {
noteOn(0x90, Do, 0x00);
}
else if (total7 > 2000 && lasttotal7 > 2000) {
}
else {
noteOn(0x90, Do, 0x45);
}

lasttotal1 = total1;
lasttotal2 = total2;
lasttotal3 = total3;
lasttotal4 = total4;
lasttotal5 = total5;
lasttotal6 = total6;
lasttotal7 = total7;

//delay(10); // arbitrary delay to limit data to serial port
}
void noteOn(int cmd, int pitch, int velocity) {
Serial.write(byte (cmd));
Serial.write(byte (pitch));
Serial.write(byte (velocity));
}





Seguramente tendréis que ajustar los valores de "total 1" "total2"... "total7" para que no se os disparen otros sonidos, porque afecta cuando tocas una tecla a la otra, pero con varias pruebas seguro que lo ajustáis bien. O quizás podéis poner un potenciómetro para ajustar los valores en caliente.. eso estaría bien, pero no se me ocurrió hasta ahora implementarlo.

Esquema:[img]piano_papel_MIDI.png[/img]


Espero que os guste, es muy fácil y molón :tasmal:

Saludos!
Archivos adjuntos:
piano_papel_MIDI.png
BBCode:
Subir
2
#3 por mustang64 el 21/01/2015
Man with... no paras!

=D> =D> =D>
Subir
1
#4 por Man with the x-ray eyes el 22/01/2015
:guitarra: pues espera que cuelgue lo último que he hecho... Estoy terminando de documentarlo: un pedal controlador para un multiefectos que hice por encargo.
Por cierto aprovecho para decir que este proyecto requiere descargar la librería que pone al principio del código.
A ver si mañana tengo tiempo de subir un vidiete que grabé de esto.
Me alegro de que os haya gustado.
Lo interesante no es evidentemente pintar un piano, sino investigar con otros materiales conductores para hacer un controlador más original. Ahí ya, que cada uno experimente. Espero haber puesto una semillita para algo..
Saludos
Subir
#5 por pasota™ el 22/01/2015
Yo soy un zote en electrónica, pero mis juguetes me hago con los piezos jejeje. Esperando el vídeo Mwtxre...

http://www.fatboyslim.net
http://www.findsounds.com
http://www.soundsnap.com
http://www.freesound.org
http://www.whosampled.com

Subir
#6 por Man with the x-ray eyes el 22/01/2015
Bueno pues aquí van los vídeos. Aviso: más cutres no pueden ser!
El primero es de la versión en la que el Arduino genera audio, no MIDI. Se ve el piano pintado sobre el papel y cómo al tocar el grafito genera el sonido.
El segundo vídeo tiene peor calidad aún, es el MIDI, y además hay una pequeña "trampa" Si os fijáis, y si se llega a ver, no pulso directamente sobre el grafito, sino sobre el cobre adhesivo que sujeta los cables. Lo grabé mientras probaba otros materiales, en este caso sobre el piano de papel reciclado del vídeo anterior, puse imán cortado a medida, sin grandes resultados, y como no tenía un lápiz a mano para remarcar el grafito y que fuese más conductor, pues toqué sobre el cobre. En definitiva es lo mismo, pero luce menos. :mrgreen:
En fin, perdón de nuevo por la escasa calidad de los vídeos.
Saludos!

PD: ¡Y acabo de darme cuenta de que el segundo vídeo está al revés!!! :machaca:
Subir
1
#8 por Mato Mutante el 22/03/2015
hola que tal, ya he montado de nuevo el arduino con este proyecto, aunque yo no necesito que sea en papel, lo he concetado tal como aparece en la foto, he usado un latiguillo con un conector midi, que he conectado a una interface midi usb, por otro lado ¿deberia alimentar la placa con una pila o un transformador? idel conector midi, sigo teniendo el mismo problema, cuando cargo el script se queda el led tx encendido fijo, no se si eso es normal, si quito el usb de arduino del ordenado y lo vuelvo a poner se apaga, pero me da la sensación que se queda inactivo, solo cuando cargo el scrip se enciende el led rx se queda fijo, yo creo que lo he conectado todo bien, la verdad es que no lo se, que opináis? haga lo que haga no parece haber actividad. gracias.
Archivos adjuntos:
IMG_20150322_174248.jpg
BBCode:
IMG_20150322_174335.jpg
BBCode:
IMG_20150322_174345.jpg
BBCode:
Subir
1
#9 por Mato Mutante el 22/03/2015
esta tb
Archivos adjuntos:
IMG_20150322_174414.jpg
BBCode:
Subir
#10 por Man with the x-ray eyes el 22/03/2015
Hola Mutante:
¿Has descargado e instalado la librería? http://playground.arduino.cc//Main/CapacitiveSensor?from=Main.CapSense
¿De qué valor son las resistencias? Parece en la imagen que son de 10K, necesitarías de 10 Megas, que son raras, o por lo menos de un mega.
En cuanto a la alimentación, puedes hacerlo con transformador, pilas, usb o si quieres con un clip de pila de 9v puedes poner el cable negro a ground y el rojo al pin "vin". Da igual com o lo alimentes, no debería afectar.
Un saludo!
Subir
#11 por Mato Mutante el 23/03/2015
hey gracias por responder tan rápido, si, me temo que las resistencias son de 10k, pues creo que va a ser eso, mañana compro las resistencias y lo pruebo, estoy usando las resistencias que hay en el kit de arduno, yo vi el numero 10 y pensé que era eso .
Subir
#12 por Man with the x-ray eyes el 23/03/2015
Las de 10 megas son raras y no las tienen en algunos sitios, pero a partir de un mega deberías empezar a tener resultados. También puedes sumarlas conectándolas en serie si no encuentras valores tan altos. Por cierto, la librería la cargaste correctamente, verdad?
Un saludo
Subir
#13 por Mato Mutante el 23/03/2015
si la libreria la puse, antes de ponerla me daba un error al comprobar el codigo, pero despues sin problema.
Subir
#14 por edgar el 12/10/2015
acordeon controlador midi???
Hola saludos a todos Soy nuevo por aquí, quiero hacer esta pregunta: habría la posibilidad de hacer un acordeón controlador midi con arduino?
me explico, tengo un acordeón de dos octavas 25 teclas, quiero modificarlo para poder tocarlo conectado a través de arduino a un ipod, y desde el iPod cargar soundfonts con alguna aplicación, será esto posible? Si se pudiera además controlar la sensibilidad de la tecla del acordeón?. no soy conocedor de electrónica, pero tengo con quien asesorarme Muchas gracias
Subir
Respuesta rápida

Regístrate o para poder postear en este hilo