5-Ton-Signalgeber mit Arduino Nano

Mit dem Arduino lassen sich sehr viele Dinge aufbauen. Die Aufgabenstellung bei diesem Projekt bestand darin, eine 5-Ton-Folge wiederzugeben, wie diese zum Rufen einzelner Funkteilnehmer oder Gruppen im analogen Funk verwendet wird. Häufig bezeichnet man solche Tonfolgen auch als Selektivruf. Beim Selektivruf beispielsweise bleibt ein Funkgerät solange stummgeschaltet, bis es eine Folge bestimmter Töne empfängt, erst dann wird der Lautsprecher des Gerätes freigeschaltet und der Empfänger hört den Funkruf. Im Empfänger muss dazu eine Schaltung vorhanden sein, welche den Lautsprecher beim Empfang einer bestimmten Tonfolge freigeschaltet. Eine andere Anwendungsmöglichkeit einer solchen Tonfolge besteht darin, über eine ganz bestimmte Tonfolge über funkgesteuerte Anlagen oder Einheiten ein- oder auszuschalten.

Schaltbild des 5-Ton-Signalgebers mit dem Arduino Nano
Schaltbild des 5-Ton-Signalgebers mit dem Arduino Nano

Die Tonerzeugung mit dem Arduino

 

Die Schaltung oben im Bild zeigt einen Arduino mit angeschlossenem Lautsprecher und vier Tasten, welche dazu dienen, einzelne Tonfolgen auszulösen. Wenn einer der Taster gedrückt wird, ertönt eine ganz bestimmte Tonfolge. Die Widerstände an den Tasten sind so genannte Pull-down-Widerstände. Sie dienen dazu, die Eingänge des Mikrocontrollers quasi auf Masse zu ziehen, wenn die Tasten nicht gedrückt werden. Sie werden benötigt, um die Eingangspegel des Arduino auf einem sicheren Massepegel zu halten, damit dieser nicht willkürlich die Tonfolgen abspielt. Damit die Schaltung auch funktionieren kann, muss im Arduino ein bestimmtes Programm abgespeichert werden. Dieses Programm besteht aus mehreren Komponenten. Da wäre zum Beispiel die Tastaturabfrage, bei welcher der Mikrocontroller überprüft, ob eine der vier Tasten gedrückt wird. Ist dies der Fall, so wird ein bestimmter Programmteil ausgeführt. Dieser Programmteil erzeugt die jeweilige Tonfolge. Jeder Programmteil steht dabei für eine bestimmte Folge von Tönen. Die einzelnen Töne werden über einen bestimmten Befehl (tone) ausgegeben. Die Dauer der Tonausgabe für eine bestimmte Zeit wird durch einen weiteren Befehl (delay) festgelegt. Danach folgt der nächste Ton, bis alle fünf Töne der Tonfolge abgespielt wurden. Nach dem Abspielen der Tonfolge verstummt der Lautsprecher so lange, bis wieder eine der vier Tasten gedrückt wird.

Testaufbau auf Steckboards
Testaufbau auf Steckboards

Die Frequenzen der Tonfolgen

 

Die Frequenzen der Tonfolgen sind genau festgelegt. Jede Tonhöhe in Hertz steht für eine bestimmte Ziffer:

 

1 (1060Hz), 2 (1160Hz), 3 (1270Hz), 4 (1400Hz), 5 (1530Hz), 6 (1670Hz), 7 (1830Hz), 8 (2000Hz), 9 (2200Hz), 0 (2400Hz) und R (2600Hz).

 

Der Buchstabe R ist ein so genannter Alternativton. Er wird dann eingesetzt, wenn innerhalb einer Tonfolge zweimal die Ausgabe der gleichen Ziffer direkt hintereinander (beispielsweise 12880) erfolgt. In diesem Falle wird also die Folge 128R0 übertragen, um den zweiten Ton für die gleiche Ziffer besser vom ersten unterscheiden zu können. Der Buchstabe R bedeutet in diesem Fall also so viel wie Wiederholung.

Das Programm

Das Programm kann mit der kostenlosen Software "Arduino IDE" auf den Arduino übertragen werden.

int Taster1=4; // Taster1 an Pin4 angeschlossen
int Taster2=5; // Taster2 an Pin5 angeschlossen
int Taster3=6; // Taster3 an Pin6 angeschlossen
int Taster4=7; // Taster4 an Pin7 angeschlossen
int Tasterstatus1=0; // Variable um den Status des Tasters 1 zu speichern.
int Tasterstatus2=0; // Variable um den Status des Tasters 2 zu speichern.
int Tasterstatus3=0; // Variable um den Status des Tasters 3 zu speichern.
int Tasterstatus4=0; // Variable um den Status des Tasters 4 zu speichern.

void setup()
{
pinMode(Taster1, INPUT); // Taster1 als Eingang festlegen
pinMode(Taster2, INPUT); // Taster2 als Eingang festlegen
pinMode(Taster3, INPUT); // Taster2 als Eingang festlegen
pinMode(Taster4, INPUT); // Taster2 als Eingang festlegen
}

void loop()
{
Tasterstatus1 = digitalRead(Taster1); // Status von Taster1 auslesen (HIGH oder LOW)
Tasterstatus2 = digitalRead(Taster2); // Status von Taster2 auslesen (HIGH oder LOW)
Tasterstatus3 = digitalRead(Taster3); // Status von Taster3 auslesen (HIGH oder LOW)
Tasterstatus4 = digitalRead(Taster4); // Status von Taster4 auslesen (HIGH oder LOW)

if (Tasterstatus1 == HIGH) // Tonfolge 2-4-7-3-0, wenn der Taster 1 gedrückt ist
{
tone(8, 1160); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1400); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1830); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1270); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 2400); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
noTone(8); // Ausschalten des Tons.
delay (1000); // mit der Dauer von 1s
}

if (Tasterstatus2 == HIGH) // Tonfolge 2-3-5-8-3, wenn der Taster 2 gedrückt ist
{
tone(8, 200);
tone(8, 1160); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1270); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1530); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 2000); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1270); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
noTone(8); // Ausschalten des Tons.
delay (1000); // mit der Dauer von 1s
}

if (Tasterstatus3 == HIGH) // Tonfolge 5-4-8-3-2, wenn der Taster 3 gedrückt ist
{
tone(8, 200);
tone(8, 1530); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1400); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 2000); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1270); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1160); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
noTone(8); // Ausschalten des Tons.
delay (1000); // mit der Dauer von 1s
}

if (Tasterstatus4 == HIGH) // Tonfolge 1-8-4-2-7, wenn der Taster 4 gedrückt ist
{
tone(8, 200);
tone(8, 1060); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 2000); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1400); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1160); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
tone(8, 1830); // Ausgabe eines Tons.
delay (70); // mit der Dauer von 70ms
noTone(8); // Ausschalten des Tons.
delay (1000); // mit der Dauer von 1s
}
}

Das Programm für die Tonerzeugung mit dem Arduino

 

  • Das Programm beginnt mit der Tastaturabfrage, in der zunächst die Anschlüsse der einzelnen Taster den Eingängen des Arduino zugeordnet werden. Die Anschlüsse am Mikrocontroller müssen natürlich noch als Eingänge festgelegt werden. Schließlich ist es möglich, einen Anschluss am Arduino sowohl als Eingang als auch als Ausgang zu schalten.
  • Danach wird der Mikrocontroller veranlasst, die Eingänge abzufragen, um bei einem Tastendruck den entsprechenden Programmteil zu starten. Im letzten Teil des Programms werden dann die einzelnen Tonfolgen abgespielt, sobald eine bestimmte Taste gedrückt wurde. (Beispiel: if (Tasterstatus1 == HIGH) // Tonfolge 2-4-7-3-0, wenn der Taster 1 gedrückt ist).
  • Beim Drücken einer Taste erfolgt die Ausgabe der eigentlichen Tonfolge durch den Programmteil innerhalb der {}. Zunächst beginnt es mit der Ausgabe fünf Töne durch die Befehle tone und delay.
  • Nach der Ausgabe der Töne wird zunächst die Tonausgabe mithilfe des Befehls noTone deaktiviert. Anschließend folgt eine Pause von einer Sekunde durch einen weiteren Befehl delay, ehe die Schaltung wieder in Bereitschaft geschaltet wird. Durch die Pause von einer Sekunde soll verhindert werden, dass bei einem längeren Tastendruck gleich mehrere Tonfolgen direkt hintereinander und ohne Unterbrechung abgespielt werden.
Werbung
Besucherzaehler

Suche

Werbung