Arduino-basierter MIDI-Schrittmotor-Synthesizer
Komponenten und Zubehör
| Komponente | Menge | Hinweis |
|---|---|---|
| Arduino UNO | 1 | Andere Arduino-Boards mit mehr I/O möglich |
| A4988 Schrittmotortreiber | 4 | |
| Arduino CNC Shield V3 | 1 | Optional, erleichtert Verdrahtung der A4988 |
| 12V 6A Netzteil | 1 | Für die Schrittmotoren |
| NEMA 17 Schrittmotor (OpenBuilds) | 4 |
Benötigte Werkzeuge & Maschinen
- 3D-Drucker (optional, für Halterungen)
Projektbeschreibung
Inspiriert von Floppy-Drive-Musik, bei der Schrittmotoren Töne erzeugen, wurde ein eigener MIDI-Schrittmotor-Synthesizer entwickelt. Ziel war ein einfacher, erweiterbarer Code, der MIDI-Daten in Motorbewegungen umsetzt.
Gesamtprozess
Kernaufgabe: MIDI-Daten empfangen, in Schrittfrequenzen umrechnen und mehrere Motoren simultan ansteuern.
MIDI-Daten extrahieren
Die Arduino MIDI-Bibliothek interpretiert eingehende MIDI-Nachrichten (Note On/Off, Kanal) und leitet sie an die Steuerfunktion weiter.
Schrittmotoren steuern
Die A4988-Treiber benötigen nur STEP und DIR. Da die Drehrichtung den Ton nicht beeinflusst, wird DIR fest auf LOW (oder GND) gelegt. Ein digitalWrite auf STEP erzeugt einen Schritt. Mikroschritt-Auflösung beeinflusst die Laufruhe, nicht die Tonhöhe.
Herausforderung: Gleichzeitige Ansteuerung
delay() blockiert und verhindert paralleles Spielen. Stattdessen wird micros() genutzt, um für jeden Motor individuell den nächsten Schrittzeitpunkt zu berechnen. Geschwindigkeiten werden in Arrays gespeichert (Index = Motornummer = MIDI-Kanal). So lassen sich beliebig viele Motoren durch Vergrößerung der Arrays hinzufügen.
Geschwindigkeitsberechnung
Ein Test mit 440 Hz (A4) auf dem STEP-Pin erzeugte den passenden Ton. Da die Steuergröße die Periodendauer in Mikrosekunden ist, wurden die MIDI-Notenfrequenzen in Perioden umgerechnet und in einem Array pitchValues abgelegt (Index = MIDI-Notennummer). Wert 0 bedeutet Stopp.
Array statt Formel erlaubt volle Kontrolle über den spielbaren Tonumfang und Korrektur von Resonanzen. Beim Autor lag die Resonanz bei ca. F3; die Noten E3, F3, F#3 wurden um eine Oktave verschoben. (Test mit „Tune Stepper.ino“).
USB-MIDI-Gerät erstellen
Damit der Arduino als USB-MIDI-Gerät erkannt wird, kann die Firmware des onboard AVR-Chips (ATmega16U2/8U2) geflasht werden: HIDUINO oder mocuLUFA. mocuLUFA bietet Dual-Boot: Per Jumper auf dem ICSP-Header zwischen USB-MIDI und USB-Serial (für Sketch-Upload) umschaltbar.
Code & Installation
Der vollständige Code inkl. Konfigurationsanleitung befindet sich auf GitHub:
https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument
Gehäuse & Anbauteile (3D-Druck)
- Halterung für die vier Schrittmotoren
- „Finger“ für die Motorwellen (rein ästhetisch)
Schaltpläne
Herstellungsprozess
- Bernstein: Vom antiken Harz zum wissenschaftlichen Schatz – Geschichte, Eigenschaften und moderne Nutzung
- Die Guillotine: Geschichte, Design und Vermächtnis
- Silizium: Eigenschaften, Produktion und Marktausblick
- Die Ukulele: Von portugiesischen Wurzeln zur modernen Handwerkskunst
- Der komplette Leitfaden zur US-Hühnerindustrie: Geschichte, Produktion und Qualitätskontrolle
- Kompost: Die ultimative Lösung zur Bodenverbesserung
- Gelatine: Vom antiken Protein zur modernen Anwendung – Herstellung, Nutzung und Sicherheit
- Die Evolution und Fertigung moderner Stiftschloss-Zylinderschlösser
- Wodka: Von antiker Destillation zur modernen Produktion
- Eisen: Eigenschaften, Geschichte und alltägliche Anwendungen