Inhoudsopgave:
- Deze instructable is oorspronkelijk gepubliceerd op mijn blog op 28 juni 2020
- Stap 1: Knipperen van de ingebouwde LED
- Stap 2: Knipperende LED bij handmatige invoer
- Stap 3: De MIDIUSB-bibliotheek installeren
- Stap 4: Een MIDI-bericht verzenden
- Stap 5: Een MIDI-bericht verzenden vanaf elke knop
- Stap 6: Kanalen of banken instellen (optioneel)
- Stap 7: De zaak
- Stap 8: De vergadering
- Stap 9: De MIDI-controller gebruiken
Video: Een Arduino MIDI-controller bouwen: 9 stappen (met afbeeldingen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
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:
- Open de IDE en klik op het menu "Sketch", vervolgens op "Bibliotheek opnemen" en vervolgens op "Bibliotheken beheren".
- Zoek naar MIDIUSB en klik op Installeren.
- Als het klaar is, zou er een Installed-tag moeten verschijnen naast de MIDIUSB-bibliotheek.
- 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:
- Houd de afgeronde resetknop op het Arduino-bord ingedrukt.
- Klik op Uploaden in de Arduino IDE.
- Laat de resetknop los.
- De bijgewerkte code wordt geüpload naar het bord.
Stap 5: 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)
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
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
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
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:
Hoe een Battlebot te bouwen met karton en Arduino 7 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Hoe een gevechtsbot te bouwen met karton en Arduino: Ik heb gevechtsbots gemaakt met behulp van de Arduino UNO en karton werd gebruikt om de lichamen te bouwen. Ik probeerde betaalbare benodigdheden te gebruiken en gaf de kinderen creatieve vrijheid bij het ontwerpen van hun gevechtsrobots. Battlebot ontvangt opdrachten van de draadloze controller
Een CubeSat bouwen met een Arduino met een Arducam - Ajarnpa
Hoe een CubeSat te bouwen met een Arduino met een Arducam: In de eerste afbeelding hebben we een Arduino en deze wordt "Arduino Uno" genoemd. In de tweede afbeelding hebben we een Arducam en deze heet "Arducam OV2640". 2MP mini."Samen met de tweede foto zijn er de materialen die je nodig hebt om
Een DIY Arduino bouwen op een PCB en enkele tips voor beginners: 17 stappen (met afbeeldingen)
Een DIY Arduino bouwen op een PCB en enkele tips voor beginners: Dit is bedoeld als een gids voor iedereen die zijn eigen Arduino soldeert uit een kit, die kan worden gekocht bij A2D Electronics. Het bevat veel tips en trucs om het succesvol te bouwen. Je leert ook wat alle verschillende componenten d
Een thuisstudio bouwen met een megabudget: 8 stappen (met afbeeldingen)
Een thuisstudio bouwen met een megabudget: nu het digitale tijdperk ons blijft laten zien hoe technologie de behoefte aan professionele diensten heeft verminderd, wordt het steeds gemakkelijker om goede resultaten te behalen met kunstvormen zoals audio-opname. Het is mijn doel om de meest kosteneffectieve manier van
Hoe een verlicht cameraniveau voor een DSLR te bouwen: 4 stappen (met afbeeldingen)
Een verlicht cameraniveau bouwen voor een DSLR: Heb je ooit opnamen gemaakt bij weinig licht en merkte je dat je opnamen niet waterpas waren? Nou, dat heb ik zeker! Ik heb de laatste tijd veel werk gedaan met fotografie met lange sluitertijden en als ik in het veld ben met een gorillapod, merk ik dat ik