Inhaltsverzeichnis:

Bluetooth-fähiges analoges VU-Meter - Gunook
Bluetooth-fähiges analoges VU-Meter - Gunook

Video: Bluetooth-fähiges analoges VU-Meter - Gunook

Video: Bluetooth-fähiges analoges VU-Meter - Gunook
Video: What's wrong with the GPO Brooklyn Boombox? 2024, Dezember
Anonim
Bluetooth-fähiges analoges VU-Meter
Bluetooth-fähiges analoges VU-Meter

Dies war mein Projekt für eine meiner Universitätsklassen namens SMP. Da wir das Entwicklungsboard STM32F103RB verwendet haben, habe ich mein Projekt darauf aufgebaut, ausgehend von einem einfachen VU-Meter. Dann habe ich einige zusätzliche Funktionen wie Bluetooth-Unterstützung hinzugefügt, um Werte vom ADC an eine Android-App zu übertragen, um ein einfaches dB-Diagramm zu erstellen.

Schritt 1: Verwendete Komponenten

  • STM32F103RB Entwicklungsboard
  • HC-05 zs040 Bluetooth-Modul
  • Analoges VU-Meter-Panel (Link)
  • Elektret-Mikrofon
  • LM324N Quad-Operationsverstärker
  • 2 TIP120-Transistoren
  • 3 1N4148 Dioden
  • Verschiedene Kondensatoren und Widerstände

Obwohl Sie diese Schaltung von der 5V-Schiene der Platine aus betreiben können, habe ich auch ein externes 5V-Netzteil verwendet.

Schritt 2: Umschlag-Follower

Umschlag-Follower
Umschlag-Follower
Umschlag-Follower
Umschlag-Follower

Das Kernstück dieses Designs ist der Envelope Follower, der das Signal vom Elektretmikrofon aufnimmt und eine Spannung proportional zur Signalamplitude des Mikrofons ausgibt.

Das Rohsignal des Mikrofons wird zunächst durch einen Verstärker mit einer Verstärkung von 150 geleitet.

Das Signal wird dann durch den eigentlichen Envelope Follower geleitet, der nur die positiven Signalanteile ausgeben soll.

Der letzte Teil subtrahiert die Offsetspannung von 1,65 V vom Ausgang des Envelope Followers, um ein Signal von 0 V für keinen Ton, 1,65 V für mittleren Ton und 3,3 V für lauten Ton bereitzustellen, der mit dem eingebauten kompatibel sein sollte ADC des Boards.

Dieser Envelope Follower wird aus dieser großartigen StackExchange-Antwort implementiert.

Schritt 3: PWM für das Analogmeter

Um die Nadel des Messgeräts zum Laufen zu bringen, habe ich den TIM4-Timer der Mikrocontroller-Platine mit einer Frequenz von etwa 500 Hz konfiguriert.

Durch sukzessives Ausprobieren verschiedener Tastverhältnisse habe ich mich mit einigen Werten begnügt, die ausreichten, um die Nadel von 0 auf 100 zu bringen.

Ich werde den Prozess der Anzeige eines genauen Werts im nächsten Schritt detailliert beschreiben, indem ich etwas Mathematik anwende.

Schritt 4: Mikrofonkalibrierung

Mikrofonkalibrierung
Mikrofonkalibrierung
Mikrofonkalibrierung
Mikrofonkalibrierung

Nachdem ich den Envelope Follower erstellt hatte, schrieb ich dann einen einfachen Code zur Verwendung des ADC und überprüfte, ob sich der gelesene Wert tatsächlich entsprechend der Lautstärke im Raum ändert.

Um diesen Wert in einen tatsächlichen dB-Wert zu "übersetzen", habe ich einen Online-Tongenerator mit einer Frequenz von 550 Hz und mein Android verwendet, um einen Referenzwert bereitzustellen.

Ich habe diese Werte aufgetragen und das Curve Fit Tool von MatLAB verwendet, um eine Funktion zu erhalten, die ADC-Messwerte auf tatsächliche Annäherungen der dB-Pegel abbildet (oder zumindest nahe genug an die Messwerte meines Telefons).

Wir können sehen, dass dies der logarithmischen Skala des Mikrofons folgt.

Das gleiche habe ich auch gemacht, um die Nadelposition auf PWM-Werte abzubilden. Ich habe diese Werte gesammelt, indem ich den PWM-Wert sukzessive um 10 erhöht habe, bis die Anzeige auf der Skala angezeigt wurde.

Durch die Kombination dieser beiden Funktionen habe ich eine einfache Möglichkeit, den Messwert vom ADC zu einem tatsächlichen Wert auf der Messgerätanzeige anzuzeigen.

Schritt 5: Android-App

Die App verwendet diese coole Bibliothek, um über Bluetooth zu kommunizieren, um Byte-Informationen auszutauschen.

Die Haupteinschränkung dieses Systems besteht darin, dass die maximale Wortlänge, die über Bluetooth gesendet wird, 8 Bit beträgt und der ADC-Wert als 12 Bit dargestellt wird. Um dieses Problem zu lösen, habe ich einen ADC-Wert in 2 separate 6-Bit-Werte (MSB und LSB) aufgeteilt, wobei die restlichen 2 Bits verwendet werden, um den Nachrichtentyp (MSB, LSB, CHK) zu identifizieren.

Daher teilen wir für einen einzelnen ADC-Wert, den wir übertragen möchten, den tatsächlichen Wert in 2 Nachrichten auf. Um die Integrität dieser Nachrichten zu überprüfen, habe ich eine dritte Nachricht mit dem XOR der ersten beiden Nachrichten gesendet.

Nachdem die Wertintegrität überprüft wurde, können wir die gleiche Funktion anwenden, um den dB-Pegel zu erhalten und ihn in unser Live-Diagramm einzuzeichnen.

Schritt 6: Zusammenfassung

Während der Mikrocontroller-Teil dieses Projekts ziemlich gut funktioniert, um die Lautstärke in einem Raum anzuzeigen, sind beim Senden von Daten über Bluetooth aufgrund von Paketverlusten einige Probleme aufgetreten.

Den Quellcode für dieses Projekt finden Sie hier:

  • Android-Begleit-App - Repo
  • Mikrocontroller-Code - Repo

Fühlen Sie sich frei, einen Beitrag zu leisten, wenn Sie dies in irgendeiner Weise nützlich finden.

Empfohlen: