Inhoudsopgave:

Een Arduino MIDI-controller bouwen: 9 stappen (met afbeeldingen)
Een Arduino MIDI-controller bouwen: 9 stappen (met afbeeldingen)

Video: Een Arduino MIDI-controller bouwen: 9 stappen (met afbeeldingen)

Video: Een Arduino MIDI-controller bouwen: 9 stappen (met afbeeldingen)
Video: Web Programming - Computer Science for Business Leaders 2016 2024, November
Anonim

Deze instructable is oorspronkelijk gepubliceerd op mijn blog op 28 juni 2020

Ik vind het leuk om dingen te bouwen die elektronica bevatten, en ik heb altijd al iets willen bouwen met Arduino.

Een van de meest voorkomende builds voor beginners die ik vond, was een MIDI-controller. Een MIDI-controller is elke hardware die MIDI-gegevens (Musical Instrument Digital Interface) naar een apparaat verzendt om geluiden te activeren en muziek te maken.

Ik ontdekte dat veel implementaties ingewikkeld zijn, zelfs die voor beginners. Het was erg frustrerend om te ontdekken dat ik honderden regels onleesbare code moest gebruiken. Of dat ik onder andere in sommige gevallen een weerstand moet solderen.

Het project

Door mijn eigen Arduino MIDI-controller te bouwen, was het mijn bedoeling om een leuk project te maken, waarbij ik het geluid zo laag mogelijk hield. Iets wat elke beginner zou kunnen volgen. Om dat te bereiken, gebruikte ik de MIDI Fighter 3D als basisinspiratie en verwijderde ik elke niet-essentiële functie.

De totale kosten van mijn project waren minder dan $ 30, en de lijst met materialen was erg kort (affiliate links):

  • Arduino Leonardo (of kloon): tussen $ 10 en $ 20.
  • 16 x Sanwa-knoppen 24 mm (of kloon): tussen $ 1 en $ 2,50 per knop.
  • Soldeerbout
  • 22 AWG elektrische draad

Het Arduino-bord

Toen ik aan dit project begon, ontdekte ik dat er een heleboel nieuwe Arduino-modellen zijn (exclusief de honderden compatibele borden). En ze bieden allemaal iets andere mogelijkheden.

Ik moest MIDI-signalen naar een computer sturen en de eenvoudigste manier om dat te doen is via USB. Elk Arduino-bord op basis van de ATmega32u4-microcontroller heeft ingebouwde USB-communicatie.

De officiële Arduino-borden met native USB-ondersteuning zijn Arduino Due, Arduino Zero, Arduino Leonardo, Arduino Micro. Deze boards hebben geïntegreerde USB-ondersteuning, wat betekent dat ze kunnen fungeren als een USB MIDI-apparaat.

Ik besloot om te gaan met een kloon van de Arduino Leonardo. Het heeft genoeg ingangen voor dit project en het bevat ook headers, wat het gemakkelijker maakt om draden aan of los te koppelen.

Eerste stappen

Hoewel ik stap voor stap zal uitleggen hoe ik de code voor dit project heb geïmplementeerd, kun je de definitieve versie downloaden.

Om code naar het bord te uploaden, moet je de Arduino IDE gebruiken. Ze hebben ook een webeditor die erg handig is, maar ze hebben een beperkt aantal keren per dag dat je code kunt compileren.

Stap 1: Knipperen van de ingebouwde LED

Het is grappig hoe de "Hello World" in de wereld van hardware een LED knippert.

Het was een leuke verrassing voor mij om te ontdekken dat Arduino Leonardo een ingebouwde LED heeft die je kunt knipperen om je code te testen. Zo hoef je geen externe schakeling te bouwen op een breadboard met een LED en een weerstand.

Code:

Stap 2: Knipperende LED bij handmatige invoer

De volgende logische stap was om dezelfde LED te laten knipperen wanneer ik een signaal stuur. Ik heb de plastic afdekking van het ene uiteinde van 2 Dupont-draden verwijderd en het andere uiteinde op het bord aangesloten:

  • Pin nummer 2: Een van de digitale ingangen (positief). Het kan elke digitale pin zijn.
  • Pin GND: Elke aardpen (negatief).

Nu, elke keer dat ik me aansluit bij de blootgestelde uiteinden van de draden, sluit ik het circuit en kan ik bijgevolg code uitvoeren

Elk van de 20 digitale pinnen op de Leonardo heeft een interne weerstand (standaard losgekoppeld) die kan worden ingeschakeld met INPUT_PULLUP. Houd er rekening mee dat een pull-up-invoer betekent dat de knopstatus wordt omgekeerd:

  • HOOG wanneer het circuit open is (knop is NIET ingedrukt).
  • LAAG wanneer het circuit gesloten is (knop ingedrukt).

Code:

Stap 3: De MIDIUSB-bibliotheek installeren

Met deze bibliotheek kan een Arduino-bord met USB-mogelijkheden fungeren als een MIDI-instrument via USB. Raadpleeg de officiële documentatie voor meer informatie.

Met behulp van de Arduino IDE kunt u extra Arduino-bibliotheken installeren met behulp van de Bibliotheekmanager:

  1. Open de IDE en klik op het menu "Sketch", vervolgens op "Bibliotheek opnemen" en vervolgens op "Bibliotheken beheren".
  2. Zoek naar MIDIUSB en klik op Installeren.
  3. Als het klaar is, zou er een Installed-tag moeten verschijnen naast de MIDIUSB-bibliotheek.
  4. Sluit de Bibliotheekmanager.

Nu kan de Leonardo MIDI-berichten verzenden via USB! Maar eerst is enig inzicht nodig over hoe MIDI werkt.

Hoe MIDI werkt

"MIDI (Musical Instrument Digital Interface) is een standaard communicatieprotocol dat elektronische muziekinstrumenten, computers en gerelateerde audioapparaten verbindt om muziek af te spelen." -Wikipedia

Het verwerkt gebeurtenisberichten met gegevens over de toonhoogte en snelheid van de gespeelde noot, naast andere instructies

In dit specifieke project stuurt de invoer van de 16 knoppen verschillende berichten via USB. Deze berichten kunnen op een computer worden omgezet in geluid met behulp van geschikte software zoals GarageBand of Ableton Live.

Anatomie van een MIDI-bericht

Om een MIDI-bericht te verzenden, heb ik de methode sendMIDI() uit de MIDIUSB-bibliotheek gebruikt die ik bij stap 3 heb geïnstalleerd.

Deze methode kan 4 parameters ontvangen:

  • Gebeurtenistype: het kan 0x09 zijn voor noot aan (noot spelen) of 0x08 voor noot uit (stop met spelen van noot).
  • Noot aan/uit: Het eventtype gecombineerd met het MIDI-kanaal (1-16). Ik gebruik alleen kanaal 1, dus het is 0x90 voor noot aan of 0x80 voor noot uit.
  • Nootnummer: Elke noot heeft een bijbehorende numerieke toonhoogte (frequentieschaal).
  • Snelheid: Van 0 (geen snelheid) tot 127 (snelste).

Stap 4: Een MIDI-bericht verzenden

Ik heb de MIDIUSB-bibliotheek meegeleverd en in plaats van de ingebouwde LED te laten knipperen, stuurde ik een notitie.

Code:

⚠ Belangrijk: vanaf deze stap verandert de Arduino in een MIDI USB-controller en ontvangt hij geen code meer via USB.

Wanneer je vast komt te zitten in een positie waar de Arduino niet meer geprogrammeerd kan worden, volg dan deze stappen:

  1. Houd de afgeronde resetknop op het Arduino-bord ingedrukt.
  2. Klik op Uploaden in de Arduino IDE.
  3. Laat de resetknop los.
  4. De bijgewerkte code wordt geüpload naar het bord.

Stap 5: Een MIDI-bericht verzenden vanaf elke knop

Een MIDI-bericht verzenden vanaf elke knop
Een MIDI-bericht verzenden vanaf elke knop

De laatste stap was om elke toonhoogte toe te wijzen aan een knop. Voor de 16 knoppen heb ik een schaal gedefinieerd van C2 tot E3b, de toonhoogtes van 36 tot 51 in een volgorde van onder naar boven en van links naar rechts. Bekijk dit bestand van Arduino Tutorials om te zien welke toonhoogte overeenkomt met elke noot.

Ik gebruikte digitale pinnen van 2 tot 12 en analoge pinnen (gebruik ze als digitals) van A0 tot A4.

En zo ziet de uiteindelijke code eruit:

Stap 6: Kanalen of banken instellen (optioneel)

Kanalen of banken instellen (optioneel)
Kanalen of banken instellen (optioneel)

Als je meer knoppen wilt toevoegen met de mogelijkheid om van kanaal of bank te wisselen, zoals in de MIDI Fighter 3D (zie afbeelding), heeft de Arduino Leonardo nog vier pinnen die je kunt gebruiken. De Arduino Leonardo heeft 20 digitale input/output-pinnen, waarvan er slechts 16 in gebruik zijn voor het spelen van noten.

Je kunt die extra knoppen gebruiken om een variabele in de code bij te werken en de waarde ervan als parameter naar de MidiUSB.sendMIDI-methode te sturen:

gist.github.com/lean8086/ec8da7486ec3621f9f0b90542a06fcea

Stap 7: De zaak

De zaak
De zaak
De zaak
De zaak

Om dit project eenvoudig te houden, was ik extreem kieskeurig bij het kiezen van de functies.

  • Alleen knoppen: 16 Sanwa-achtige arcadeknoppen, in een 4x4 raster. Geen knoppen, geen schuifregelaars, geen faders of andere analoge input.
  • Unibody-behuizing: gebruik geen schroeven, moeren, bouten of lijm voor de behuizing of om het Arduino-bord vast te houden.
  • Alledaags gereedschap: ik heb bijvoorbeeld de draden gesoldeerd in plaats van een specifieke draadknipper te kopen voor de arcade-knoppen.

Unibody-ontwerp

Een van de uitdagingen waarmee ik werd geconfronteerd, was het ontwerpen van een behuizing die zo eenvoudig was dat deze niet hoeft te worden gemonteerd en in één keer in 3D kan worden geprint.

Om het gebruik van schroeven of lijm te vermijden, moest ik een behuizing ontwerpen die de kleinste toegang tot de elektronica biedt. Mijn grootste inspiratiebron voor de behuizing was de Mac Mini, die aan de onderkant een cirkelvormig gat heeft. Ik wilde daar ook een schroefdeksel voor ontwerpen, maar ik besloot het open te laten om de elektronica bloot te leggen.

Download de 3D-afdrukbare case (322 KB). Aanbevolen instellingen: PLA, 0,15 mm lagen, 20% vulling, ondersteuning voor handhavers in ieder geval voor het ronde bodemgat, de Arduino-houders en de micro-USB.

Een Arduino vasthouden zonder schroeven

De Leonardo heeft 4 gaten om het bord in elke geschikte hoes te schroeven, maar mijn idee was om het gemakkelijk te maken om het bord toe te voegen en uit de hoes te verwijderen.

Het vinden van een cliphouder voor Arduino op Thingiverse was eenvoudig en het kostte me 5 iteraties om die houder te integreren in het unibody-ontwerp. Het moeilijkste was om de poten te maken om de gaten voor de knoppen te vermijden en om de micro-USB in het midden op de behuizing te laten passen.

Stap 8: De vergadering

de vergadering
de vergadering
de vergadering
de vergadering
de vergadering
de vergadering

Nadat ik alle knoppen op hun plaats had geplaatst, soldeerde ik korte zwarte draden die alle negatieve pootjes van de knoppen ertussen verbond.

Daarna soldeerde ik lange rode draden van elke positieve poot om rechtstreeks op het bord aan te sluiten.

Om de draden op de Arduino aan te sluiten, heb ik enkele Dupont-uiteinden gesneden en gesoldeerd en bedekt met krimpkous.

Ik heb de draden op het bord aangesloten in dezelfde volgorde als in de MIDI Fighter. Van onder naar boven en van links naar rechts

Stap 9: De MIDI-controller gebruiken

De MIDI-controller gebruiken
De MIDI-controller gebruiken

Elke muzieksoftware (of geschikte hardware) kan worden gebruikt om MIDI te ontvangen en muziek te maken. De meest aanbevolen zijn Garage Band, Ableton Live en ik weet dat er een heleboel apps zijn om op een telefoon te installeren.

Al die tools zijn handig voor het laden van vooraf gedefinieerde geluiden voor vingerdrummen, maar ze zijn gemaakt voor grotere doeleinden. Die tools kunnen moeilijk zijn voor beginners om in te stellen.

MIDI in de webbrowser

Om iets meer in lijn te brengen met dit project en zijn eenvoud, heb ik een webtool gebouwd die volledig gericht is op MIDI-controllers.

Punchy: WebMIDI- en WebAudio-implementatie voor MIDI-controllers.

Het kan MIDI-berichten lezen in elke browser die de WebMIDI JavaScript API ondersteunt. Vervolgens speelt het geluiden af in een synthesizer (met behulp van de WebAudio API) of in een sampler, waarbij aangepaste geluiden uit elk geluidspakket worden geladen.

Ableton Live instellen

Om de MIDI-controller met Ableton Live te laten werken, volgt u deze eenvoudige stappen uit hun officiële documentatie.

Ga naar Voorkeuren → Link MIDI en zorg ervoor dat de "Input" "Track" en "Remote" AAN heeft staan en dat de uitvoer "Remote" AAN heeft staan, evenals vermeld in de handleiding:

Aanbevolen: