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.
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.
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 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