Midi-keyboard aansturen met Arduino

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 2
Geregistreerd: 23 Dec 2013, 14:55

Midi-keyboard aansturen met Arduino

Berichtdoor basboy12 » 23 Dec 2013, 15:28

Hallo allemaal,

ik ben hier nieuw op t forum en heb al gelijk een vraag..

Samen met 3 andere leerlingen uit vwo 5 van mijn school, zijn we bezig met een project voor het vak O&O (Onderzoek & Ontwerpen). Het doel van dit project is om kinderen op de basisscholen meer te leren over geluid, muziek en sensoren. We hebben al een synthesizer, gebaseerd op de auduino (http://code.google.com/p/tinkerit/wiki/Auduino), weten te maken. Hiermee kunnen we verschillende begrippen zoals toonhoogte, amplitude etc laten zien aan de kinderen.

Echter, we zijn ook van plan om de kinderen zelf instrumenten te laten maken. Kinderen kunnen met een speciale geleidende verf instrumenten verven. Het principe is een beetje lastig uit te leggen, maar op deze 2 sites kun je zien wat ik
bedoel: http://musicink.co/ http://www.instructables.com/id/Capacitive-Touch-Arduino-Keyboard-Piano/

Het is ons gelukt om het idee van de 2e site te maken, maar we zitten nu met een probleem. We willen er namelijk voor zorgen we zelf de geluidjes kunnen bepalen. De enige manier om dit te doen is door middel met midi te werken.
Er zijn nu 2 mogelijkheden: ervoor zorgen dat de Arduino rechtstreeks midi verzend naar de pc, of de arduino aansluiten op een midi-keyboard.

Aangezien we geen van alleen nooit van arduino hadden gehoord voordat we aan dit project begonnen, zouden we dus ook niet weten hoe we een midi-output maken op de arduino. Daarom hebben we gekozen om met een oud midi-keyboard te werken.

We hebben het keyboard zover uit elkaar gehaald dat we alleen nog de printplaat onder de toetsen overhebben. Dat ziet er zo uit. Afbeelding

In feite werkt het heel simpel, de 2 maantjes zorgen ervoor dat de stroom onderbroken is, wanneer er een toets ingedrukt wordt, wordt het rubber met daarop geleidende verf ingedrukt die de stroom laat doorstromen.
het is dus eigenlijk gewoon een kleine drukschakelaar Afbeelding

Dus om een lang verhaal kort te maken. Wanneer een kind op een van zijn zelfgeverfde toetsen drukt, moet de arduino ervoor zorgen dat de schakelaar IN het midi-keyboard wordt ingedrukt. Het midi-keyboard verzend vervolgens een signaal naar de pc en dan komt er geluid uit.


Het enige probleem waar we nu mee zitten, is dat we niet weten hoe we ervoor kunnen zorgen dat de arduino de schakelaar in het midi-keyboard kan indrukken..

Heeft iemand enig idee hoe we dit voor elkaar kunnen krijgen?

met vriendelijke groet, Bas van Straaten

Advertisement

Gebruikers-avatar
Berichten: 270
Geregistreerd: 30 Dec 2012, 11:42

Re: Midi-keyboard aansturen met Arduino

Berichtdoor Rudi » 24 Dec 2013, 21:02

Aangezien we geen van alleen nooit van arduino hadden gehoord voordat we aan dit project begonnen, zouden we dus ook niet weten hoe we een midi-output maken op de arduino.

Dan is Google, zoals steeds, je vriend.
Een simpele midi interface is snel gemaakt.
Of je gebruikt een shield. Onder andere Sparkfun heeft een midi shield.
Ben je handig dan kan je het shield zelf maken aan de hand van het schema.

Als je opteert om de kontakten van het keyboard te overbruggen (wat het eenvoudigst lijkt maar het minst flexibel is): dat kan door het maakkontakt van een door de Arduino gestuurd relais. Eentje per toets, wat niet alleen omslachtig is maar ook veel duurder en meer werk vraagt. Nog een beperking: voor 1 volledig oktaaf heb je al meteen 12 relais nodig en zal je moeten uitkijken naar een geschikt relais shield. Wat meteen 24 verbindingen tussen keyboard en relais shield impliceert.
Arduinows!
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001

Berichten: 2
Geregistreerd: 23 Dec 2013, 14:55

Re: Midi-keyboard aansturen met Arduino

Berichtdoor basboy12 » 11 Jan 2014, 22:40

bedankt voor de reactie,

Het is inmiddels al deels gelukt. Door een andere software op de arduino te installeren, verschijnt de arduino als een midi-apparaat in windows. Ik heb dit gecombineerd met Touchcapacitive sensoren. Zodra je op bijvoorbeeld een stukje aluminium drukt, wordt er een midi-signaal naar de pc gestuurd.

Er is echter nog een probleem, met de huidige code wordt er bij één aanraakmoment meerdere midi-signalen verstuurd van dezelfde noot.

de code voor één noot ziet er zo uit. in dit geval de c5 als voorbeeld:

Code: Alles selecteren
#include <CapacitiveSensor.h>

CapacitiveSensor   cs_2_3 = CapacitiveSensor(2,3);

int velocity = 100;//velocity of MIDI notes, must be between 0 and 127
 //(higher velocity usually makes MIDI instruments louder)
 
 int noteON = 144;//144 = 10010000 in binary, note on command

void setup() {
  //  Set MIDI baud rate:
  Serial.begin(31250);

}

void loop() {
 
  long total1 =   cs_2_3.capacitiveSensor(30);

if (total1 > 500) {
    for (int note=48;note<49;note++) {//from note 50 (D3) to note 69 (A4)
    MIDImessage(noteON, note, velocity);//turn note on
    delay(500);//hold note for 300ms
    MIDImessage(noteON, note, 0);}}//turn note off

}
//send MIDI message
void MIDImessage(int command, int MIDInote, int MIDIvelocity) {
  Serial.write(command);//send note on or note off command
  Serial.write(MIDInote);//send pitch data
  Serial.write(MIDIvelocity);//send velocity data
}




zoals je kunt zien in code: wanneer ik sensor1 aanraak, wordt er een midisignaal naar de pc gestuurd zodat de toon c5 aan gaat, vervolgens wacht de arduino 0,5s en zendt hij weer een signaal zodat de toon c5 uitgaat. en dan herhaalt het proces zich weer. Dus als ik de sensor voor meer dan 0,5s aanraak, hoor de elke 0,5s de noot c5. Ik wil juist dat de noot maar één keer klinkt bij één keer aanraken van de sensor, ongeacht hoelang ik de sensor aanraak.

Ik heb al geprobeerd om zonder een delay te werken of te zorgen dat de midinoot uitgaat onder een waarde van 500, maar dit resulteerde alleen maar in een nog snellere herhaling van de midinoten.

Weet iemand toevallig wat ik moet veranderen in de code zodat bij aanraking van de sensor de midinoot aangaat, en bij het loslaten van de sensor de midinoot weer uitgaat?

met vriendelijke groet,
Bas van Straaten

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten