Inhaltsverzeichnis:
- Schritt 1: Dinge, die wir für dieses Projekt benötigen (Anforderungen)
- Schritt 2: Das Funktionsprinzip verstehen
- Schritt 3: Schaltplan
- Schritt 4: Konvertieren Sie MP3 in eine WAV-Datei mit Audacity
- Schritt 5: WAV zu C-Code
- Schritt 6: Erstellen Sie eine endgültige Datei und starten Sie Ihr Linux
Video: Spielen Sie Songs (MP3) mit Arduino mit PWM auf Lautsprecher oder Flyback-Transformator - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Hallo Leute, Dies ist mein erstes instructable, ich hoffe, es wird Ihnen gefallen !!
Grundsätzlich habe ich in diesem Projekt die serielle Kommunikation zwischen meinem Arduino und meinem Laptop verwendet, um Musikdaten von meinem Laptop zum Arduino zu übertragen. Und mit den Arduino TIMERS, um die Daten als PWM-Signal abzuspielen.
Ich wollte erwähnen, dass dieses Projekt nichts für Anfänger ist!!!.
Eigentlich war dieses Projekt eines der längsten Projekte, weil wir viele Dinge tun müssen, damit es funktioniert.
BEACHTUNG
Ich habe den zweiten Teil dieses anweisbaren gemacht, der viel einfacher ist und minimale Probleme benötigt, um zu arbeiten
Link zum zweiten Teil (am einfachsten).
Schritt 1: Dinge, die wir für dieses Projekt benötigen (Anforderungen)
1. Arduino Board (wir können jedes Board (328, 2560) verwenden, dh Mega, Uno, Mini usw., aber mit bestimmten anderen Pins)
2. PC oder Laptop mit Linux (ich habe Fedora 29 verwendet) oder Live USB mit Linux
3. Steckbrett oder Perfboard
4. Anschließen von Drähten
5. TC4420 (Mosfet-Treiber oder ähnliches)
6. Power Mosfet (N- oder P-Kanal, bitte dann entsprechend verdrahten) (ich habe N-Kanal verwendet)
7. Lautsprecher oder Flyback-Transformator (Ja, Sie haben richtig gelesen!!)
8. Geeignetes Netzteil (0-12V) (Ich habe mein eigenes ATX-Netzteil verwendet)
9. Kühlkörper (ich habe von meinem alten PC gerettet)
10. PC mit Windows und USB-Stick.
Um die detaillierte Funktionsweise jeder Komponente und dieses Projekts kennenzulernen, lesen Sie bitte den nächsten Schritt.
Ich habe den zweiten Teil dieses anweisbaren gemacht, der viel einfacher ist und minimale Probleme benötigt, um zu funktionieren. Link zum zweiten Teil (einfachste).
Schritt 2: Das Funktionsprinzip verstehen
Ähhh!! Der längste Teil eines anweisbaren, lesenden und schreibenden Abschnitts ist beides langweilig.
Zuerst müssen wir uns einen Überblick verschaffen, wie das Ding tatsächlich funktioniert.
Was wir hier tun, ist, dass wir zuerst unseren MP3-Song in eine WAV-Datei und diese Datei in eine C-Header-Datei konvertieren, indem wir die Software verwenden, die im Link enthalten ist. Dieser C-Code enthält tatsächlich 8-Bit-Datensamples (warum 8-Bit?
Theorie eines Audiosignals.
Für diejenigen, die die Abtastrate oder Bitrate nicht kennen:
Die Sampling-Rate ist definiert als die Anzahl der Samples, die wir in einer Sekunde abspielen (normalerweise in Hz oder KHz gemessen).
Um mehr im Detail zu erfahren:-Klicken Sie hier
Standard-Abtastraten sind 44100 Hz (beste Qualität), 32000 Hz, 22050 Hz usw.
Das bedeutet, dass 44100 Samples in einer Sekunde verwendet werden, um eine entsprechende Welle zu erzeugen.
d.h. Jedes Sample muss in einem festen Intervall von 1/44100=22,67 uS abgespielt werden.
Dann kommt die Bittiefe eines Audiosignals, die normalerweise ein Maß dafür ist, wie präzise ein Klang in digitalem Audio dargestellt wird. Je höher die Bittiefe, desto genauer der digitale Ton.
Aber mit Arduino oder einem anderen Mikrocontroller mit 16Mhz-Takt können wir nur bis zu 8-Bit verwenden. Ich werde es erklären, warum.
Es gibt eine Formel auf Seite Nr. 102 im Datenblatt von 328p: - Datenblatt
Ich werde nicht ins Detail gehen, warum ich diese Formel verwende.
Frequenz des Signals = Taktsignal / N x (1+TOP)
Taktsignal = 16 MHz (Arduino-Board)
N=Prescaler (1 ist Wert für unser Projekt)
TOP=Wert 0 bis 2^16 (Für 16-Bit-Timerzähler) (255=2^8 (8-Bit) für unser Projekt)
wir erhalten den Wert der Frequenz von Signal = 62,5 kHz
Dies bedeutet, dass die Trägerwellenfrequenz von der Bittiefe abhängt.
Angenommen, wir verwenden den TOP-Wert = 2^16=65536 (d. h. Bittiefe von 16 Bit)
dann erhalten wir den Wert der Frequenz von Signal = 244 Hz (den wir nicht verwenden können)
OKK… So viel Theorie zur Funktionsweise von Audiosignalen ist genug, also zurück zum Projekt.
Der für einen Song generierte C-Code könnte in Arduino kopiert und abgespielt werden, aber wir sind auf 3 Sekunden Audiowiedergabe mit einer Abtastrate von 8000 Hz beschränkt. Denn dieser C-Code ist eine Textdatei und daher nicht komprimiert sondern dekomprimiert. Und es braucht zu viel Platz. (z. B. eine C-Code-Datei mit 43-sekündigem Audio mit 44, 1-kHz-Samples benötigt Platz bis zu 23 MB). Und unser Arduino Mega bietet uns einen Speicherplatz von etwa 256 KB.
Also, wie wir Songs mit Arduino spielen werden. Es ist nicht möglich. Dieses Instructable ist gefälscht. Keine Sorge Leser, Aus diesem Grund müssen wir eine Art Kommunikation zwischen Arduino mit so hohen Geschwindigkeiten (bis zu 1 Mb/s) verwenden, um Audiodaten an Arduino zu senden.
Aber wie viel Geschwindigkeit brauchen wir dafür genau??
Die Antwort ist 44000 Bytes pro Sekunde, was Geschwindigkeiten von mehr als 44000*8=325.000 Bits/s bedeutet.
Wir brauchen ein weiteres Peripheriegerät mit großem Speicher, um diese Daten an unseren Arduino zu senden. Und das wird unser PC mit Linux sein (warum PC mit Linux??? bitte lesen Sie weiter, um mehr darüber zu erfahren.)
Ahaa…Das bedeutet, dass wir die serielle Kommunikation verwenden können…Aber warte…seriell ist nur mit Geschwindigkeiten von bis zu 115200 Bit/s möglich, was bedeutet (325000/115200=3), dass es dreimal langsamer ist als erforderlich.
Nein, meine Freunde, ist es nicht. Wir verwenden eine Geschwindigkeit oder Baudrate von 500.000 Bit/s Geschwindigkeit mit einem Kabel von bis zu 20-30 cm max., was 1,5-mal schneller als erforderlich ist.
Warum Linux, nicht Windows ???
Wir müssen also Samples in einem Intervall (ebenfalls oben angegeben) von 1/44100=22,67 uS mit unserem PC senden.
Wie können wir es so programmieren??
Wir können C++ verwenden, um ein Datenbyte in einem Intervall durch Serial zu senden, indem wir eine Art Schlaffunktion verwenden
wie Nanosleep, Chrono, etc, etc….
for(int x=0;x
sendData(x);
Nanoschlaf (22000); // 22uS
}
ABER NEIN ES FUNKTIONIERT NICHT UNTER WINDOWS funktionierte auch nicht auf diese Weise unter Linux (aber ich habe eine andere Möglichkeit gefunden, die Sie in meinem angehängten Code sehen können.)
Weil wir eine solche Granularität mit Windows nicht erreichen können. Sie benötigen Linux, um eine solche Granularität zu erreichen.
Probleme fand ich sogar unter Linux…
Wir können eine solche Granularität mit Linux erreichen, aber ich habe keine solche Funktion gefunden, um mein Programm für 22uS in den Ruhezustand zu versetzen.
Funktionen wie Nanosleep, Chrono Nanosleep, etc, etc. funktionieren auch nicht, da sie einen Schlaf nur über 100 uS ermöglichen. Aber ich brauchte genau, genau 22 uS. Ich habe jede einzelne Seite bei Google recherchiert und mit allen möglichen Funktionen experimentiert, die in C/C++ verfügbar sind, aber nichts hat für mich funktioniert. Dann habe ich mir eine eigene Funktion ausgedacht, die für mich als echter Charme funktioniert hat.
Und mein Code bietet jetzt einen genauen, genauen Schlaf von 1uS oder mehr !!!
Damit haben wir den schwierigen Teil abgedeckt und der Rest ist einfach…
Und wir möchten mit Arduino ein PWM-Signal mit einer bestimmten Frequenz erzeugen, auch Trägerwellenfrequenz. (62,5 KHz (wie oben berechnet) für eine gute Signalimmunität).
Wir müssen also sogenannte TIMER von Arduino verwenden, um PWM zu erstellen. Darauf gehe ich übrigens nicht weiter ein, denn zum Thema TIMER findest du viele Tutorials, aber wenn du welche nicht findest, dann kommentiere ich unten eins.
Ich habe einen TC4420 Mosfet-Treiber verwendet, um unsere Arduino-Pins zu retten, da sie manchmal nicht so viel Strom liefern können, um einen MOSFET anzusteuern.
Das war also fast die Theorie dieses Projekts, wir können jetzt den Schaltplan sehen.
ACHTUNG ACHTUNG ACHTUNG
Tatsächlich wurde dieses Projekt absichtlich sehr schwierig gemacht (ich werde sagen, warum), es gibt eine andere Methode, die kein PC erfordert, nur Arduino und Lautsprecher in meinem nextinstructable. Link ist hier.
*Der Hauptzweck dieses Projekts besteht darin, die serielle Kommunikation zu nutzen und ihre Leistungsfähigkeit zu kennen und zu lernen, wie wir unseren PC so programmieren können, dass er Aufgaben in so feinen Intervallen präzise erledigt.*
Schritt 3: Schaltplan
Verbinden Sie alle Komponenten wie im Schaltplan gezeigt. Sie haben hier also zwei Möglichkeiten:-
1. Schließen Sie einen Lautsprecher an (verbunden mit 5V)
2. Schließen Sie einen Flyback-Transformator an (verbunden mit 12V)
Ich habe beides probiert. Und beides funktioniert ziemlich gut.
Haftungsausschluss:-
*Ich empfehle die Verwendung des Flyback-Transformators mit Vorsicht, da er gefährlich sein kann, da er hohe Spannungen erzeugt. Und ich übernehme keine Haftung für Schäden.*
Schritt 4: Konvertieren Sie MP3 in eine WAV-Datei mit Audacity
Laden Sie also zunächst die Software herunter
1. Audacity, suchen und von Google herunterladen
2. Um eine WAV-Datei in C-Code zu konvertieren, laden Sie eine Fensteranwendung mit dem Namen WAVToCode. herunter
Sie können über diesen Link erfahren, wie Sie die WAVToCode-Software verwenden und sie von diesem Link herunterladen.
Ich werde auch detaillierte Schritte zur Verwendung beider Software geben.
Bitte sehen Sie sich die Fotos an, die mit diesem instructable verbunden sind.
In diesem Schritt konvertieren wir MP3 in Wav. (Folgen Sie den Fotos, die Projektrate muss 44100 Hz betragen)
Im nächsten Schritt konvertieren wir eine wav-Datei in C-Code.
Schritt 5: WAV zu C-Code
Folgen Sie den Fotos.
Siehe die letzten beiden Bilder, die Änderungen müssen genau gleich sein, Großbuchstaben sollten groß und Kleinbuchstaben sollten kleiner sein, oder Sie erhalten beim Kompilieren einen Syntaxfehler.
(Sie können sehen, dass das Lied von 1 Minute 41s 23 MB Speicherplatz benötigt.)
Ändern Sie den Songnamen und die Länge mit dem Namen bzw. der Dauer Ihres Songs.
Und speichern Sie die C-Code-Datei.
Tun Sie dies für alle Songs, die Sie mit Arduino spielen möchten
Schritt 6: Erstellen Sie eine endgültige Datei und starten Sie Ihr Linux
Fügen Sie alle konvertierten Songs in die Datei hinzu, die in diesem Link bereitgestellt wird.
Und folge den Bildern.
Laden Sie den Code in Arduino hoch, den ich angehängt habe.
Denken Sie an die Dateinamen des C-Codes (z. B. Lifestyle, Dollar, Weare), da wir genau die gleichen Namen in unserem Code unter Beachtung der Groß-/Kleinschreibung erwähnen müssen.
Starten Sie am Ende Ihren Fedora Live USB oder einen anderen und installieren Sie den gcc-Compiler und verwenden Sie dann die Kompilierungsanweisungen aus dem Ordner, kompilieren Sie das Programm und führen Sie es aus.
Am Ende können Sie Songs von Speaker oder Flyback anhören.
Vielen Dank für das Lesen dieses instructable und bitte kommentieren, wenn es Ihnen gefällt.
ACHTUNGIch habe den zweiten Teil dieses anweisbaren gemacht, der viel einfacher ist und minimale Probleme benötigt, um zu arbeiten. Link zum zweiten Teil (am einfachsten)
Empfohlen:
Spielen Sie Doom auf Ihrem iPod in 5 einfachen Schritten!: 5 Schritte
Spielen Sie Doom auf Ihrem iPod in 5 einfachen Schritten!: Eine Schritt-für-Schritt-Anleitung zum Dual-Booten von Rockbox auf Ihrem iPod, um Doom und Dutzende anderer Spiele zu spielen. Es ist wirklich einfach zu tun, aber viele Leute sind immer noch erstaunt, wenn sie sehen, wie ich Doom auf meinem iPod spiele, und werden mit der Anleitung verwirrt
So kopieren Sie Spielstände auf einfache Weise auf eine Microsoft- oder Drittanbieter-MU.: 9 Schritte
So kopieren Sie Spielstände einfach auf eine Microsoft- oder Drittanbieter-MU.: Original-Tutorial HIER CD, die es einfach macht, genau das zu tun. Dies ist kein vollständiges Softmod-Tutorial, dies
So tauschen Sie Discs auf PS1 (oder PSX) aus: 8 Schritte
So tauschen Sie Discs auf PS1 (oder PSX) aus: Dies zeigt Ihnen Schritt für Schritt, wie Sie Discs auf PS1 (oder PSX) austauschen. Dies ist ziemlich schwierig. Wenn Sie Probleme haben, besuchen Sie diese Website http://www.angelfire.com/ca/PlaystationHouse/SwapTrick.html
So erhalten Sie Musik von fast jeder (Haha) Website (solange Sie sie hören können, können Sie sie bekommen Okay, wenn sie in Flash eingebettet ist, können Sie es möglicherweise nicht) BEARBEITET!!!!! Hinzugefügte Informationen: 4 Schritte
So erhalten Sie Musik von fast jeder (Haha) Website (solange Sie sie hören können, können Sie sie bekommen … Okay, wenn sie in Flash eingebettet ist, können Sie es möglicherweise nicht) BEARBEITET!!!!! Zusätzliche Informationen: Wenn Sie jemals auf eine Website gehen und ein Lied abspielen, das Sie mögen und es wollen, dann ist hier das anweisbare für Sie, nicht meine Schuld, wenn Sie etwas durcheinander bringen (nur so wird es passieren, wenn Sie ohne Grund anfangen, Dinge zu löschen) ) Ich konnte Musik für
So nehmen Sie Musik kostenlos oder so gut wie nichts auf – wikiHow
Wie man Musik umsonst oder so gut wie nichts aufnimmt: Ich bin in einer kleinen Band und wir wollten Musik aufnehmen, aber ohne viel Geld auszugeben, also habe ich mir das ausgedacht