Inhaltsverzeichnis:

Songs mit einem Arduino und einem DC-Motor machen - Gunook
Songs mit einem Arduino und einem DC-Motor machen - Gunook

Video: Songs mit einem Arduino und einem DC-Motor machen - Gunook

Video: Songs mit einem Arduino und einem DC-Motor machen - Gunook
Video: DC-Motor mit Arduino ansteuern - Arduino Tutorial #12 (deutsch) 2024, Juli
Anonim
Songs machen mit einem Arduino und einem DC-Motor
Songs machen mit einem Arduino und einem DC-Motor

Neulich, als ich durch einige Artikel über Arduino scrollte, entdeckte ich ein interessantes Projekt, bei dem Arduino-gesteuerte Schrittmotoren verwendet wurden, um kurze Melodien zu erzeugen. Der Arduino verwendet einen PWM-Pin (Pulsweitenmodulation), um den Schrittmotor mit bestimmten Frequenzen zu betreiben, die den Musiknoten entsprechen. Durch das Timing, welche Frequenzen wann gespielt wurden, war eine klare Melodie aus dem Schrittmotor zu hören.

Als ich es jedoch selbst ausprobierte, stellte ich fest, dass der Schrittmotor, den ich habe, nicht schnell genug drehen kann, um einen Ton zu erzeugen. Stattdessen habe ich einen Gleichstrommotor verwendet, der relativ einfach zu programmieren und an einen Arduino anzuschließen ist. Ein herkömmlicher L293D-IC kann verwendet werden, um den Motor einfach über einen Arduino-PWM-Pin anzusteuern, und die native Tone()-Funktion in Arduino kann die erforderliche Frequenz erzeugen. Zu meiner Überraschung habe ich online keine Beispiele oder Projekte mit einem Gleichstrommotor gefunden, und daher ist dieses Instructables meine Antwort, um das zu beheben. Lass uns anfangen!

PS Ich gehe davon aus, dass Sie bereits Erfahrung mit dem Arduino haben und mit dessen Programmiersprache und Hardware vertraut sind. Sie sollten wissen, was Arrays sind, was PWM ist und wie man es verwendet und wie Spannung und Strom funktionieren, um nur einige Dinge zu nennen. Wenn Sie noch nicht dort sind oder gerade mit Arduino begonnen haben, machen Sie sich keine Sorgen: Probieren Sie diese Einstiegsseite von der offiziellen Arduino-Website aus und kommen Sie wieder, wenn Sie bereit sind.:)

Lieferungen

  • Arduino (ich habe ein UNO verwendet, aber Sie können ein anderes Arduino verwenden, wenn Sie möchten)
  • Standard-5-V-Gleichstrommotor, vorzugsweise mit einem angeschlossenen Lüfter (siehe Bild in "Zusammenbau der Schaltung"
  • L293D-IC
  • So viele Druckknöpfe wie Noten im Song, den Sie spielen möchten
  • Steckbrett
  • Überbrückungsdrähte

Schritt 1: Übersicht

So funktioniert das Projekt: Der Arduino erzeugt eine Rechteckwelle mit einer bestimmten Frequenz, die er an den L293D ausgibt. Der L293D ist an eine externe Stromversorgung angeschlossen, mit der er den Motor mit der vom Arduino vorgegebenen Frequenz versorgt. Durch die Verhinderung der Drehung der Welle des Gleichstrommotors kann man hören, wie sich der Motor mit der Frequenz ein- und ausschaltet, was einen Ton oder eine Note erzeugt. Wir können den Arduino so programmieren, dass er Noten spielt, wenn Tasten gedrückt werden, oder sie automatisch abspielt.

Schritt 2: Zusammenbau der Schaltung

Zusammenbau der Schaltung
Zusammenbau der Schaltung
Zusammenbau der Schaltung
Zusammenbau der Schaltung

Um die Schaltung zusammenzubauen, folgen Sie einfach dem obigen Fritzing-Diagramm.

Tipp: Der Ton des Motors ist am besten zu hören, wenn sich die Welle nicht dreht. Ich legte einen Lüfter auf die Welle meines Motors und benutzte etwas Klebeband, um den Lüfter still zu halten, während der Motor lief (siehe Bild). Dies verhinderte das Drehen der Welle und erzeugte einen klaren, hörbaren Ton. Möglicherweise müssen Sie etwas optimieren, um einen sauberen Ton von Ihrem Motor zu erhalten.

Schritt 3: Wie die Schaltung funktioniert

So funktioniert die Schaltung
So funktioniert die Schaltung

Der L293D ist ein IC, der zum Ansteuern von Geräten mit relativ hoher Spannung und hohem Strom wie Relais und Motoren verwendet wird. Der Arduino kann die meisten Motoren nicht direkt von seinem Ausgang aus antreiben (und die Gegen-EMK des Motors kann die empfindliche digitale Schaltung des Arduino beschädigen), sodass ein IC wie der L293D mit einer externen Stromversorgung verwendet werden kann, um den Gleichstrommotor einfach anzutreiben. Die Eingabe eines Signals in den L293D gibt das gleiche Signal an den DC-Motor aus, ohne den Arduino zu beschädigen.

Oben ist eine Pinbelegung / Funktionsschema des L293D aus seinem Datenblatt. Da wir nur 1 Motor antreiben (der L293D kann 2) fahren, benötigen wir nur eine Seite des ICs. Pin 8 ist Strom, Pins 4 und 5 sind GND, Pin 1 ist der PWM-Ausgang des Arduino und Pins 2 und 7 steuern die Richtung des Motors. Wenn Pin 2 HIGH und Pin 7 LOW ist, dreht sich der Motor in eine Richtung, und wenn Pin 2 LOW und Pin 7 HIGH ist, dreht der Motor in die andere Richtung. Da es uns egal ist, in welche Richtung sich der Motor dreht, ist es egal, ob die Pins 2 und 7 LOW oder HIGH sind, solange sie sich voneinander unterscheiden. Die Pins 3 und 6 sind mit dem Motor verbunden. Sie können alles an die andere Seite (Pins 9-16) anschließen, wenn Sie möchten, aber beachten Sie, dass die Strom- und PWM-Pins die Plätze tauschen.

Hinweis: Wenn Sie ein Arduino verwenden, das nicht genügend Pins für jede Taste hat, können Sie ein Netzwerk von Widerständen verwenden, um alle Schalter an einen analogen Pin anzuschließen, wie in dieser Anleitung. Wie dies funktioniert, liegt außerhalb des Rahmens dieses Projekts, aber wenn Sie jemals einen R-2R-DAC verwendet haben, sollten Sie ihn kennen. Beachten Sie, dass bei Verwendung eines analogen Pins große Teile des Codes neu geschrieben werden müssen, da die Button-Bibliothek nicht mit analogen Pins verwendet werden kann.

Schritt 4: So funktioniert der Code

Um die Handhabung aller Schaltflächen zu erleichtern, habe ich eine Bibliothek namens „Button“von madleech verwendet. Ich habe als erstes die Bibliothek aufgenommen. Als nächstes habe ich in den Zeilen 8-22 die Frequenzen für die Noten definiert, die zum Spielen von Twinkle, Twinkle, Little Star (dem Beispielsong) benötigt werden, den Pin, den ich zum Ansteuern des L293D verwenden werde, und die Tasten.

In der Setup-Funktion habe ich das Serial initialisiert, die Tasten und den Treiber-Pin für den L293D auf Ausgabemodus gesetzt.

Schließlich habe ich in der Hauptschleife überprüft, ob eine Taste gedrückt wurde. Wenn ja, spielt der Arduino die entsprechende Note und druckt den Notennamen an den Serial Monitor (nützlich, um zu wissen, welche Noten welche auf Ihrem Steckbrett sind). Wenn eine Note losgelassen wird, stoppt das Arduino jeden Sound mit noTone().

Leider konnte ich aufgrund der Struktur der Bibliothek keinen Weg finden, um zu überprüfen, ob eine Taste gedrückt oder losgelassen wurde, und zwar weniger ausführlich als mit 2 Bedingungen pro Note. Ein weiterer Fehler bei diesem Code besteht darin, dass, wenn Sie zwei Tasten gleichzeitig drücken und dann eine davon loslassen, beide Noten gestoppt werden, da noTone() die Erzeugung aller Noten stoppt, unabhängig davon, welche Note sie ausgelöst hat.

Schritt 5: Einen Song programmieren

Anstatt Tasten zum Abspielen von Noten zu verwenden, können Sie den Arduino auch so programmieren, dass er automatisch eine Melodie für Sie spielt. Hier ist eine modifizierte Version der ersten Skizze, die Twinkle, Twinkle, Little Star auf dem Motor spielt. Der erste Teil der Skizze ist der gleiche - die Notenfrequenzen und den TonePin werden definiert. Zum neuen Teil gelangen wir bei bpm="100". Ich stelle die Schläge pro Minute (bpm) ein und verwende dann etwas Mathematik, um die Anzahl der Millisekunden pro Schlag zu ermitteln, der die Schläge pro Minute entsprechen. Dazu habe ich eine Technik namens Dimensionsanalyse verwendet (keine Sorge – es ist nicht so schwer, wie es sich anhört). Wenn Sie jemals einen Chemiekurs an der High School belegt haben, haben Sie definitiv die Dimensionsanalyse verwendet, um zwischen Einheiten umzurechnen. Die floats() sind dazu da, um sicherzustellen, dass nichts in der Gleichung aus Gründen der Genauigkeit bis zum Ende gerundet wird.

Nachdem wir die Anzahl der ms/Beat haben, habe ich sie entsprechend geteilt oder multipliziert, um die Millisekundenwerte der verschiedenen Notendauern in der Musik zu finden. Ich erstelle dann ein Array jeder Note in chronologischer Reihenfolge und ein weiteres mit der Dauer jeder Note. Es ist wichtig, dass der Index jeder Note mit dem Index ihrer Dauer übereinstimmt, andernfalls erklingt Ihre Melodie. Ich habe hier als Beispiel die Noten für Twinkle, Twinkle, Little Star eingefügt, aber Sie können jedes Lied oder jede beliebige Notenfolge ausprobieren.

Die wahre Magie passiert in der Schleifenfunktion. Für jede der Noten spiele ich den Ton für eine Zeit, die ich im beat_values-Array angegeben habe. Anstatt hier eine Verzögerung zu verwenden, die dazu führen würde, dass der Ton nicht gespielt wird, habe ich die Zeit seit dem Programmstart mit der Funktion millis() aufgezeichnet und von der aktuellen Zeit subtrahiert. Wenn die Zeit die Zeit überschreitet, die ich im beat_values-Array angegeben habe, halte ich die Note an. Die Verzögerung nach der for-Schleife dient dazu, eine Lücke zwischen den Noten hinzuzufügen, um sicherzustellen, dass nachfolgende Noten mit derselben Frequenz nicht miteinander verschmelzen.

Schritt 6: Feedback

Das war's für dieses Projekt. Wenn Sie etwas nicht verstehen oder Anregungen haben, zögern Sie nicht, mich zu kontaktieren. Da dies mein erstes Instructables ist, würde ich mich sehr über Kommentare und Vorschläge zur Verbesserung dieses Inhalts freuen. Bis zum nächsten Mal!

Empfohlen: