Celsa Strommessgerät


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Morse - Sender
(Ton, Licht, Arduino)


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.

Aktive Buzzer

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

Taster

SOS

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.

LCD_16x2

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

LCD 16x2

I2C- Schnittstelle

I2C - Schnittstelle (Kann an Display angelötet werden)

Display-Steuerung ohne Treiber


Matrix

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.

Matrix

Matrix 1088AB, blau, gemeinsame Kathode

Interne Verschaltung

Interne Verschaltung der 8x8 Matrix 1088AB

Arduino nano

Arduino Nano

Arduino (Einführung in die Programmierung)

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.

Spannungsversorgung

Spannungsversorgung (Ein Modul mit LM2596)

LM2596

Der Schaltplan

Schaltplan

Schaltplan

Testschaltung

Testschaltung

Testschaltung

Das Programm

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();
     }
}       
// **********************************************************************************************        


Kurzvideo

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz