Hallo Leute, in den letzten Wochen habe ich daran gearbeitet, mich wieder mit meiner Liebe zur Gitarre zu verbinden. Auf der Boxgitarre habe ich mich vor ein paar Jahren entspannt, bevor das Saxophon übernahm. Als ich zur Gitarre zurückkehrte, nachdem ich 3 Jahre lang selten einen Akkord gespielt hatte, stellte ich unter anderem fest, dass ich nicht mehr wusste, wie jede Saite klingen sollte, um es in den Worten meines Freundes auszudrücken: „Mein Gehör war nicht mehr gestimmt“ und Infolgedessen konnte ich die Gitarre ohne ein Keyboard oder eine mobile App, die ich später heruntergeladen hatte, nicht stimmen. Die Wochen vergingen bis vor ein paar Tagen, als der Hersteller in mir motiviert wurde und ich beschloss , einen auf Arduino basierenden Gitarrentuner zu bauen. Im heutigen Tutorial werde ich Ihnen zeigen, wie Sie Ihren eigenen DIY Arduino Guitar Tuner bauen.
Wie Gitarrentuner funktioniert
Bevor wir zur Elektronik übergehen, ist es wichtig, das Prinzip hinter dem Build zu verstehen. Es gibt 7 Hauptnoten, die durch die Alphabete gekennzeichnet sind; A, B, C, D, E, F, G und enden normalerweise mit einem anderen A, das immer eine Oktave höher als das erste A ist. In der Musik existieren mehrere Versionen dieser Noten wie das erste A und das letzte A. Diese Noten unterscheiden sich jeweils von ihrer Variation und voneinander durch eine der als Tonhöhe bekannten Klangmerkmale. Die Tonhöhe ist definiert als die Lautstärke oder Lautstärke des Tons und wird durch die Frequenz dieses Tons angezeigt. Da die Frequenz dieser Noten bekannt ist, müssen wir nur feststellen, ob die Gitarre gestimmt ist oder nicht, und nur die Frequenz der Note einer bestimmten Saite mit der tatsächlichen Frequenz der Note vergleichen, die die Saite darstellt.
Die Frequenzen der 7 Noten sind:
A = 27,50 Hz
B = 30,87 Hz
C = 16,35 Hz
D = 18,35 Hz
E = 20,60 Hz
F = 21,83 Hz
G = 24,50 Hz
Jede Variation dieser Noten hat immer eine Tonhöhe gleich FxM, wobei F die Frequenz und M eine Ganzzahl ungleich Null ist. Somit ist für das letzte A, das, wie zuvor beschrieben, eine Oktave höher als das erste A ist, die Frequenz;
27,50 x 2 = 55 Hz.
Die Gitarre (Lead / Box-Gitarre) hat normalerweise 6 Saiten, die durch die Noten E, A, D, G, B, E auf der offenen Saite gekennzeichnet sind. Wie üblich liegt das letzte E eine Oktave höher als das erste E. Wir werden unseren Gitarrentuner so entwickeln, dass die Gitarre mit den Frequenzen dieser Noten gestimmt werden kann.
Entsprechend der Standard-Gitarrenstimmung sind die Note und die entsprechende Frequenz jeder Saite in der folgenden Tabelle aufgeführt.
Saiten |
Frequenz |
Notation |
1 (E) |
329,63 Hz |
E4 |
2 (B) |
246,94 Hz |
B3 |
3 (G) |
196,00 Hz |
G3 |
4 (D) |
146,83 Hz |
D3 |
5 (A) |
110,00 Hz |
A2 |
6 (E) |
82,41 Hz |
E2 |
Der Projektablauf ist recht einfach; Wir wandeln das von der Gitarre erzeugte Tonsignal in eine Frequenz um und vergleichen es dann mit dem genauen Frequenzwert der gestimmten Saite. Der Gitarrist wird über eine LED benachrichtigt, wenn der Wert korreliert.
Die Frequenzerkennung / -umwandlung umfasst 3 Hauptstufen;
- Verstärken
- Ausgleich
- Analog-Digital-Wandlung (Abtastung)
Das erzeugte Tonsignal ist zu schwach, als dass der ADC des Arduino es erkennen könnte, daher müssen wir das Signal verstärken. Um das Signal nach der Verstärkung innerhalb des vom ADC des Arduino erkennbaren Bereichs zu halten und ein Übersteuern des Signals zu verhindern, versetzen wir die Spannung des Signals. Nach dem Versetzen wird das Signal dann an den Arduino ADC weitergeleitet, wo es abgetastet wird und die Frequenz dieses Tons erhalten wird.
Erforderliche Komponenten
Die folgenden Komponenten sind erforderlich, um dieses Projekt zu erstellen.
- Arduino Uno x1
- LM386 x1
- Kondensatormikrofon x1
- Mikrofon- / Audiobuchse x1
- 10k Potentiometer x1
- O.1uf Kondensator x2
- 100 Ohm Widerstand x4
- 10 Ohm Widerstand x1
- 10uf Kondensator x3
- 5mm gelbe LED x2
- 5mm grüne LED x1
- Öffnen Sie normalerweise die Drucktasten x6
- Überbrückungsdrähte
- Steckbrett
Schema
Schließen Sie die Komponenten wie im folgenden Schaltplan des Gitarrentuners gezeigt an.
Die Druckknöpfe werden ohne Pull-Up / Down-Widerstände angeschlossen, da die eingebauten Pull-Up-Widerstände des Arduino verwendet werden. Dies soll sicherstellen, dass die Schaltung so einfach wie möglich ist.
Arduino Code für Gitarrentuner
Der Algorithmus hinter dem Code für dieses Gitarrentuner-Projekt ist einfach. Um eine bestimmte Saite zu stimmen, wählt der Gitarrist die Saite durch Drücken des entsprechenden Druckknopfs aus und spielt eine offene Saite. Der Ton wird von der Verstärkungsstufe gesammelt und an den Arduino ADC weitergeleitet. Die Frequenz wird dekodiert und verglichen. Wenn die Eingangsfrequenz der Zeichenfolge unter der angegebenen Frequenz liegt, leuchtet für diese Zeichenfolge eine der gelben LEDs auf, um anzuzeigen, dass die Zeichenfolge festgezogen werden soll. Wenn die gemessene Frequenz größer als die für diese Zeichenfolge festgelegte Frequenz ist, leuchtet eine weitere LED auf. Wenn die Frequenz innerhalb des für diese Saite festgelegten Bereichs liegt, leuchtet die grüne LED, um den Gitarristen zu führen.
Der vollständige Arduino-Code wird am Ende angegeben. Hier haben wir die wichtigen Teile des Codes kurz erläutert.
Wir beginnen mit der Erstellung eines Arrays für die Schalter.
int buttonarray = {13, 12, 11, 10, 9, 8}; // //
Als Nächstes erstellen wir ein Array, das die entsprechende Frequenz für jede der Zeichenfolgen enthält.
float freqarray = {82,41, 110,00, 146,83, 196,00, 246,94, 329,63}; // alles in Hz
Nachdem dies erledigt ist, deklarieren wir die Pins, an die die LEDs angeschlossen sind, und andere Variablen, die zum Abrufen der Frequenz vom ADC verwendet werden.
int lowerLed = 7; int highLed = 6; int justRight = 5; #define LENGTH 512 Byte rawData; int count;
Als nächstes folgt die Funktion void setup () .
Hier beginnen wir damit, das interne Hochziehen des Arduino für jeden der Pins zu aktivieren, an die die Schalter angeschlossen sind. Danach setzen wir die Pins, an die die LEDs angeschlossen sind, als Ausgänge und starten den seriellen Monitor, um die Daten anzuzeigen.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (höherLED, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }}
Als nächstes ist die Leerenschleifenfunktion , wir implementieren die Frequenzerkennung und den Vergleich.
void loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } else { sum = 0; pd_state = 0; int period = 0; für (i = 0; i <len; i ++) { // Autokorrelation sum_old = sum; Summe = 0; für (k = 0; k <len-i; k ++) summe + = (rawData-128) * (rawData-128) / 256; // Serial.println (sum); // Peak Detect State Machine if (pd_state == 2 && (sum-sum_old) <= 0) { period = i; pd_state = 3; } if (pd_state == 1 && (Summe> Schwelle) && (Summe-Summe_old)> 0) pd_state = 2; if (! i) { Thresh = Summe * 0,5; pd_state = 1; }} } // Frequenz in Hz angegeben, wenn (Schwellwert> 100) { freq_per = sample_freq / period; Serial.println (freq_per); für (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == HIGH) { if (freq_per - freqarray <0) { digitalWrite (lowerLed, HIGH); } else if (freq_per - freqarray> 10) { digitalWrite (höherLed, HIGH); } else { digitalWrite (justRight, HIGH); } } } } count = 0; } }
Der vollständige Code mit einem Demonstrationsvideo ist unten angegeben. Laden Sie den Code auf Ihr Arduino-Board hoch und klimpern Sie.