Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino MIDI Stepper Synth

Komponenten und Verbrauchsmaterialien

Arduino UNO
Sie können jedes ähnliche Arduino verwenden, um die E/A zu erweitern.
× 1
A4988 Schrittmotortreiber
× 4
Arduino CNC Shield V3
Optional können Sie die A4988-Treiber einfach manuell verkabeln
× 1
12V 6A Netzteil
Oder ähnlich zum Antrieb der Schrittmotoren
× 1
OpenBuilds NEMA 17 Schrittmotor
× 4

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)
Vollständig optional!

Über dieses Projekt

Sehen Sie es hier in Aktion.

Ich machte mein übliches Surfen auf YouTube, als ich Musik von Diskettenlaufwerken sah. Da ich wusste, dass Diskettenlaufwerke von Schrittmotoren gesteuert werden, beschloss ich, meinen eigenen Schrittmotor-Soundgenerator zu entwickeln.

Ich hatte gesehen, dass Leute dies schon einmal getan hatten, aber jede Instanz hatte den Code entweder nicht geteilt oder ihr Code war stark fehlerhaft und/oder eingeschränkt.

Nachdem ich in der Schule C++ gelernt hatte, beschloss ich, meine Fähigkeiten einzusetzen.

Was ich wirklich wollte, war einen Code zu erstellen, der einfach und leicht zu verwenden und zu ändern ist. Und genau das habe ich getan!

Die Insgesamt Prozess

Zu Beginn habe ich mir überlegt, was zu tun ist. Im Grunde genommen musste ich MIDI-Daten extrahieren und in eine Geschwindigkeit umwandeln, die einen Schrittmotor dazu brachte, die entsprechende Tonhöhe zu erzeugen.

Extrahieren von MIDI-Daten

Dieser Teil war ziemlich einfach. Durch die Verwendung der MIDI-Bibliothek konnte ich die MIDI-Daten interpretieren und an eine andere Funktion senden, um die Geschwindigkeit zu steuern.

Steuerung der Stepper

Die A4988 Schrittmotortreiber haben zwei Pins, die die Schrittmotorbewegung direkt steuern; SCHRITT und DIR. DIR steuert, ob sich der Motor je nach Zustand im oder gegen den Uhrzeigersinn dreht, und STEP bewegt den Stepper jedes Mal um einen Schritt, wenn er hoch gezogen wird (wie viel hängt von der Mikroschritt-Auflösung ab). Da der Klang nicht von der Richtung beeinflusst wird, stelle ich ihn einfach auf niedrig (oder verbinde ihn einfach mit Masse). Jetzt kann ich den Motor einfach mit einem digitalWrite-Befehl schalten.

Die Herausforderung

Die größte Herausforderung bei diesem Projekt bestand darin, dass ich mehrere Schrittmotoren gleichzeitig ansteuern wollte, sodass die Verwendung eines delay()-Befehls nicht in Frage kam (sonst würden die Motoren nicht gleichzeitig laufen). Stattdessen habe ich den Befehl micros () verwendet, um die Dauer zum Pulsen der Stepper zu berechnen. Da es für jeden Schrittmotor unterschiedliche Geschwindigkeitswerte geben wird, habe ich die Geschwindigkeitsvariablen in Arrays umgewandelt, deren Index der Motornummer und dem MIDI-Kanal entspricht. Ich habe ursprünglich den Befehl millis() verwendet, aber festgestellt, dass ihm die Auflösung fehlt, um verschiedene Tonhöhen zu erzeugen.

Die Verwendung eines Arrays zur Steuerung der Geschwindigkeit der Schrittmotoren bedeutete, dass ich eine einzige Variable für alle Motoren verwenden konnte, und dies gibt die Möglichkeit, das Arduino eine beliebige Anzahl von Schrittmotoren steuern zu lassen, indem Sie einfach die Array-Größe ändern!

Geschwindigkeitsberechnungen

In einem Test habe ich eine 440-Hz-Rechteckwelle (mit dem Tonbefehl) an den Schrittstift gesendet und festgestellt, dass der Schrittmotor eine A440-Tonhöhe erzeugt. Da der an die Stepper-Funktion gesendete Geschwindigkeitswert die Periode in Mikrosekunden war, habe ich einfach die Notenfrequenzen in die Periode umgerechnet. Ich lege diese Werte in ein anderes Array namens pitchValues, wobei ihr Index dem MIDI-Notenwert entspricht. Mit dem Array konnte ich auch den spielbaren Bereich des Steppers steuern. Ich habe es so gemacht, dass ein Geschwindigkeitswert von Null als Stopp gilt.

Die Verwendung eines Arrays anstelle einer Berechnung bedeutete, dass die Geschwindigkeit jeder Note vollständig kontrolliert und effektiv ein Bereich für das Instrument festgelegt wurde. Wenn sich ein Schrittmotor in der Nähe seiner Resonanzfrequenz befindet, erzeugt er außerdem ein sehr schreckliches Geräusch (sieht aus, als würde er abwürgen). Sie können feststellen, was das ist, und den Wert für die Tonhöhe um eine Oktave ändern, um dieses Problem zu lösen. Für mich lag die Resonanzfrequenz bei F3, also musste ich E3, F3 und F#3 um eine Oktave ändern, um dies zu beheben. (Sie können dies mit dem Code "Tune Stepper.ino" überprüfen)

Erstellen eines USB-MIDI-Geräts

Ich wollte, dass das Gerät als MIDI-Gerät angesehen wird, also habe ich ein wenig gegraben und festgestellt, dass Sie die Firmware des AVR-Chips auf dem Board ändern können. Die Firmware könnte HIDUINO oder mocuLUFA sein. Ich habe mich für mocuLUFA entschieden, weil es eine Dual-Boot-Option hatte, sodass ich den Arduino leicht neu programmieren konnte, ohne den AVR-Chip neu flashen zu müssen. Ich könnte einfach einen Jumper am ICSP-Header anschließen, um zwischen USB-MIDI und USB-Seriell umzuschalten.

Code

GitHub-Repository
Gehen Sie einfach zu meinem GitHub. Ich habe Anweisungen zum Konfigurieren und Installieren des Codes auf Ihrem Arduino.https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument

Kundenspezifische Teile und Gehäuse

Hält die Schrittmotoren an Ort und StelleFügt dem Motor einen "Finger" hinzu. Rein aus ästhetischen Gründen.

Schaltpläne

Position für Jumper, wenn Sie dieses Shield verwenden möchten. Wenn Sie es auf einem Steckbrett verdrahten möchten, dann ist es hier Schema der Fritzing-Breadboard-Verkabelung. Enthält einige der Teilewerte, die nicht im Steckbrettdiagramm angegeben sind. Wenn Sie eine MIDI-DIN-Buchse verwenden möchten, verwenden Sie dieses Layout.

Herstellungsprozess

  1. Bernstein
  2. Guillotine
  3. Silizium
  4. Ukulele
  5. Huhn
  6. Kompost
  7. Gelatine
  8. Sperren
  9. Wodka
  10. Eisen