Ein mögliches Anwendungsbeispiel für den aktiven Summer wäre ein Morsesender. Einen solchen Morsesender könnte man z.B.
für Lernzwecke benutzen. Zwar gehört Morsen mittlerweile der Vergangenheit an, doch daran wollen wir uns nicht stören. Damit unsere
Schaltung nicht allzu langweilig ausfällt, wird sie zusätzlich mit einer Lichtquelle, Arduino Nano und einem LCD-Display
ausgestattet.
Active Buzzer (Summer). Bei aktivem Summer wird ein Lautsprecher und die einen Ton erzeugende Elektronik in einem
Gehäuse untergebracht. Vorteil: äußerst einfache Ansteuerung. Nachteil: nur ein Ton.
Die Schaltung verfügt über zwei Taster. Mit dem Taster S1 kann manuell gemorst werden. Das Signal von dem Taster wird
unverändert an beide Signalquellen weitergeleitet. In dem Fall erfolgt die Weitergabe über Arduino. Diese Aufgabe könnte man auch anders
realisieren. Die beiden Abnehmer könnten direkt an den Taster angeschlossen werden.
Taster
SOS - Das Notsignal (drei kurz, drei lang, drei kurz)
Mit dem zweiten Taster wird ein automatisches Morsen gestartet. Diese Aufgabe übernimmt dann komplett Arduino. Es wird ein
kompletter Satz gesendet. Während der Übertragung wird der Satz zusätzlich auf dem Display angezeigt. Darüber hinaus erscheint auf dem Display auch
der Buchstabe, der gerade mit Morse-Zeichen gesendet wird. So kann man zu jedem Zeitpunkt nachvollziehen, ob Arduino seinen Job richtig
erledigt.
In der Schaltung kommt ein zweizeiliges LCD-Display (2x16, HD44780 Chip) zum Einsatz. Die Kommunikation mit dem Arduino erfolgt über den
Treiber FC-113 (I2C-Bus).
Das Display verfügt über 16 Anschlüsse und kann auch ohne Treiber direkt von Mikrocontroller angesteuert werden. Bei Einsatz
von Arduino kann hier die Bibliothek „LiquidCrystal.h“ verwendet werden. Die Pinbelegung sieht wie folgt aus:
1 - VSS – GND
2 – VDD – 5V
3 – V0 – Kontrast
4 – Register (0-Befehlsregister, 1- Datenregister)
5 – RW (0: Write Modus, 1- Read Modus
6 – E – Taktsignal
7 – D0 – Datenleitung 0
8 – D1 – Datenleitung 1
9 – D2 – Datenleitung 2
10 – D3 – Datenleitung 3
11 – D4 – Datenleitung 4
12 – D5 – Datenleitung 5
13 – D6 – Datenleitung 6
14 – D7 – Datenleitung 7
15 – A – Hintergrundbeleuchtung 5V
16 – K – Hintergrundbeleuchtung GND
LCD 16x2
I2C - Schnittstelle (Kann an Display angelötet werden)
Die Aufgabe der Lichtquelle für die optischen Signale übernimmt die 8x8 Matrix 1088AB. Die 64 Leuchtdioden, die die
Matrix bilden, leuchten blau. Dabei handelt es sich um eine Matrix mit gemeinsamer Kathode. Da in der Schaltung die Leuchtdioden nicht
einzeln leuchten müssen, werden sie alle einfach zusammengeschaltet. Auf diese Weise wird nur ein Arduino-Ausgang für diese Lichtquelle
benötigt. Jede Leuchtdioden-Spalte wird mit einem Widerstand von 2,2k abgesichert. Somit beträgt der Strom pro Spalte ca. 2,3 mA. Bei
acht Spalten ergibt sich ein Gesamtstrom von 18 mA.
Als Spannungsversorgung werden 5V benötigt. In diesem Fall kommt ein Spannungsregler-Modul mit dem Chip LM2596 zum Einsatz.
Mit diesem Spannungsregler kann am Ausgang eine Spannung im Bereich 1,2 – 37VDC eingestellt werden. Die Eingangsspannung liegt im
Bereich 4,5 bis 40V. Das Modul kann mit einem Strom bis zu 3 A belastet werden.
Die Schaltung arbeitet in zwei Modi. Mit dem Taster S1 (Arduino Pin D3) können die Morsesignale per Hand generiert werden.
Das Programm leitet hier das Signal vom Eingang einfach an Ton- und Lichtquelle unverändert weiter.
Mit dem Taster S2 ((Arduino Pin D6) wird eine automatische Morse-Übertragung gestartet. Es wird der Text gesendet, der sich in der
Variable „Nachricht“ befindet. Die Buchstaben werden nacheinander abgearbeitet. Der Morsecode, der jedem Zeichen (Buchstabe, Ziffer etc)
zugeordnet ist, ist in der Variable „Zeichen“ gespeichert. Die einzige Schwierigkeit bei der Abarbeitung des Programms besteht darin, jedem
Signal und jeder Pause die richtige Zeitspanne zuzuordnen. Die Basiszeit, die kürzeste Zeitspanne, wird in der Variable Dit angegeben.
Im Programm 100 ms. Die Länge von Dit bestimmt das Tempo der Übertragung. Die Zeiten für Symbole und Pausen können mit Dits
ausgedrückt werden:
Symbol Punkt = 1 Dit
Symbol Strich = 3 Dit
Pause zwischen Symbolen = 1 Dit
Pause zwischen Buchstaben (Zeichen) = 3 Dit
Pause zwischen Wörtern = 7 Dit
Diese Regel gilt allerdings nicht für den Notruf SOS. Hier beträgt die Pause zwischen den Zeichen genauso wie zwischen den Symbolen 1 Dit.
Das gerade gesendete Zeichen wird inklusive des Codes auf dem LCD Display angezeigt. Das Display korrespondiert mit dem Arduino über
den I2C-Bus. Damit das möglich ist, wird an das Programm die Bibliothek LiquidCrystal_I2C.h angebunden. Infos über die Bibliothek findet
man im Internet unter https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library.
// **********************************************************************************************
// Morse Sender
// Licht + Ton (aktive Buzzer)
// Arduino Nano, IDE 1.8.13
// **********************************************************************************************
#include<LiquidCrystal_I2C.h> // Display Bibliothek
LiquidCrystal_I2C lcd(0x27,16,2); // Display 16x2
int Sende_Taster = 3;
int Licht_Sender = 2;
int Ton_Sender = 4;
int Auto_Taster = 6;
int Dit = 100; // Dit in ms
String Zeichen_Code;
int i, j;
int Zeit_Faktor;
// Morse Code
String Zeichen [38][2] = { {"A", ".-"}, {"B", "-..."}, {"C", "-.-." }, {"D", "-.." },
{"E", "." }, {"F", "..-." }, {"G", "--." }, {"H", "...." },
{"I", ".." }, {"J", ".----" }, {"K", "-.-" }, {"L", ".-.." },
{"M", "--" }, {"N", "-." }, {"O", "---" }, {"P", ".--." },
{"Q", "--.-" }, {"R", ".-." }, {"S", "..." }, {"T", "-" },
{"U", "..-" }, {"V", "...-" }, {"W", ".--" }, {"X", "-..-" },
{"Y", "-.--" }, {"Z", "--.." }, {"1", ".----" }, {"2", "..---" },
{"3", "...--" }, {"4", "....-" }, {"5", "....." }, {"6", "-...." },
{"7", "--..." }, {"8", "---.." }, {"9", "----." }, {"0", "-----" },
{",", "--..--" }, {".", ".-.-.-" }
};
// Zitat von Mahatma Ghandi
String Nachricht = "DAS GUTE ZU KENNEN, ES ABER NICHT ZU TUN, IST FEIGHEIT.";
void setup() {
lcd.init(); // Display initialisieren
lcd.backlight(); // Hintergrundbeleuchtung
lcd.clear();
pinMode (Licht_Sender, OUTPUT);
pinMode (Ton_Sender, OUTPUT);
pinMode (Sende_Taster, INPUT_PULLUP);
pinMode (Auto_Taster, INPUT_PULLUP);
}
void loop() {
lcd.setCursor(2, 0); // Start Anzeige
lcd.print("Morsesender");
digitalWrite (Licht_Sender, LOW); // Licht Signal AUS
digitalWrite (Ton_Sender, LOW); // Ton Signal AUS
if (digitalRead(Sende_Taster) == LOW) { // per Hand senden
digitalWrite (Licht_Sender, HIGH);
digitalWrite (Ton_Sender, HIGH);
}
// Nachricht automatisch senden
if (digitalRead(Auto_Taster) == LOW) {
// Gesamte Nachricht durchlaufen
for (i = 0; i<Nachricht.length(); i++) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print (Nachricht.substring(i,i+16)); // Text obere Zeile
Zeichen_Code = "Pause"; // Wortabstand
for (j=0; j<38; j++) {
if (Zeichen [j][0] == Nachricht.substring (i,i+1)) {
Zeichen_Code = Zeichen [j][1]; // Code Zeichen aktuell
}
}
lcd.setCursor(0, 1);
lcd.print (Nachricht.substring (i,i+1)); // Aktuelles Zeichen untere Zeile
lcd.print (" = ");
lcd.print (Zeichen_Code); // und dazugehöriger Code
// Zeichen Senden
if (Nachricht.substring (i,i+1) != " ") {
for (j=0; j<Zeichen_Code.length(); j++) {
if (Zeichen_Code.substring (j,j+1) == ".") { Zeit_Faktor = 1; }
if (Zeichen_Code.substring (j,j+1) == "-") { Zeit_Faktor = 3; }
digitalWrite (Licht_Sender, HIGH); // Signal Licht senden
digitalWrite (Ton_Sender, HIGH); // Signal Ton senden
delay (Dit * Zeit_Faktor);
digitalWrite (Licht_Sender, LOW); // Licht Signal Aus
digitalWrite (Ton_Sender, LOW); // Ton Signal Aus
delay (Dit); // Dit = Mindestwartezeit
}
delay (Dit * 2); // Wartezeit nach Zeichen (3 Dit)
}
if (Nachricht.substring (i,i+1) == " ") {
delay (Dit * 4); // Wartezeit nach Wort (7 Dit)
}
}
lcd.clear();
}
}
// **********************************************************************************************