Arduino-gebaseerde MIDI-steppermotorsynthesizer
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| Arduino UNO | 1 | Elke vergelijkbare Arduino werkt voor meer I/O |
| A4988 Stepper Driver | 4 | |
| Arduino CNC Shield V3 | 1 | Optioneel, je kunt de A4988 drivers ook handmatig aansturen |
| 12V 6A Voeding | 1 | Of vergelijkbaar om de steppermotoren aan te sturen |
| OpenBuilds NEMA 17 Steppermotor | 4 |
Benodigde tools en machines
- 3D-printer (generiek) - Volledig optioneel!
Over dit project
Ik was op YouTube te browsen toen ik filmpjes zag van floppy-drive muziek. Omdat floppy-drives worden aangestuurd door steppermotoren, besloot ik mijn eigen steppermotor-geluidsgenerator te bouwen.
Anderen hadden dit al gedaan, maar de code was vaak niet gedeeld, of slecht/beperkt. Omdat ik C++ leerde op school, besloot ik mijn vaardigheden te gebruiken om een simpele, gemakkelijk te gebruiken en aanpasbare code te schrijven.
Het Gesamtproces
In essentie: MIDI-data extraheren en omzetten naar een snelheid waarmee een steppermotor de bijbehorende toonhoogte produceert.
MIDI-data extraheren
Dit was eenvoudig. Met de MIDI-bibliotheek kon ik de MIDI-data interpreteren en doorsturen naar een functie die de snelheid regelt.
De stappen motoren aansturen
A4988 drivers hebben twee pinnen die de motor direct aansturen: STEP en DIR. DIR bepaalt de draairichting (kloksgewijs/tegenkloksgewijs), STEP laat de motor één stap maken bij elke HIGH-puls (hoeveelheid afhankelijk van microstepping-resolutie). Omdat de klank niet beïnvloed wordt door richting, zet ik DIR laag (of verbind met GND). Nu kan ik de motor sturen met een simpele digitalWrite.
De uitdaging: meerdere motoren tegelijk
Ik wilde meerdere steppermotoren tegelijkertijd aansturen, dus delay() was geen optie (motoren zouden niet simultaan draaien). In plaats daarvan gebruikte ik micros() om de pulsduur te berekenen. Omdat elke motor een andere snelheid heeft, gebruikte ik arrays voor snelheidsvariabelen, waarbij de index correspondeert met motornummer en MIDI-kanaal. millis() had onvoldoende resolutie voor verschillende toonhoogtes.
Arrays maken het mogelijk om één variabele voor alle motoren te gebruiken, en de Arduino kan elk aantal stappen aansturen door de array-grootte aan te passen!
Snelheidsberekeningen
In een test stuurde ik een 440 Hz blokgolf (via tone) naar de STEP-pin en de motor produceerde een A440 toon. Omdat de snelheidswaarde de periode in microseconden is, converteerde ik nofrequenties naar periodes. Deze stonden in een array pitchValues, geïndexeerd op MIDI-nootwaarde. Dit gaf volledige controle over de speelbare bereik van het instrument.
Nabij de resonantiefrequentie produceert een steppermotor een vreselijk geluid (lijkt op stallen). Dit kun je oplossen door de waarde met een octaaf te verschuiven. Bij mij lag de resonantie rond F3, dus E3, F3 en F#3 moesten een octaaf omhoog. (Controleer dit met de "Tune Stepper.ino" code).
Een USB-MIDI-apparaat maken
Ik wilde dat het apparaat als MIDI-apparaat herkend wordt. Na onderzoek ontdekte dat je de firmware van de AVR-chip kunt wijzigen: HIDUINO of mocuLUFA. Ik koos mocuLUFA vanwege de dual-boot optie: met een jumper op de ICSP-header schakel je tussen USB-MIDI en USB-Serieel, zodat herprogrammeren zonder re-flashen mogelijk is.
Code
De complete code, inclusief installatie- en configuratie-instructies, vind je op mijn GitHub:
https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument
Aangepaste onderdelen en behuizingen
- Houdt de steppermotoren op hun plaats
- Voegt een "vinger" toe aan de motor. Puur voor esthetische doeleinden.
Schema's
CNC Shield V3 jumper-locaties:
Breadboard-aansluiting:
Schema van de Fritzing breadboard-aansluiting (met extra componentwaarden):
MIDI DIN-jack aansluiting:
Productieproces
- Bernsteen: van oude hars tot wetenschappelijke schat – geschiedenis, eigenschappen en modern gebruik
- De Guillotine: Geschiedenis, Ontwerp en Nalatenschap
- Silicium: Eigenschappen, Productie en Marktverwachtingen
- De Ukulele: Van Portugese Wortels tot Moderne Vakmanschap
- De Complete Gids tot de Amerikaanse Kippenindustrie: Geschiedenis, Productie en Kwaliteitscontrole
- Compost: De Ultieme Oplossing voor Bodemverrijking
- Gelatine: Van Oud Eiwit tot Moderne Toepassingen – Productie, Gebruik en Veiligheid
- De Evolutie en Fabricage van Moderne Pin-Tumbler Sloten
- Wodka: Van Oude Distillatie tot Moderne Productie
- Melk: Productie, Verwerking en Voeding in de Verenigde Staten
- IJzer: Eigenschappen, Geschiedenis en Alledaagse Toepassingen