EDIT : Ich habe in diesem Problem seit geraumer Zeit untersucht. Es ist ein viel schwierigeres Projekt als ich dachte und nichts für Anfänger. Dies erfordert teure Hardware (Mikrofon & Verstärker) und einige ausgefeilte Audioanalysen auf dem Mikrocontroller. Selbst ein komplettes Mikrofon mit stärkerer Schaltung liefert nicht die gewünschten Ergebnisse (laut den Kommentaren zu diesem Produkt)
Ich bin völlig neu im Arduino (aber ich bin mit dem Programmieren vertraut). Um ein VU-Meter zu bauen , möchte ich ein Mikrofon an den analogen 0-Pin des Arduino anschließen und den Wert über die serielle Verbindung anzeigen.
Ich habe gegoogelt und diese Schaltung gefunden:
... und ich habe versucht, es mit diesem Ergebnis zu bauen:
(Ich benutze jetzt die von Oli Glaser in seiner Antwort vorgeschlagene Schaltung)
Die Werte auf dem seriellen Monitor ändern sich je nach Musiklautstärke nicht.
Was ist der einfachste Weg, um die Lautstärke am analogen Eingang des Arduino zu messen?
Außerdem habe ich einen TDA2822M , aber ich weiß nicht, ob er für dieses Projekt hilfreich ist. Die Beschriftung auf dem Mikrofon lautet XF-18D .
Edit: Mein Arduino-Code:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(0));
delay(300);
}
Die serielle Ausgabe: 1023 1022 1022 1022 1022 1023 1022 und so weiter
Wie kann ich prüfen, ob das Mikrofon überhaupt funktioniert? Ist es gerichtet?
Edit: Ich benutze jetzt einen S9014 Transistor. Der ADC und die serielle Verbindung funktionieren (ich habe sie mit einem Potentiometer getestet).
Die serielle Ausgabe liegt jetzt bei 57.
Außerdem habe ich kein Multimeter oder Oszilloskop.
Ich habe jetzt ein Multimeter.
quelle
Antworten:
Am einfachsten ist es, das Signal und den Abtastwert mit dem ADC anzulegen. Speichern Sie die Ergebnisse in einem Puffer und zeigen Sie sie wie gewünscht an (in Ihrem Fall senden Sie sie über RS232 an den PC).
Wenn Sie den RMS-Pegel des Signals möchten, müssen Sie diesen entweder vor dem Senden an den PC oder nach dem Senden berechnen.
Die gezeigte Verstärkerschaltung ist nicht ideal, sollte aber für ein einfaches VU-Messgerät angemessen funktionieren. BEARBEITEN - Ich habe gerade C2 bemerkt. Entfernen Sie dies, da es die DC-Vorspannung des Transistors blockiert und das Signal unter der Erde schwingt.
EDIT - hier ist eine bessere Schaltung für den Verstärkungstransistor:
Hierbei sollte der verwendete Transistor keine Rolle spielen, die Ausgangsspannung sollte bei etwa 2,5 V liegen.
Die genauen Werte für den Eingangsteiler (R3 und R4) sind nicht allzu wichtig, eher das Verhältnis 1: 4. Sie können also z. B. 400k und 100k oder 40k und 10k usw. verwenden (versuchen Sie, diese jeweiligen Werte nicht zu überschreiten oder zu unterschreiten). C2 sollte> 10uF sein. C1 sollte> 1uF sein (ersetzt C1 in Ihrem Schaltplan).
R1 und R2 müssen jedoch diese Werte haben.
Alles was Sie brauchen ist das Elektret mit seinem Vorwiderstand (R1 in Ihrem Schaltplan)
Ein Grund zur Sorge ist, dass die Arduino 3.3V- und 5V-Leitungen anscheinend miteinander verbunden sind - ich gehe davon aus, dass dies ein schematischer Fehler ist, aber wenn dies in der tatsächlichen Schaltung der Fall ist, funktioniert es nicht und kann etwas beschädigen.
Um das / die Problem (e) genau zu bestimmen, ist es hilfreich, Ihren Code und das, was Sie auf der PC-Seite sehen, zu sehen. Welchen Transistor verwendest du auch?
Wenn Sie über ein Oszilloskop verfügen, können Sie überprüfen, ob Ihr Mikrofon / Transistor ordnungsgemäß funktioniert. Wenn nicht, kann ein Multimeter verwendet werden, um weitere grundlegende Tests durchzuführen (z. B. Bestätigen, dass +5 V vorhanden sind, dass die Basis des Transistors bei ~ 0,6 V liegt, Testen Sie den Kollektor, um sicherzustellen, dass er nicht an +5 V oder Masse angeschlossen ist, ohne dass ein Signal vorhanden ist).
Außerdem müssen Sie sicherstellen, dass RS232 ordnungsgemäß funktioniert. Schreiben Sie daher einen einfachen Code, um einige Testwerte zu senden.
Wenn Sie die angeforderten Informationen bereitstellen und uns mitteilen können, welche Tools Ihnen zur Verfügung stehen, können Sie spezifischere Hilfe leisten.
BEARBEITEN - Wenn Sie so langsam abtasten, benötigen Sie eine Spitzenwerterkennungsschaltung wie diese:
Sie würden diese Schaltung zwischen dem Transistor und dem Arduino-Pin (minus C2) setzen
Die Diode kann nahezu jede Diode sein. Die Werte für Kappe und Widerstand sind nur Richtwerte und können ein wenig geändert werden. Ihre Werte bestimmen, wie lange es dauert, bis sich die Spannung mit dem Signalpegel ändert. Sie können dies mit der RC-Konstante berechnen (dh R * C - im obigen Beispiel ist die RC-Konstante 1e-6 * 10e3 = 10ms. Es dauert ungefähr 2,3 Zeitkonstanten, bis die Spannung um 90% ihres ursprünglichen Werts abfällt Wenn im obigen Beispiel die Spannung bei 1 V beginnt und Sie das Signal entfernen, ist sie nach ca. 23 ms auf 0,1 V gefallen.
EDIT - okay, denke ich habe ein großes Problem gefunden. Ihr S9012- Transistor ist ein PNP-Transistor (wie auch der S9015), für diese Schaltung benötigen Sie einen NPN-Transistor. Der S9014 ist ein NPN-Transistor, daher müssen Sie diesen verwenden.
Die mit "104" gekennzeichneten Kondensatoren sind mit ziemlicher Sicherheit 0,1 uF Keramikkondensatoren. Der Wert (in pF) besteht aus den ersten beiden Zahlen, gefolgt von einer Anzahl von Nullen, die von der letzten Zahl gesetzt werden. Für 104 beträgt der Wert also 10 + 4 Nullen oder 100.000 pF. 100.000 pF sind 100 nF oder 0,1 uF.
BEARBEITEN -
Das Fehlen eines Oszilloskops oder Multimeters erschwert das Leben hier sehr (Sie sollten sich schnellstmöglich eines oder beide besorgen) . Es gibt jedoch einige grundlegende PC-Soundkarten-Oszilloskope, mit denen Sie Ihre Elektret- / Transistorschaltung testen können. Visual Analyzer ist ein gutes Beispiel:
Wenn Sie C2 ersetzen (nicht unbedingt erforderlich, aber eine gute Idee), sollten Sie in der Lage sein, das Signal direkt in den PC einzuspeisen und in der Software zu beobachten, ob das Mikrofon und die Verstärkung ordnungsgemäß funktionieren. Wenn Ihr PC diese Leitung verwendet, der Mikrofoneingang jedoch normalerweise für bis zu 2 V IIRC geeignet ist. Sie können den Elektret auch direkt testen. Entfernen Sie einfach das Transistorbit und behalten Sie R1 und C1 bei. Nehmen Sie das Signal von der anderen Seite von C1 entgegen.
Beachten Sie, dass diese Methode nicht die DC-Pegel testet, sondern nur den AC (aufgrund einer DC-Sperrkappe im Eingang der Soundkarte), sondern das AC (Audio) -Signal, an dem Sie hier interessiert sind.
Wenn Sie dies versuchen, veröffentlichen Sie die Screenshots, damit wir eine Vorstellung davon bekommen, was passiert.
quelle
EDIT
Blöcke entfernen und sie so bearbeiten, dass sie verstanden werden können, ohne den Kommentarthread zu lesen? Ich bin auch ein Anfänger und verstehe nicht, wie das Problem gelöst wurde und ob ich die Schaltung verwenden kann, die Sie so gepostet haben.Vorausgesetzt, Ihre Schaltung funktioniert, liegt das Audiosignal im kHz-Bereich, während der Arduino einen ADC hat, der für Gleichstrompegel geeignet ist. Die Gleichstromkomponente in Ihrem Signal ist Null, dh sie schwebt über einer festen Spannung. Es ist diese feste Spannung, die Ihr ADC liest.
Um dies zu beheben, schalten Sie eine Diode in Reihe, wobei Ihr Ausgang mit dem ADC und einem Kondensator und einem Widerstand verbunden ist.
Die Kappe wird auf den Spitzenwert aufgeladen, der empfangen wird, während der Widerstand die Kappe entlädt, wenn das Signal nachlässt.
Edit: Der ADC-Eingang ist tatsächlich potentialfrei, da er aufgrund des Reihenkondensators keinerlei Vorspannung aufweist. Wenn Sie meine Lösung ausprobieren möchten, löschen Sie C2.
quelle
When using single-ended mode, the ADC bandwidth is limited by the ADC clock speed. Since one conversion takes 13 ADC clock cycles, a maximum ADC clock of 1 MHz means approximately 77k samples per second. This limits the bandwidth in single-ended mode to 38.5 kHz, according to the Nyquist sampling theorem.
Ihre Messwerte von 1022, 1023 sind auf dem ADC des Arduino im Grunde genommen vollständig. Angenommen, Sie haben einen nicht fehlerhaften Serienkondensator wie in Ihrem Diagramm gezeigt installiert, kann dieser Pegel nicht von der von Ihnen gebauten Mikrofonschaltung kommen, da dies nur wechselnde Spannungen (dh Wechselstrom) koppeln kann.
Infolgedessen vermute ich, dass Sie Leckströme in der ATMEGA selbst ablesen - Sie würden wahrscheinlich das gleiche Ergebnis an einem der anderen (nicht angeschlossenen) analogen Pins erhalten.
Versuchen Sie, einen sehr "leichten" Spannungsteiler mit einigen hochohmigen Widerständen (zwischen 10 K und 100 K) herzustellen, und verwenden Sie diesen, um den Analogeingang auf die Hälfte der Referenzspannung vorzuspannen (Sie können auch ein Potentiometer verwenden, das Ihnen zusätzliche Testmöglichkeiten bietet). Dann sollte Ihr Messwert ohne Eingabe in der Nähe von 512 liegen.
Sobald Sie den ADC-Eingang entsprechend voreingenommen haben, können Sie versuchen, festzustellen, ob Sie durch ihn Variationen bekommen. Möglicherweise ist Ihre Bandbreite etwas zu niedrig bemessen, was bedeutet, dass Sie Aliasing von Hochfrequenzkomponenten erhalten. Wenn Sie jedoch nur versuchen, die Gesamtlautstärke zu schätzen, sollte dies kein allzu großes Problem sein.
quelle