Advertentie
Als muzikant die een verzameling muziekinstrumenten en noise boxes heeft verzameld, is de bescheiden Arduino het perfecte hulpmiddel om een aangepaste MIDI-controller te maken. Terwijl de Raspberry Pi misschien de kroon heeft genomen Internet of Things (IoT) The Internet of Things: 10 nuttige producten die u in 2016 moet proberenHet internet der dingen groeit in 2016, maar wat betekent dat precies? Hoe profiteert u persoonlijk van het internet der dingen? Hier zijn een paar handige producten om te illustreren. Lees verder projecten, een simpele Arduino Uno (wat zijn de verschillende soorten Arduino? Arduino Koopgids: welk bord moet je kopen?Er zijn zoveel verschillende soorten Arduino-kaarten dat het je vergeven zou worden als je in de war bent. Welke moet je kopen voor je project? Laat ons helpen met deze Arduino-koopgids! Lees verder ) heeft meer dan genoeg power voor dit project.
Voor het eerst een Arduino gebruiken? Geen zorgen, we hebben een complete Arduino beginnershandleiding Aan de slag met Arduino: een beginnershandleidingArduino is een open-source prototypeplatform voor elektronica, gebaseerd op flexibele, gebruiksvriendelijke hardware en software. Het is bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees verder om door te lezen voordat u dit project aanpakt.
Wat is MIDI?
MIDI staat voor Musical Instrument Digital Interface. Het schetst een standaardmanier waarop muzikale apparaten met elkaar kunnen communiceren. Als je een elektronisch toetsenbord bezit, heb je waarschijnlijk een MIDI-interface. Hoewel er een paar technische details zijn bij de implementatie van MIDI, is het belangrijk om te onthouden dat MIDI geen audio is! MIDI-data is een eenvoudige set instructies (één instructie wordt een 'bericht' genoemd) die een ander apparaat kan implementeren om verschillende geluiden of besturingsparameters te maken.
MIDI ondersteunt 16 kanalen. Dit betekent dat elke kabel 16 verschillende apparaten kan ondersteunen die onafhankelijk met elkaar communiceren. Apparaten worden aangesloten met een 5-pins DIN-kabel. DIN staat voor "German Institute for Standardization" en is gewoon een kabel met vijf pinnen in de connector. USB wordt vaak gebruikt in plaats van 5-pins DIN, of er kan een USB-MIDI-interface worden gebruikt.
Control Change en Program Change
Er zijn twee hoofdtypen MIDI-berichten: Control Change en Program Change.
Control Change (CC) -berichten bevatten een controllernummer en een waarde tussen 0 en 127. CC-berichten worden vaak gebruikt om instellingen zoals volume of toonhoogte te wijzigen. Apparaten die MIDI accepteren, moeten worden geleverd met een handleiding waarin wordt uitgelegd welke kanalen en berichten standaard zijn ingesteld en hoe ze kunnen worden gewijzigd (ook wel MIDI-toewijzing genoemd).
Program Change (PC) -berichten zijn eenvoudiger dan CC-berichten. Pc-berichten bestaan uit één nummer en worden gebruikt om de preset of patch op een apparaat te wijzigen. PC-berichten worden ook wel "Patch Change" genoemd. Net als bij CC-berichten moeten fabrikanten een document overleggen waarin wordt uitgelegd welke voorinstellingen door een bepaald bericht worden gewijzigd.
Wat je nodig zult hebben
- Arduino
- 5-polige vrouwelijke DIN-bus
- 2 x 220 ohm weerstanden
- 2 x 10k ohm weerstanden
- 2 x kortstondige schakelaars
- Aansluitdraden
- Broodplank
- MIDI-kabel
- MIDI-apparaat of USB-interface
Bouw plan
Dit project zal vrij eenvoudig zijn. U kunt natuurlijk meer knoppen of hardware toevoegen om aan uw behoeften te voldoen. Bijna elke Arduino is geschikt - voor dit voorbeeld zijn slechts drie pinnen nodig. Dit project bestaat uit twee knoppen om het programma te besturen, een MIDI-poort om de gegevens te verzenden en een apparaat om de berichten te ontvangen. Dit circuit is gebouwd op een broodplank Elektronica voor beginners: 10 vaardigheden die u moet kennenVelen van ons hebben nog nooit een soldeerbout aangeraakt, maar dingen maken kan ongelooflijk lonend zijn. Hier zijn tien van de meest elementaire DIY-elektronicavaardigheden om u op weg te helpen. Lees verder hier is het echter mogelijk om het over te brengen naar een projectdoos en gesoldeerde connectoren voor een robuuste oplossing.
Circuit vergadering
MIDI-verbinding
Sluit uw MIDI-aansluiting als volgt aan:
- MIDI pin 5 naar Arduino Transmit (TX) 1 via een 220 ohm weerstand
- MIDI pin 4 naar Arduino + 5V via een weerstand van 220 ohm
- MIDI pin 2 naar Arduino ground
Knopverbinding
De knoppen werken door de weerstand te veranderen die de Arduino "ziet". De Arduino-pin gaat rechtstreeks door de schakelaar naar aarde (LAAG) via een 10k ohm weerstand (een “pull down” weerstand, waardoor de waarde laag blijft). Wanneer de knop wordt ingedrukt, verandert de waarde die door het circuit wordt gezien naar + 5v zonder weerstand (HOOG). De Arduino kan deze wijziging detecteren met de digitalRead (pin) commando. Sluit de knoppen aan op pinnen 6 en 7 op de Arduino digitale invoer / uitvoer (I / O). Verbind beide knoppen:
- Linkerzijde van knop tot + 5V
- Rechterkant van de knop naar Arduino Ground via een weerstand van 10k ohm
- Rechterkant van knop naar Arduino-pin (6 of 7)
MIDI-testen
Nu alle hardware klaar is, is het tijd om het te testen. Je hebt een USB-MIDI-interface nodig (veel audio-interfaces kunnen dit doen) en een MIDI-kabel. De MIDI-poort die op het breadboard is aangesloten, verzendt gegevens, dus het is de uitvoer. Uw computer ontvangt de gegevens, daarom is het de invoer. Dit project maakt gebruik van de uitstekende Arduino MIDI-bibliotheek v4.2 van Forty Seven Effects. Nadat u de bibliotheek heeft geïnstalleerd, kunt u deze in uw code opnemen door naar te gaan Schets> Bibliotheek opnemen> MIDI.
Je hebt ook een programma nodig om de binnenkomende MIDI-data te controleren:
- MIDI-monitor voor OS X
- MIDI-OX voor ramen
- KMidimon voor Linux
Sluit de Arduino aan Aan de slag met uw Arduino-starterkit - Stuurprogramma's installeren en het bord en de poort instellenDus je hebt een Arduino-starterkit voor jezelf gekocht, en mogelijk enkele andere willekeurige coole componenten - wat nu? Hoe begin je eigenlijk met het programmeren van dit Arduino-ding? Hoe stel je het in ... Lees verder naar uw computer en upload de volgende testcode (vergeet niet het juiste bord en de juiste poort te selecteren vanaf de Extra> Bord en Extra> Poort menu's).
#include
#include
#include
#include
#include MIDI_CREATE_INSTANCE (HardwareSerial, Serial, midiOut); // maak een MIDI-object met de naam midiOut void setup () {Serial.begin (31250); // setup-serie voor MIDI. } void loop () {midiOut.sendControlChange (56,127,1); // stuur een MIDI CC - 56 = noot, 127 = snelheid, 1 = kanaalvertraging (1000); // wacht 1 seconde midiOut.sendProgramChange (12,1); // stuur een MIDI PC - 12 = waarde, 1 = kanaalvertraging (1000); // wacht 1 seconde. }
Deze code verzendt een CC-bericht, wacht 1 seconde, stuur een pc-bericht en wacht vervolgens 1 seconde voor onbepaalde tijd. Als alles correct werkt, zou er een bericht op je MIDI-monitor moeten verschijnen.
Als er niets gebeurt, raak dan niet in paniek! Probeer het oplossen van problemen:
- Zorg ervoor dat alle verbindingen correct zijn
- Controleer of de MIDI-poort correct is bedraad - er moeten 2 reservepinnen aan de buitenranden zijn
- Controleer nogmaals of het circuit correct is
- Controleer of het circuit is aangesloten op een USB-MIDI-interface met een MIDI-kabel
- Controleer of uw MIDI-kabel is aangesloten op de invoer op uw USB-MIDI-interface
- Zorg ervoor dat de Arduino stroom heeft
- Installeer het juiste stuurprogramma voor uw USB-MIDI-interface
Als je bent nog steeds met problemen is het misschien de moeite waard om je breadboard te controleren. Goedkope borden kunnen soms erg inconsistent en van lage kwaliteit zijn - het overkwam mij tijdens het werken aan dit project.
Knop testen
Nu is het tijd om te testen of de knoppen correct werken. Upload de volgende testcode. MIDI hoeft niet te zijn aangesloten om dit onderdeel te testen.
const int buttonOne = 6; // wijs knoppin toe aan variabele. const int buttonTwo = 7; // wijs knop pin toe aan variabele leegte setup () {Serial.begin (9600); // setup serie voor tekst pinMode (buttonOne, INPUT); // setup-knop als invoer pinMode (buttonTwo, INPUT); // setup-knop als invoer. } void loop () {if (digitalRead (buttonOne) == HIGH) {// check button state delay (10); // software de-bounce if (digitalRead (buttonOne) == HIGH) {// controleer opnieuw de status van de knop Serial.println ("Button One Works!"); // log resultaat vertraging (250); }} if (digitalRead (buttonTwo) == HIGH) {// controleer de vertraging van de knopstatus (10); // software de-bounce if (digitalRead (buttonTwo) == HIGH) {// controleer de status van de knop opnieuw Serial.println ("Button Two Works!"); // log resultaat vertraging (250); } } }
Voer deze code uit (maar houd de USB-kabel aangesloten) en open de seriële monitor (Rechtsboven> Seriële monitor). Wanneer u op een knop drukt, ziet u 'Button One Works!' of "Button Two Works!" afhankelijk van de knop die je hebt ingedrukt.
Er is een belangrijke opmerking om uit dit voorbeeld te halen: de software de-bounce. Dit is een eenvoudige vertraging van 10 milliseconden (ms) tussen het controleren van de knop en het opnieuw controleren van de knop. Dit verhoogt de nauwkeurigheid van de druk op de knop en helpt ruis te voorkomen die de Arduino activeert. U hoeft dit niet te doen, hoewel het wel wordt aanbevolen.
De controller maken
Nu alles bedraad is en werkt, is het tijd om de volledige controller te monteren.
In dit voorbeeld wordt voor elke ingedrukte knop een ander CC-bericht verzonden. Ik gebruik dit om Ableton Live 9.6 op OS X te besturen. De code is vergelijkbaar met beide bovenstaande testvoorbeelden.
#include
#include
#include
#include
#include const int buttonOne = 6; // wijs knoppin toe aan variabele. const int buttonTwo = 7; // wijs knoppin toe aan variabele MIDI_CREATE_INSTANCE (HardwareSerial, Serial, midiOut); // maak een MIDI-object met de naam midiOut void setup () {pinMode (buttonOne, INPUT); // setup-knop als invoer pinMode (buttonTwo, INPUT); // setup-knop als invoer Serial.begin (31250); // MIDI-uitvoer instellen. } void loop () {if (digitalRead (buttonOne) == HIGH) {// check button state delay (10); // software de-bounce if (digitalRead (buttonOne) == HIGH) {// controleer de status van de knop opnieuw midiOut.sendControlChange (56,127,1); // stuur een MIDI CC - 56 = noot, 127 = snelheid, 1 = kanaalvertraging (250); }} if (digitalRead (buttonTwo) == HIGH) {// controleer de vertraging van de knopstatus (10); // software de-bounce if (digitalRead (buttonTwo) == HIGH) {// controleer de status van de knop opnieuw midiOut.sendControlChange (42,127,1); // stuur een MIDI CC - 42 = noot, 127 = snelheid, 1 = kanaalvertraging (250); } } }
Opmerking - u kunt het niet gebruiken Serial.println () met MIDI-uitgang.
Als u een pc-bericht wilt verzenden in plaats van een CC, vervangt u gewoon:
midiOut.sendControlChange (42,127,1);
Met:
midiOut.sendProgramChange (waarde, kanaal);
In actie
Hieronder vindt u een demonstratie als controller voor Ableton Live (Beste DJ-software voor elk budget De beste DJ-software voor elk budgetGoede mixsoftware kan het verschil maken in uw prestaties. Of je nu een Mac, Windows of Linux gebruikt, elk niveau van vaardigheid en budget is aanwezig als je wilt beginnen met dj'en. Lees verder ). Rechtsboven worden de audiometers weergegeven en in het midden bovenaan de inkomende midi-berichten (via MIDI-monitor op OS X).
Heb je een MIDI-controller gemaakt?
Er zijn veel praktische toepassingen voor een aangepaste MIDI-controller. Je zou een enorme voetgestuurde eenheid kunnen bouwen, of een slanke studiocontroller. En als u er een wilt kopen, volgt u dit de beste USB MIDI-controllers De 9 beste USB MIDI-controllers voor muzikantenOp zoek naar een USB MIDI-controller? Dit zijn de beste MIDI-controllers die je nu kunt kopen, ongeacht het budget. Lees verder u kunt kopen.
Afbeelding tegoed: Keith Gentry via Shutterstock.com
Joe is afgestudeerd in computerwetenschappen aan de universiteit van Lincoln, VK. Hij is een professionele softwareontwikkelaar en als hij niet met drones vliegt of muziek schrijft, kan hij vaak foto's of video's maken.