Arduino: Intelligenter Antennen Selektor

Nachfolgend beschreibe ich einen überarbeiteten Antennen Selektor der mittels CAT Verbindung mit Funkgeräten verbunden werden kann. Zwischenzeitlich stehen verschiedene Anbindungsmöglichkeiten für Geräte von ICOM und YAESU zur Verfügung.

Der intelligente Antennen Selektor sorgt dafür, dass abhängig von der gewählten Frequenz am Funkgerät die passende Antenne verbunden wird. Das manuelle Umschalten entfällt und wird automatisch durch den Micro-Controller erledigt.

Bedienung und Programmlogik

Die Bedienung bzw. die Programmlogik des Antennenumschalters funktioniert wie folgt:

  • Mit den Tasten Up/Down kann jeweils eine Antenne (ein Relais) aktiviert werden.
  • Geht das Funkgerät auf Senden (PTT wird low) - ist das Umschalten der Antenne aus Sicherheitsgründen gesperrt.
  • Zusätzlich wird pro Frequenz Band (!) die gewählte Antenne im EEPROM separat gespeichert. Dies erfolgt automatisch nach einer Verzögerung von einigen Sekunden.
  • Die aktuelle Frequenz (QRG) wird aus der CAT Verbindung mittels Icom CI-V (oder ähnlichen Schnittstellen) ausgelesen. Der Arduino ist rein lesend am Bus. Er sendet KEINE Telegramme in den Bus. Ändert sich die aktuelle Frequenz QRG, wird diese am LCD angezeigt. Zusätzlich wird ermittet ob sich dadurch auch das Frequenzband geändert hat.
  • Bei einer Bandänderung (durch Änderungen der QRG) wird auf die definierte Antenne umgechaltet.
  • Wird eine Frequenz außerhalb eines definierten Bandes angewählt, so wird die Antenne nicht geändert. Die Antenne kann jedoch weiterhin mit den Tasten Links/Rechts geändert werden.

Beispiel: LCD Anzeige: Das Funkgerät wird auf eine Frequenz von 21.1151 gestellt, der Intelligente Antennen Selektor schaltet automatisch auf die Antenne A um:

ci-v information on LCD display - intelligent antenna selector

Mit den Links / Rechts Tasten kann eine andere Antenne aktiviert werden:

CAT: ci-v Frequenz am LCD display für den intelligenten Antennen Selektor

Nach einer kurzen Verzögerung wird die Antenne B zum Band 15 gespeichert.

Goodies

  • Bei CAT Aktivität (neue QRG Meldungen im CI-V Format) wird dies am LCD kurz angezeigt (so wie im Sketch von ON7EQ)
  • Werden Werte im EEPROM gespeichert wird dies kurz am LCD angezeigt (ählich wie im Code von ON7EQ)

Änderungen

In meinem Sketch sind folgende Änderungen gegenüber dem Sketch von ON7EQ enthalten:

  • Wird längere Zeit keine QRG empfangen erscheint ein "Offline Indikator" links in der oberen Zeile. Damit sieht man, dass die Verbindung zum Funkgerät unterbrochen ist oder längere Zeit keine Frequenzänderung vorgenommen wurde.
  • Frequenzen bis 9,9 GHz können ausgewertet werden. Dieser Antennenumschalter ist auch für das 2m und 70cm Band verwendbar.
  • Jeder Antenne kann man im Sketch einen individuellen "sprechenden" Namen geben.
  • Für die CAT CI-V Schnittstelle zum Funkgerät kann wahlweise Soft-Serial (für den UNO), oder eine HW-Serial (für den MEGA, oder Nano Every) verwendet werden. Dazu reicht die Änderung eines Precompiler #define in der Konfiguartion.
  • Da der OM für den ich das programmiert habe, keine abweichenden RX - TX Antennen wollte, ist dies aktuell im Sketch nicht unterstützt. Wenn du dir den Code genauer ansiest, wirst du einige Vorbereitungen dafür sehen. Wenn das wirklich ein Feature ist, ohne dem andere nicht auskommen, dann könnte dies auf Anfrage realisiert werden.
  • Ab dem Einschalten ist eine Antenne (ein Relais) aktiv. Wenn das nicht gewünscht ist, kann dies relativ einfach in der Konfiguration geändert werden. Die "Default" Antenne muss nicht zwangsweise am ersten Ausgang hängen. Sobald das Funkgerät die erste CAT ci-v Meldung sendet wird entsprechend dem Band die vorgewählte Antenne aktiviert. Beim ersten Eintreffen einer CAT ci-v Meldung wird die entsprechende Antenne ausgewählt.
  • Die Anzahl der Ausgänge ist nur durch die verfügbaren Pins am Microcontroller beschränkt. Ein Arduino UNO hat 13 "Digital" pins und 5 "Analog" Pins. Der Sketch verwendet bis zu 3 Usertasten, einen PTT Eingang, zwei GPIOs für das I2C Display, die zwei 2 HW-Serial/USB belege ich nie und für die Kommunikation zum Funkgerät sperre ich auch 2 Pins (auch wenn wie angeführt TX nicht verwendet wird). 23 - 10 = 13 freie Pins. Ein Variante mit 8 Pins habe ich selber gebaut.
  • Wegen den zusätzlichen Ausgängen musste der Aufbau der zweiten Zeile angepasst werden. Es wird nur mehr die aktuelle Antenne angezeigt. Wie oben angemerkt, im Code kann auch eine Klartextbezeichnung (8 Zeichen) für jede Antenne angegeben werden.
  • Wer weiterhin die "alte Antennenanzeige" von ON7EQ mit 5 Antennen haben möchte, braucht eigentlich nur die Funktion displayShowAntenna() anpassen und die zwei Custom Characters wieder anlegen. Eine alternative Funktion ist im Sketch enthalten und kann als Ausgangsbasis verwendet werden.
  • Der Sketch aktiviert die internen Pullups für die Eingabe-Taster. Externe Pullup Widerstände werden daher nicht benötigt (sollten aber auch nicht stören).
  • Meine verwendete LCD Library bietet mehrere Schnittstellen an. "Standard" ist zwar I2C, aber man kann mit der gleichen Library das LCD auch parallel verbinden oder ein RGB LCD anschließen. Die LCD Library findet man auch auf meiner Homepage. Deutschprachige Leser mögen auf alle Fälle mal einen Blick auf diese Version werfen (Stichwort deutsche Umlaute öäü im Fließtext ...).
  • Die Variablenbezeichnungen haben sich großteils geändert, lauten aber ähnlich wie bei ON7EQ, ein Umstieg soll daher leicht von der Hand gehen.
  • Der Auswertungsteil wurde von "Pete & SAM " übernommen. Das ist so aufgebaut wie gut in den "Serial Basics 2" im Arduino.cc Forum beschrieben. Ehrlich, das hätte ich auch nicht anders gemacht. Die Änderungen sind marginal, ermöglicht jetzt aber auch die Auswertung von 2m/70cm Frequenzen.
  • In der restliche Programmlogik gibt es keine GOTO mehr. Ich verwende teilweise OOP und überwiegend Funktionen. Damit werden Redundanzen im Code (Code Duplikate) vermieden. Auch sollte dadurch der Umbau auf ein 20x04 LCD leicht fallen.
  • Alle User Konfigurationen sollen in der separaten Config-Datei gemacht werden. Nimm das File configA.h als Muster und adaptiere es nach deinen Bedürfnissen.
  • Und last but not least: Der Sketch kompiliert mit einer aktuellen Arduino IDE (Anfang 2023 ist das z. B. die 1.8.19 oder 2.1.1).

Varianten

Die CAT Schnittstelle unterscheidet sich je nach Hersteller. Der Sketch kann für folgende Schnittstellen konfiguriert werden:

ICOM CAT CI-V

Bei ICOM ist die CI-V Schnittstelle ein Serial-UART, jedoch nicht mit RS232 sondern mit TTL-Pegel. Die Baudrate kann meist am Funkgerät eingestellt werden. Ich verwende (wegen Soft-Serial) 9600 Baud. Die Beschreibung des Protokolls findet man im Internet. Das vorliegende ICOM IC-7300 sendet die Frequenz nur bei Änderungen. Möchte man auf einem PC mitlesen soll auf HEX umgestellt werden. Die CAT Telegramme bei CI-V beginnen mit 0xFE 0xFE und enden mit 0xFD. Mein Sketch wertet nur Frequenzinformation aus.

Für die CI-V Schnittstelle wurden zwei Stereo-Klinkenbuchsen verbaut. Das externe PTT Signal wird auf einer Cinch Buchse eingelesen und auf eine weitere gebrückt. Damit kann der Intelligente Antennen Schalter einfach in ein bestehendes Setup eingebunden werden.

Obwohl umfangreich mit dem PC getestet, hat sich dann auch die Inbetriebnahme am ICOM IC-7300 in die Länge gezogen. Die Verbindungseinstellungen am IC-7300 konnten mit einer Direkt-Verbindnung Verbindung Funkgerät -> TTL-USB Wandler -> Laptop geklärt werden und anschließend hat auch der Intelligente Antennen Selektor wie geplant funktioniert.

Am Tranceiver (hier ein ICOM IC-7300) muss die CI-V Schnittstelle auf 9600 Baud aktiviert werden

CAT: activate ci-v on ICOM tranceiver

ICOM ACC Buchse Pin 5 Bandinformation

Auf der ICOM ACC Buchse steht die Bandinformation als Spannung 0 - 8V DC zur Verfügung. Mit Hilfe eines einfachen Spannungsteilers kann diese Spannung mit einem Analogeingang des Arduino gemessen werden und in Software in eine Bandinformation übersetzt werden. Beim auslesen der ACC Buchse können nicht alle Bänder unterschieden werden (siehe dazu auch die ACC Beschreibung auf der englischen Seite).

YAESU Linear Buchse

Am YAESU FTDX101MP steht eine D-Sub15 Buchse zur Verfügung die auf 4 Pins einen Binärcode zur Verfügung stellt. Der Binärcode kann direkt in eine Bandinformationen übersetzt werden. Eine genaue Beschreibung findest du auf YAESU Linear Jack.

YAESU RS232

Diese Implementierung konnte ich noch nicht mit echter Hardware testen. Es handelt sich daher nur um einen Prototypen.

Für mehr Informationen zu den unterstützen Schnittstellen lohnt sich der Blick auf die englischen Seiten.

Hardware

Die Schaltung wurde in ein altes SAT Tuner Gehäuse verbaut da die Schirmung eines Metallgehäuses gewünscht war und eine transparente Front für das Display vorhanden war:

Intelligenter Antennen Schalter für CAT/ci-v Protokoll

Der Innenaufbau gibt nicht viel her. Ich verwende das originale Tuner Netzteil, zwei Step-Down Wandler für 5.5V und 12V (als Steuerspannung für die Relais-Ausgänge), ein I2C LCD, einige der originalen Tasten und eine 8fach Relaiskarte.

Intelligenter Antennen Schalter mit Arduino Uno und 8 fach Relais Karte

Zum Ansteuern der Antenennmatrix schicken die Relais die 12V Steuerspannung an den Antennenumschalter. Das Klicken der Relais gibt auch eine akkustische Rückmeldung, dass bei einem Bandwechsel die Antennen umgeschaltet wurde. Als Microcontroller verwende ich einen Arduino Nano Clone (mit UNO Bootloader). Es wurde kein einziges Dupont-Kabel verwendet, alle Leitungen wurden verlötet/mit Schrumpfschlauch versehen.

ESP32 als Alternative zum Arduino UNO/NANO/MEGA

Seit 2022-11 unterstützt der Code auch den ESP32. Für einen ESP32 sprechen mehrere Gründe:

  • Der ESP32 arbeitet mit 3.3V und auch das ICOM IC-7300 gibt einen TTL Pegel vom 3.3V aus.
  • Der ESP32 hat 3 vollwertige HW Serielle Schnittstellen (der ESP8266 hätte nur einen weiteren TX auf Serial1).
  • Es gibt ein perfektes Relaisboard: Ein ESP32, ein Spannungsregler und 8 Relais. Man ergänzt einfach drei Taster, ein I2C LCD und stellt die Verbindung zum Funkgerät her. Hier gibt es weitere Informationen zum ESP32 Relay X8 Board.

Wegen dem ESP32 gibt es nun einige Precompiler defines im Code. Hauptsächlich für die EEPROM Emulation. Mir ist klar dass die EEPROM Emulation abgekündigt ist, aber derzeit (2022-11) wird diese noch unterstützt.

Als Beispiel für den Aufbau eines Antennenschalters mit dem ESP32 dient das Konfigurationsfile configE32.h.

Überlegungen für eine weitere Version bzw. dem Nachbau

Obwohl überwiegend auf Fertigmodule zurückgegriffen wurde und auch Aufwand in die Softwareänderungen eingeflossen ist, hat der eigentliche Zusammenbau der Hardware am Längsten gedauert. Einer der Zeiträuber war die Verkabelung weil auf Dupont-Kabel verzichtet wurde.

Optimal wäre eine Relaisplatine wo man den Arduino direkt aufstecken könnte. Außer dem bekannten 4fach Relays Shield habe ich aber nicht wirklich etwas für den UNO/Nano gefunden.

relais board for Arduino Pro MiniFür den Arduino Pro Mini gibt es eine passende 8fach Platine. Der Arduino Pro Mini hat wie der Arduino UNO oder NANO einen ATmega328p, man benötigt aber zum Programmieren einen separaten USB-TTL Wandler. Die Relais und die LED Anzeigen werden bei dieser Karte mit 3 Shift-Register angesprochen, deswegen ist der gleichzeitige Betrieb von 8 Eingängen, 8 Relais und der 4x 7 Segment Anzeige möglich. Lt. Schaltplan sind die SDA/SCL nicht belegt weswegen man ein I2C Display weiterhin anschließen könnte. Dieses Modul ist für eine weitere Version sicher eine Überlegung wert. Auf meiner Homepage gibt es auch eine genauere Beschreibung zur 8 Kanal Relaiskarte IO22D08.

Mit dem Gehäuse bin ich optisch auch nicht zufrieden, aber für einen Selbstbau reicht mein handwerkliches Geschick nicht aus. Greift man etwas tiefer in die Tasche, wird man im DIY HIFI Bau fündig.

Verfügbar sind verschiedene Varianten. Am Besten würde das Modell mit den Tasten unter dem Display passen:

diy metal case with LCD cut out

 

Wenn wer Wert auf ein möglichst kleines Gehäuse legt, dann bietet sich die Version mit einem Drehregler neben dem Display an. Der Umbau auf einen Inkrementalgeber sollte eigentlich ziemlich einfach einfach möglich sein:

Metallgehäuse mit LCD Ausschnitt

Wenn jemand einen Preistipp für ein Metallgehäuse mit LCD Ausschnitt hat freue ich mich über eine email.

Alternativen zur Software (mit Rückblick auf ältere Versionen) - Credits

Abschließend noch die Information auf den Urheber der Software: Bereits 2011 hat ON7EQ einen "ARDUINO intelligent antenna matrix switch" vorgestellt. Der Code ist auch auf seiner Homepage verfügbar kompiliert aber nicht mehr mit einer aktuellen Arduino Version. Auf seiner Seite gibt es noch einen stark überarbeiten Sketch mit dem Verweis auf "Pete & Sam" ZS6SAM. Auch dieser Sketch benötigt Anpassungen damit er sich mit einer aktuellen IDE kompilieren lässt. Der Code von Sam wurde vermutlich für den Arduino MEGA erstellt. Während den ersten Versuchen habe ich dann den Entschluss gefasst, die meisten Teile neu zu schreiben. Auf der Homepage von DM2RM gibt es eine Variante des ursprünglichen Codes mit dem Umbau auf ein I2C Display. Aber auch dieser compiliert nicht mit einer aktuellen IDE. Interessant auf seiner Seite ist der sauber gezeichnete Schaltplan.

Resümee

Von der Programmierung abgesehen (die Aktualisierung hat eigentlich mehr Aufwand verursacht als ein "fertiger Sketch" vermuten lassen wurde) ist die meiste Zeit eigentlich in den Hardware Aufbau eingeflossen.

Links

Die mit Sternchen (*) gekennzeichneten Verweise sind sogenannte Affiliate/Provision-Links. Wenn du auf so einen Verweis klickst und über diesen Link einkaufst, bekomme ich von deinem Einkauf eine (kleine) Provision. Für dich verändert sich der Preis dadurch nicht. Ich empfehle nur Produkte die ich selber besitze und wenn ich überzeugt bin, dass sie für andere interesssant sind.

History

First upload: 2021-02-20 | Version: 2023-12-19