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:
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:[ Imagen no disponible ]
Espero que os guste, es muy fácil y molón
Saludos!
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:[ Imagen no disponible ]
Espero que os guste, es muy fácil y molón
Saludos!