EDIT : Ich habe dieses Problem schon seit geraumer Zeit untersucht. Es stellt sich als ein viel schwierigeres Projekt heraus, als ich dachte, und nichts für Anfänger. Dies erfordert teure Hardware (Mikrofon und Verstärker) und einige ausgefeilte Audioanalysen auf dem Mikrocontroller. Auch ein komplettes Mikrofon mit Verstärkerschaltung liefert nicht die gewünschten Ergebnisse (laut Kommentar zu diesem Produkt)
Ich bin völlig neu im Arduino (aber ich bin mit der Programmierung 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 verwende jetzt die von Oli Glaser in seiner Antwort vorgeschlagene Schaltung)
Die Werte auf dem seriellen Monitor ändern sich nicht in Abhängigkeit von der Musiklautstärke.
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 .
Bearbeiten: 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 überprüfen, ob das Mikrofon überhaupt funktioniert? Ist es richtungsweisend?
Bearbeiten: Ich verwende jetzt einen S9014-Transistor. Der ADC und die serielle Verbindung funktionieren (ich habe sie mit einem Potentiometer getestet).
Die serielle Ausgabe liegt jetzt bei etwa 57.
Außerdem habe ich kein Multimeter oder Oszilloskop. Ich habe jetzt ein Multimeter.
Der "einfachste" Weg ist einfach das Signal anzulegen und mit dem ADC abzutasten. Speichern Sie die Ergebnisse in einem Puffer und zeigen Sie sie dann wie gewünscht an (in Ihrem Fall über RS232 an den PC senden).
Wenn Sie den RMS-Pegel des Signals wünschen, müssen Sie diesen irgendwann berechnen, entweder vor dem Senden an den PC oder danach.
Ihre Verstärkerschaltung wie gezeigt ist nicht ideal, sollte aber für ein einfaches VU-Meter vernünftig funktionieren. BEARBEITEN - Ich habe gerade C2 bemerkt. Entfernen Sie dies, da es die Gleichstromvorspannung des Transistors blockiert und das Signal unter der Erde schwingt.
EDIT - hier ist eine bessere Schaltung für den Verstärkertransistor:
Dies sollte sich nicht zu sehr um den verwendeten Transistor kümmern, die Ausgangsvorspannung sollte etwa 2,5 V betragen.
Die genauen Werte für den Eingangsteiler (R3 und R4) sind nicht so wichtig, eher das Verhältnis von 1:4. Sie können also zB 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 sein.
Alles, was Sie brauchen, ist das Elektret mit seinem Vorspannungswiderstand (R1 in Ihrem Schaltplan)
Ein Punkt, der Anlass zur Sorge gibt, ist, dass die 3,3-V- und 5-V-Leitungen von Arduino miteinander verbunden zu sein scheinen - 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) zu lokalisieren, wäre es hilfreich, Ihren Code und das, was Sie auf der PC-Seite sehen, zu sehen. Und welchen Transistor verwendest du?
Wenn Sie ein Oszilloskop haben, können Sie überprüfen, ob Ihr Mikrofon/Transistor richtig funktioniert. Wenn nicht, kann ein Multimeter verwendet werden, um einige grundlegendere Tests durchzuführen (z. B. bestätigen, dass +5 V vorhanden sind, bestätigen, dass die Basis des Transistors bei ~ 0,6 V liegt, den Kollektor testen, 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 die RS232 ordnungsgemäß funktioniert, daher wäre es eine gute Idee, einen einfachen Code zu schreiben, um einige Testwerte zu senden.
Wenn Sie die angeforderten Informationen bereitstellen und uns mitteilen können, welche Tools Ihnen zur Verfügung stehen, kann spezifischere Hilfe geleistet werden.
BEARBEITEN - Wenn Sie so langsam abtasten, benötigen Sie eine Spitzenerkennungsschaltung wie diese:
Sie würden diese Schaltung zwischen dem Transistor und dem Arduino-Pin (minus C2) platzieren.
Die Diode kann so ziemlich jede Diode sein. Die Kappen- und Widerstandswerte sind nur eine Richtlinie, sie 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 beträgt die RC-Konstante 1e-6 * 10e3 = 10 ms. Die Spannung benötigt etwa 2,3 Zeitkonstanten, um auf 90 % ihres ursprünglichen Werts abzufallen Wenn im obigen Beispiel die Spannung bei 1 V beginnt und Sie das Signal entfernen, ist es etwa 23 ms später auf 0,1 V gefallen.
EDIT - okay, ich glaube, ich habe ein großes Problem gefunden. Ihr S9012- Transistor ist ein PNP-Transistor (wie auch der S9015), Sie benötigen für diese Schaltung einen NPN-Transistor. Der S9014 ist ein NPN-Transistor, also 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 2 Zahlen, gefolgt von einer Anzahl von Nullen, die durch die letzte Zahl festgelegt werden. Für 104 ist der Wert also 10 + 4 Nullen oder 100.000 pF. 100.000 pF sind 100 nF oder 0,1 uF.
BEARBEITEN - Kein Oszilloskop oder Multimeter zu haben, macht das Leben hier sehr schwierig (Sie sollten sich so schnell wie mö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 recht gutes Beispiel:
Wenn Sie C2 ersetzen (nicht unbedingt erforderlich, aber eine gute Idee), sollten Sie das Signal direkt in den PC einspeisen und in der Software beobachten können, ob das Mikrofon und die Verstärkung korrekt funktionieren. Wenn Ihr PC Line-In hat, verwenden Sie das, aber der Mikrofoneingang ist normalerweise gut für bis zu 2 V IIRC. Sie können das 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.
Beachten Sie, dass diese Methode nicht die DC-Pegel testet, sondern nur den AC (aufgrund einer DC-Sperrkappe im Soundkarteneingang), aber das AC-Signal (Audio) ist das, was Sie hier interessiert.
Wenn Sie dies versuchen, posten Sie die Screenshots, damit wir uns ein Bild davon machen können, was passiert.
EDIT
und 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 von Ihnen gepostete Schaltung so verwenden kann, wie sie ist.Angenommen, Ihre Schaltung funktioniert, liegt das Audiosignal im kHz-Bereich, während der Arduino über einen ADC verfügt, der für DC-Pegel geeignet ist. Die DC-Komponente Ihres Signals ist Null, was bedeutet, dass sie über einer festen Spannung schwebt. Es ist diese feste Spannung, die Ihr ADC liest.
Um dies zu beheben, würden Sie eine Diode in Reihe mit Ihrem Ausgang schalten, der mit dem ADC und einem Kondensator und Widerstand verbunden ist.
Die Kappe lädt sich auf den empfangenen Spitzenwert auf, während der Widerstand die Kappe entlädt, wenn das Signal abklingt.
--|>|---*---- adc
*---- resistor -----*----ground
\----- capacitor ---/
Bearbeiten: Der ADC-Eingang schwebt tatsächlich, da er aufgrund des Serienkondensators keinerlei Vorspannung hat. Wenn Sie meine Lösung ausprobieren möchten, löschen Sie C2.
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 im Grunde auf dem ADC des Arduino im vollen Maßstab. Angenommen, Sie haben einen nicht fehlerhaften Serienkondensator wie in Ihrem Diagramm gezeigt installiert, kann dieser Pegel nicht von der von Ihnen gebauten Mikrofonschaltung stammen, da diese nur wechselnde Spannungen (dh Wechselstrom) koppeln kann.
Infolgedessen vermute ich, dass Sie Leckströme im ATMEGA selbst lesen - Sie würden wahrscheinlich das gleiche Ergebnis an jedem 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önnten 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 vorgespannt haben, können Sie mit der Arbeit beginnen und versuchen zu sehen, ob Sie dadurch Variationen erhalten. Möglicherweise unterabtasten Sie Ihre Bandbreite etwas, was bedeutet, dass Sie Aliasing von Hochfrequenzkomponenten erhalten, aber wenn Sie nur versuchen, die Gesamtlautstärke zu schätzen, sollte dies kein allzu großes Problem darstellen.
HikeOnPast
Connor Wolf
Toast