Arduino: Intelligenter Antennen Selektor

Nachfolgend beschreibe ich einen überarbeiteten Antennen Selektor der mittels CAT Verbindung mit Funkgeräten verbunden werden kann, die mit dem Protokoll von Icom ci-v kompatibel sind.

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 somit 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 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 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 abgebrochen ist oder längere Zeit keine Frequenzänderung vorgenommen wurde.
  • Jeder Antenne kann man im Sketch einen "sprechenden" Namen geben.
  • Als CAT Schnittstelle zum Funkgerät kann wahlweise Soft-Serial (für den UNO), oder eine HW-Serial (für den MEGA) verwendet werden. Dazu reicht die Änderung eines precompiler #define.
  • 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 im Sketch geändert werden. Die "Default" Antenne muss nicht zwangsweise am ersten Ausgang hängen. Sobald das Funkgerät die erste CAT Meldung sendet wird entsprechend dem Band die vorgewählte Antenne aktiviert.
  • Die Anzahl der Ausgänge ist eigentlich nur durch die verfügbaren Pins 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 dem Mehr an 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) 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. Quasi "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 dort nur marginal.
  • 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 leichter fallen.
  • Und last but not least: Der Sketch kompiliert mit einer aktuelleren Arduino IDE (Anfang 2021 ist das z. B. die 1.8.13).

Hardware

Die Schaltung wurde in ein altes 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 8 fach 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. Also 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.

Für die CAT Schnittstelle ci-v wurden zwei Stereo-Klinkenbuchsen verbaut. Das externe PTT Signal wird auf Cinch einer Buchse eingelesen und auch auf einer zweiten wieder weitergegeben. Damit kann der Intelligente Antennen Schalter einfach in ein bestehendes Setup eingebunden werden.

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

CAT: activate ci-v on ICOM tranceiver

Hinweise zum ICOM CI-V

Die CAT Schnittstelle unterscheidet sich je nach Hersteller. Bei ICOM ist das ci-v ein Protokoll ähnlich der seriellen Schnittstelle, jedoch nicht mit RS232 Pegel sondern mit TTL. Die Baudrate kann meist am Funkgerät eingestellt werden. Ich verwende (wegen Soft-Serial) 9600. Die Beschreibung des Protokolls findet man im Internet. Das vorliegende ICOM 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.

Ü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 eigentlich der 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 gäbe 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 wäre für eine weitere Version sicher eine Überlegung wert.

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, wir 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. 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 schließlich 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.

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 Maker interesssant sind.

History

First upload: 2021-02-20 | Version: 2021-02-26