Benutzer-Werkzeuge

Webseiten-Werkzeuge


arduino:spektrumanalysator

Spektrumanalysator mit NeoPixeln

Einen Spektrumanalysator zur Musik zu beobachten, die einem gefällt, ist eine Freude. Erst recht, wenn man ihn selbst gebaut und programmiert hat. Ich habe meinen Spektrumanalysator mit einem Teensy 3.6 und dem Audio Adaptor Board gebaut. Das Ergebnis der Fast-Fourier-Analyse wird auf zwei NeoPixel-Streifen dargestellt.

Funktionen:

  • Analoger Signaleingang
  • Berechnet eine Fast-Fourier-Analyse für den rechten und linken Audiokanal
  • Stellt das Spektrum eines Stereoaudiosignals auf zwei NeoPixel-Streifen dar (ein Streifen pro Kanal)
  • Die Eingangsempfindlichkeit wird automatisch eingestellt
  • Die Anzahl der Bänder kann eingestellt werden
  • Es kann eingestellt werden, auf welcher Seite der rechte und linke Kanal angezeigt wird (für Überkopfmontage)
  • Es kann eingestellt werden, ob das tiefste Band für den linken Kanal links oder rechts auf dem NeoPixel-Streifen dargestellt wird

Elektrischer Aufbau

Das Audioadapter-Board hat leider, leider keinen digitalen Audioeingang. Daher muss das vom Computer kommende digitale Audiosignal zunächst mit dem Digitus Audio Konverter DS-40133 in ein analoges Signal umgewandelt werden. Damit sowohl meine aktiven Nubert A-100 als auch der D/A-Wandler gleichzeitig an einem optischen Audioausgang des Computers angeschlossen werden können, wird das Signal mit einem SpeaKa Professional 2 Port Toslink-Splitter aufgeteilt. Diese Lösung ist zwar einigermaßen aufwändig, verspricht jedoch einen unkomplizierten Alltagsbetrieb. In den Spektrumanalysator habe ich aus Platzgründen eine 3,5-Millimeter Kinkenbuchse verbaut.

Der Teensy mit dem Audioadapter-Board steckt auf einer Lochrasterplatine mit allen notwendigen Anschlüssen und dem Bus Transceiver 74HCT245. Letzterer wird benötigt, um das 3,3-Volt-Signal des Teensys auf 5 Volt zu heben. Der Elko soll Spannungsspitzen verhindern, die beim Einschalten entstehen und die NeoPixel zerstören können.1)

Für die Stromversorgung wird ein Pololu Step-Up-Step-Down-Regler mit einer Eingangsspannung zwischen 2,9 und 30 Volt und einer Ausgangsspannung von 5 Volt verwendet. Ein Spannungsregler ist nicht unbedingt notwendig, ich baue jedoch in alle Elektronikprojekte einen Spannungsregler ein, um die empfindliche Elektronik vor Überspannung und Verpolung abzusichern. Die Wahl fiel auf diesen Spannungsregler, weil ich dadurch sehr flexibel bin. Insbesondere kann ich den Spektrumanalysator auch über einen USB-Port mit Strom versorgen. Der Anschluss des Spektrumanalysators an einen USB-Port und der maximale Ausgangsstrom dieses Spannungsreglers von 2 Ampere ist nur auf den ersten Blick problematisch: Zwar können die 84 NeoPixel maximal 5 Ampere ziehen, was sowohl einen USB-Port als auch den Spannungsregler überlasten würde, da ich im Code die maximale Helligkeit der NeoPixel auf 25 Prozent reduziert habe, liegt der tatsächliche Maximalstrom aber weit unter dem theoretischen. Im Testaufbau habe ich die beiden NeoPixel-Streifen über den USB-Anschluss des Teensy betrieben und nie mehr als 70 Milliampere gemessen. Daher stellt die Spannungsversorgung über einen USB-Port und die Verwendung des ausgewählten Spannungsreglers kein Problem dar. Der Vorteil liegt darin, dass ich den Spektrumamalysator, den Splitter für das optische Audiosignal und den D/A-Wandler über einen passiven USB-Hub an einem geschalteten USB-Port des Computers betreiben kann, so dass die gesamte Elektronik mit dem Computer ein- und ausgeschaltet werden kann.

Gehäuse

Damit das Gehäuse möglichst kompakt ist, enthält es nur die notwendigsten Komponenten, also den Teensy mit der Audioerweiterungsplatine, einen Spannungsregler, einen Drehencoder, eine Klinkenbuchse für das analoge Audiosignal und eine Niedervoltbuchse (5,5 mm x 2,1 mm) für die Stromversorgung. Der Toslink-Splitter und der D/A-Wandler wurden zum einen nicht in das Gehäuse integriert, weil das Gehäuse dann sehr groß geworden wäre, und zum anderen, weil ein analoger Audioeingang flexibler ist.

Die beiden NeoPixel-Streifen habe ich in ein Aluminiumprofil für LED-Beleuchtungen geklebt,2) das ich bei LEDs.de gekauft habe. Die diffuse Kunststoffabdeckung verteilt das Licht sehr schön, und mir gefällt es auch besser, die NeoPixel-Streifen zu verstecken. Das gedruckte Gehäuse wird auf das Profil geschoben und sitzt ohne Schrauben oder Kleber sehr fest. Die Kabel werden durch sechs Löcher durch das Aluprofil direkt in das Gehäuse geführt.

Auf das Aluminiumprofil können nach Bedarf passende Halterungen geschoben werden. Konstruiert habe ich zwei Ständerchen, damit der Spektrumanalysator hinter der Tastatur platziert werden kann.

Alle Kunststoffteile wurden mit 123D Design konstruiert und mit meinen 3D-Drucker gedruckt.

Bedienungsanleitung

Der Spektrumanalysator kann über einen Drehencoder konfiguriert werden. Da der Spektrumanalysator über kein Display verfügt, wird die Menüstruktur auf den NeoPixel-Streifen dargestellt.

Das Menüsystem wird durch einfaches Drücken des Drehencoders aufgerufen. Die Menüauswahl hat sechs Untermenüs, die durch einen spezifischen Farbcode auf dem NeoPixel-Streifen für den rechten Kanal dargestellt werden. Der linke Kanal zeigt immer die Spektrumanalyse mit den aktuellen Einstellungen an, damit die vorgenommenen Einstellung unmittelbar überprüft werden können. In der Menüauswahl Durch drehen des Drehencoders wird zwischen den Untermenüs gewechselt. Durch einfaches Drücken des Tasters wird das aktuelle Untermenü ausgewählt. Mit dem Drehencoder kann die gewünschte Einstellung vorgenommen werden. Durch längeres Drücken wird zurück in die Untermenüauswahl gewechslet. Durch nochmaliges längeres Drücken wird das Menü verlassen und die vorgenommenen Einstellungen in das EEPROM geschrieben.

  • Rot: Anzeigemodi
  • Cyan: Ausrichtung der Bänder des linken Kanals (tiefe Frequenzen links bzw. rechts)
  • Grün:
  • Magenta:
  • Blau:
  • Weiß: Anpassen der automatischen Eingangspegelregelung.

Erste Menüebene: Anzeigemodi

Zweite Menüebene: Kanaleinstellungen

Gehäuse

NeoPixel-Matrix

Beispiel von GreatScott

Bibliotheken

Elektronik

OLED-Display

Auf einem OLED-Display soll eine Menüstruktur abgebildet werden. Wie bei meinem Flaschenkühler wird ein Display von Adafruit verwendet. Das Display funktioniert mit der Library von Adafruit, die aber sehr langsam ist und die Verwendung des Displays stark einschränkt. Eine vielversprechende Alternative ist die optimierte Bibliothek von kirberich, die aber nur funktioniert, wenn der Teensy mit 72 MHz läuft (https://forum.pjrc.com/threads/40462-Teensy3-5-and-SSD1351-128x128-OLEDsiehe dazu auch diese Diskussion). Es muss also eine andere Alternative her …

  • Die Bibliothek SSD13XX funktioniert auch nicht. Bei 96 MHz wird etwas angezeigt, was Testgrafiken sein könnten, aber alles wird falsch angezeigt.

Links:

Das OLED-Display wird an den folgenden Pins angeschlossen:

Teensy 3.6      Adafruit OLED Breakout Board
GND             GND (G)
3,3 V           VIN (+)
14 (SCK0)       SCLK (CL)
7 (MOSI0)       MOSI (SI)
20 (CS0)        DC
21 (CS0)        OLEDCS (OC) CS
8               RST (R)

Dreh-Encoder

Einstellungen können über zwei Dreh-Encoder mit zusätzlicher Tastfunktion vorgenommen werden.

Umschalten des Eingangssignals

Der Spektrumanalysator kann aus drei Signalquellen gespeist werden:

  1. digital (optisch/coaxial)
  2. analog (Cinch)
  3. analog (Klinke)

Mit dem Dreh-Encoder 1 kann zwischen den Signalquellen umgeschaltet werden. Das Schalten geschieht mit bistabilen Relais (Datenblatt). Die Spulen der Relais werden mit einem ULN2803A (Datenblatt) geschaltet. Das Signal des Teensy 3.6 wird mit einem 74HCT245 (Datenblatt) auf 5 Volt gebracht.

Interessante Links:

Programmversionen

Unten sind verschiedene Programmversionen verlinkt. Jede Programmversion bindet neue Funktionen ein und korrigiert Fehler in älteren Versionen.

1)
Der Elko ist hier nicht optimal platziert, besser wäre es, ihn näher an den NeoPixel-Streifen zu positionieren. Faktisch wäre das dann darauf hinausgelaufen, ihn direkt am Ausgang des Spannungsreglers anzulöten, dort ist allerdings kein Platz.
2)
Dafür habe ich beidseitig klebende Wärmeleitfolie verwendet. Eine Ableitung von Wärme ist aber im Grunde genommen nicht nicht notwendig, weil kaum welche entsteht.
arduino/spektrumanalysator.txt · Zuletzt geändert: 18.05.2023 12:15 von 127.0.0.1