Inhaltsverzeichnis:

Digitalisieren Sie einen Song mit Arduino - Gunook
Digitalisieren Sie einen Song mit Arduino - Gunook

Video: Digitalisieren Sie einen Song mit Arduino - Gunook

Video: Digitalisieren Sie einen Song mit Arduino - Gunook
Video: Musik über RFID-Tags auf Spotify abspielen (FHEM + Arduino + MQTT) | haus-automatisierung.com [4K] 2024, November
Anonim
Digitalisiere einen Song mit Arduino
Digitalisiere einen Song mit Arduino

Ich wollte ein Projekt schaffen, das zwei meiner Lieblingsfächer kombiniert: Wissenschaft und Musik. Ich dachte an alle Möglichkeiten, wie ich diese beiden Domänen kombinieren könnte, und dachte, dass es interessant wäre, ein Arduino Fur Elise spielen zu lassen, während die Tonhöhe der Note in Hertz angezeigt wird. Jetzt fangen wir an zu bauen!

Sie benötigen einen Arduino Uno oder Mega, viele Überbrückungskabel, einen Piezo-Summer, ein Steckbrett, einen 16 * 2-LCD-Bildschirm mit allen Wischerstiften und ein 10k-Potentiometer (Sie können auch hören, dass sie als Potmeter bezeichnet werden).). Es ist am besten, alle diese Vorräte zusammenzustellen, bevor wir mit dem Bau beginnen.

Schritt 1: Konvertieren Sie die Musikpartitur in digitale Noten: Verzögerungswerte

Konvertieren Sie die Musikpartitur in digitale Noten: Verzögerungswerte
Konvertieren Sie die Musikpartitur in digitale Noten: Verzögerungswerte

Es gibt zwei Schritte, um eine Note aus der Partitur digital in ihr digitales Äquivalent zu transkribieren. Zuerst müssen wir die Dauer der Notiz in Millisekunden schreiben. Ich habe für diese Aufgabe ein online gefundenes Diagramm verwendet. Basierend darauf, ob eine Note eine halbe Note, eine Viertelnote, eine Achtelnote usw. war, habe ich die Notenlänge in Millisekunden transkribiert. Sie können diese Zahlen in meinem Code als delay() sehen; -Funktion und die Zahl in Klammern ist der Verzögerungswert in Millisekunden, den wir in diesem Schritt ermittelt haben.

Schritt 2: Konvertieren Sie die Musikpartitur in digitale Noten: Hertz-Werte

Konvertieren Sie die Musikpartitur in digitale Noten: Hertz-Werte
Konvertieren Sie die Musikpartitur in digitale Noten: Hertz-Werte

Bevor Sie mit diesem Schritt beginnen, lassen Sie mich einige technische Begriffe definieren. Der "Wert" einer Note kann austauschbar mit den Wörtern "Tonhöhe", "Wert" und "Note" verwendet werden. Jetzt müssen Sie jede Note des Liedes aus der Partitur lesen. Sie müssen dann jede Note in Hertz übersetzen, indem Sie eine Musik-in-Hertz-Tabelle verwenden, die Sie leicht online finden können. Denken Sie daran, dass das mittlere C in der Tabelle als C4 aufgeführt ist und eine Oktave höher als C5 und so weiter. Sobald diese Noten alle in Hertz transkribiert sind, werden Sie die Werte in die Funktion Tone(x, y, z) setzen; wobei X die Pinnummer oder const int ist, eine Möglichkeit, Variablen zu definieren, die ich später erläutern werde. Y ist der Hertz-Wert, den Sie gerade transkribiert haben, und Z ist die Dauer der Note in Millisekunden, gerundet auf das nächste Hundertstel. Die Verzögerung(); Werte sind die Dauer der Note. Lassen Sie uns nun die Schaltung entwerfen, die die Musik abspielen kann.

Schritt 3: Schaltungsdesign

Schaltungsdesign
Schaltungsdesign

Nachdem wir alle Noten in digitale Werte übersetzt haben, die ein Computer verstehen kann, ist es an der Zeit, die Schaltung aufzubauen. Beginnen Sie, indem Sie ein Steckbrett nehmen und den LCD-Bildschirm mit dem ersten Pin (GND) in Reihe 14 platzieren. Platzieren Sie den Summer an einer beliebigen Stelle und platzieren Sie ein Potentiometer daneben. Das Ziel ist es, alles auszurichten, um die Kabelsalat zu minimieren. Platzieren Sie den Arduino neben dem Steckbrett und verbinden Sie den 5V-Pin mit der positiven Schiene des Steckbretts und den Massestift mit der negativen Schiene. Jetzt sind wir bereit, Jumper zwischen dem Arduino und den Komponenten zu verbinden.

Lassen Sie uns nun über die Pins auf dem LCD sprechen und wie man sie verdrahtet.

GND steht für Masse, das ist der negative Draht bei Gleichstrom. Verbinden Sie GND mit der negativen Schiene des Steckbretts.

VCC steht für Voltage at the Common Collector, und hier schließen Sie Ihre 5-Volt-Stromquelle (die positive Stromschiene) an.

VO steht für Contrast, verdrahten Sie dies mit dem mittleren Pin des Potentiometers. Verbinden Sie den linken Pin des Potentiometers mit der positiven Stromschiene und den rechten Pin mit der Massestromschiene.

RS steht für Register Select und wird vom Arduino verwendet, um dem Display mitzuteilen, wo die Daten gespeichert werden sollen. Verbinden Sie diesen Pin mit Pin 12 auf dem Arduino.

RW steht für Read/Write-Pin, mit dem der Arduino überprüft, ob der Bildschirm anzeigt, was Sie programmiert haben. Verbinden Sie diesen Stift mit der negativen Schiene auf dem Steckbrett.

E steht für Enable, was dem LCD mitteilt, welche Pixel aktiviert (ein) oder deaktiviert (ausgeschaltet) werden sollen. Verbinden Sie diesen Pin mit dem Arduino-Pin 11.

D4, D5, D6 und D7 sind Anzeigestifte, die die angezeigten Zeichen und Buchstaben steuern. Verbinden Sie sie mit den Arduino-Pins 5, 4, 3 bzw. 2.

Pin A, manchmal mit LED bezeichnet, ist die LED-Anode für die Hintergrundbeleuchtung. Verbinden Sie diese mit einem Draht oder mit einem 220-Ohm-Widerstand mit der positiven Stromschiene. Der Widerstand ist besser für den längeren Gebrauch, da er das LCD schont, aber wenn das Gerät Tag und Nacht nicht verwendet wird, benötigen Sie den Widerstand nicht.

Pin K, manchmal auch (verwirrend) mit LED bezeichnet, ist der LED-Massepin. Verbinden Sie diese mit der Erdungsstromschiene.

Schritt 4: Code-Upload: How-To

Schließen Sie Ihr Arduino an den USB Ihres Computers an. Laden Sie den folgenden Code mit dem Arduino IDE-Programmierer hoch.

#enthalten

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; Flüssigkristallanzeige (rs, en, d4, d5, d6, d7);

Leere Einrichtung () {

// die Anzahl der Spalten und Zeilen des LCD einrichten: lcd.begin (16, 2); // Eine Nachricht auf dem LCD ausgeben. lcd.print("Hertz Pitch:!"); Verzögerung (1000); Void Schleife () {// e4 Verzögerung (600); // Pause für 0,6 Sekunden Ton (10, 329.63, 300); // e zum Summer an Pin 10 abspielen, zuletzt für 0,3 Sekunden lcd.print (" 329.63"); // eine Meldung auf dem LCD "329.63" anzeigen

Verzögerung (350); // Verzögerung um 0,35 Sekunden

lcd.clear (); // LCD löschen und für nächste Nachricht zurücksetzen // d4 # Ton abspielen (10, 311.13, 300); lcd.print("311.13"); Verzögerung (350); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (350); lcd.clear(); // d4 # Ton spielen (10, 311.13, 300); lcd.print("311.13"); Verzögerung (350); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (350); lcd.clear(); // b3-Ton spielen (10, 246.94, 300); lcd.print("246.94"); Verzögerung (400); lcd.clear(); // d4-Ton spielen (10, 293.66, 300); lcd.print("293.66"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 300); lcd.print("261.63"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 900); lcd.print("220.0"); Verzögerung (1000); lcd.clear();//line60//helpsave//avrdude.failure.eeprom // d3-Ton spielen (10, 146.83, 300); lcd.print("146.63"); Verzögerung (350); lcd.clear(); // f3-Ton spielen (10, 174.61, 300); lcd.print("174.61"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 300); lcd.print("220"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 900); lcd.print("246.94"); Verzögerung (1000); lcd.clear();

// e3 spielen

Ton (10, 164,81, 300); lcd.print("164.81"); Verzögerung (400); lcd.clear(); // g3 # Ton spielen (10, 207.65, 300); lcd.print("207.65"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 300); lcd.print("246.94"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 900); lcd.print("261.63"); Verzögerung (1000); lcd.clear(); // e-Ton spielen (10, 164,81, 300); lcd.print("164.81"); Verzögerung (400); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (400); lcd.clear(); // d4 # Ton spielen (10, 311.13, 300); lcd.print("311.13"); Verzögerung (400); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (400); lcd.clear(); // d4 # Ton spielen (10, 311.13, 300); lcd.print("311.13"); Verzögerung (400); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 300); lcd.print("246.94"); Verzögerung (400); lcd.clear(); // d4-Ton spielen (10, 293.66, 300); lcd.print("293.66"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 300); lcd.print("261.63"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 900); lcd.print("220.0"); Verzögerung (1000); lcd.clear(); // d3-Ton spielen (10, 146.83, 300); lcd.print("146.83"); Verzögerung (400); lcd.clear(); // f3-Ton spielen (10, 174.61, 300); // eeprom 20--6 ja nein, flash 65--0 nein lcd.print ("174.61"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 300); lcd.print("220.0"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 900); lcd.print("246.94"); Verzögerung (1000); lcd.clear(); // f3-Ton spielen (10, 174.61, 300); lcd.print("174.61"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 300); lcd.print("261.63"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 300); lcd.print("246.94"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 900); lcd.print("220.0"); Verzögerung (1000); lcd.clear(); // b3-Ton spielen (10, 246.94, 300); lcd.print("246.94"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 300); lcd.print("261.63"); Verzögerung (400); lcd.clear(); // d4-Ton spielen (10, 293.66, 300); lcd.print("293.66"); Verzögerung (400); lcd.clear(); // e4-Ton spielen (10, 329.63, 900); lcd.print("329.63"); Verzögerung (1000); lcd.clear(); // g3-Ton spielen (10, 196, 300); lcd.print("196.0"); Verzögerung (400); lcd.clear(); // f4-Ton spielen (10, 349.23, 300); lcd.print("349.23"); Verzögerung (400); lcd.clear(); // e4-Ton spielen (10, 329.23, 300); lcd.print("329.23"); Verzögerung (400); lcd.clear(); // d4-Ton spielen (10, 293.63, 900); lcd.print("293.63"); Verzögerung (1000); lcd.clear(); // e3-Ton spielen (10, 164,81, 300); lcd.print("164.81"); Verzögerung (400); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (400); lcd.clear(); // d4-Ton spielen (10, 293.63, 300); lcd.print("293.63"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 900); lcd.print("261.63"); Verzögerung (1000); lcd.clear(); // d3-Ton spielen (10, 146.83, 300); lcd.print("146.83"); Verzögerung (400); lcd.clear(); // d4-Ton spielen (10, 293.63, 300); lcd.print("293.63"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 300); lcd.print("261.63"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 900); lcd.print("246.94"); Verzögerung (1000); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (400); lcd.clear(); // d4 # Ton spielen (10, 311.13, 300); lcd.print("311.13"); Verzögerung (350); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (350); lcd.clear(); // d4 # Ton spielen (10, 311.13, 300); lcd.print("311.13"); Verzögerung (350); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (350); lcd.clear(); // b3-Ton spielen (10, 246.94, 300); lcd.print("246.94"); Verzögerung (400); lcd.clear(); // d4-Ton spielen (10, 293.66, 300); lcd.print("293.66"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 300); lcd.print("261.63"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 900); lcd.print("220.0"); Verzögerung (1000); lcd.clear(); // d3-Ton spielen (10, 146.83, 300); lcd.print("146.83"); Verzögerung (350); lcd.clear(); // f3-Ton spielen (10, 174.61, 300); lcd.print("174.61"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 300); lcd.print("220.0"); Verzögerung (400); // b3 lcd.clear () spielen; Ton (10, 246.94, 900); lcd.print("246.94"); Verzögerung (1000); lcd.clear(); // e3-Ton spielen (10, 164,81, 300); lcd.print("164.81"); Verzögerung (400); lcd.clear(); // g#3-Ton spielen (10, 207.65, 300); lcd.print("207.65"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 300); lcd.print("246.94"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 900); lcd.print("261.63"); Verzögerung (1000); Verzögerung (300); lcd.clear(); // e3-Ton spielen (10, 164,81, 300); lcd.print("164.81"); Verzögerung (400); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (400); lcd.clear(); // d4 # Ton spielen (10, 311.13, 300); lcd.print("311.13"); Verzögerung (400); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (400); lcd.clear(); // d4 # Ton spielen (10, 311.13, 300); lcd.print("311.13"); Verzögerung (400); lcd.clear(); // e4-Ton spielen (10, 329.63, 300); lcd.print("329.63"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 300); lcd.print("246.94"); Verzögerung (400); lcd.clear(); // d4-Ton spielen (10, 293.66, 300); lcd.print("293.66"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 300); lcd.print("261.63"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 900); lcd.print("220.0"); Verzögerung (1000); lcd.clear(); // d3-Ton spielen (10, 146.83, 300); lcd.print("146.83"); Verzögerung (400); lcd.clear(); // f3-Ton spielen (10, 174.61, 300); lcd.print("174.61"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 300); lcd.print("220.0"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 900); lcd.print("246.94"); Verzögerung (1000); lcd.clear(); // f3-Ton spielen (10, 174.61, 300); lcd.print("174.61"); Verzögerung (400); lcd.clear(); // c4-Ton spielen (10, 261.63, 300); lcd.print("261.63"); Verzögerung (400); lcd.clear(); // b3-Ton spielen (10, 246.94, 300); lcd.print("246.94"); Verzögerung (400); lcd.clear(); // a3-Ton spielen (10, 220, 900); lcd.print("220.0"); Verzögerung (1000); lcd.clear(); }

Schritt 5: Code-Upload: Was bedeutet das alles?

Lassen Sie uns einige Funktionen auf Englisch definieren, damit Sie den Code verstehen.

Ton (x, y, z); = einen Ton mit einer Tonhöhe von y Hertz zu einem Summer an Pin x für z Millisekunden spielen.

lcd.print("XYZ"); = Drucken Sie eine Nachricht mit den Zeichen XYZ auf dem LCD-Bildschirm aus. (z. B. Hertz-Tonhöhe anzeigen)

Verzögerung(x); = Pause für x Millisekunden.

const int X=Y = eine konstante Variable X auf Pin Y setzen und entweder X oder Y verwenden, um dem Gerät Aufgaben zuzuweisen.

lcd.clear(); = Löschen Sie den LCD-Bildschirm und setzen Sie ihn für eine neue Anzeige zurück

pinMode (X, AUSGANG); = Pin X für Ausgabemodus setzen

Wenn Sie alle diese Funktionen verstanden haben, können Sie die Variablen ganz einfach durch die Daten ersetzen, die Sie beim Übersetzen eines Songs sammeln, und dann Ihren eigenen Song codieren!

Schritt 6: Fertig!

Fertig!!!
Fertig!!!
Fertig!!!
Fertig!!!

Sie haben entweder ein Arduino, das Fur Elise spielt und die Notenwerte in Hertz anzeigt, oder Sie haben ein Arduino erstellt, das die Melodie des von Ihnen ausgewählten Liedes spielt und den Text anzeigt, den Sie anzeigen möchten. Vielen Dank für Ihren Besuch in diesem Tutorial, und ich hoffe auf dieses Projekt auf dem Arduino.

Empfohlen: