Frequenzumrichter Blemo ER 21


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Morse - Sender mit Raspberry Pi
(aktiver Summer)


In dem Versuch übernimmt Raspberry Pi die Rolle eines Morsesenders und damit die Übersetzung einzelnen Alphabet-Buchstaben in den Morse-Code. Die gesendeten Signale werden mit einem aktiven Summer hörbar gemacht. Zur Ergänzung bekommt die Schaltung eine LED-Matrix. Neben Tonsignalen werden somit auch Lichtsignale gesendet.
Die Eingabe der Nachricht, die gesendet werden soll, erfolgt über die Tastatur. Der Text ist dann auf dem Bildschirm auch sichtbar. Zusätzlich wird beim Übertragen das gerade gesendete Zeichen mit dem zugehörigen Morse-Code auf dem Bildschirm zu sehen sein.

Raspberry Pi 3B

Raspberry Pi 3B

Raspberry Pi


Aktiver Summer

Aktiver Summer 5V

Den aktiven Summer könnte man auch direkt an einen GPIO-Ausgang des Raspberry Pi anschließen. Seine Stromaufnahme liegt bei 13 mA. Das würde ein GPI-Ausgang problemlos verkraften, es empfiehlt sich jedoch, die GPIOs so wenig wie möglich zu belasten und eventuellen Abnehmer aus einer separaten Stromquelle zu versorgen. Für die Testzwecke benutzen wir hier als Spannungsversorgung den 5V-Ausgang, der uns Raspberry Pi am Pin 2 und 4 zur Verfügung stellt. Als Schalter kommt der Transistor BD437 zum Einsatz. Er ist mit einer Leistung von über 30 W für diese Aufgabe völlig überdimensioniert. Dafür kann man hier noch weitere Abnehmer anschließen.

Matrix

LED-Matrix

Als Lichtquelle für die optischen Signale schließen wir zusätzlich an Raspberry Pi eine aus 64 blauen LEDs bestehende 8x8 Matrix an. Sie wird zusammen mit dem Summer an den Transistor angeschlossen. Die einzelnen LEDs der Matrix sind für den Versuch zusammengeschlossen.

Transistor BD437

Transistor BD437

BD473


Taster für manuelles Morsen

Taster für manuelles Morsen

Mit dem Taster S1 kann manuell gemorst werden. Der Taster ist direkt, genauso wie der Ausgang von Raspberry Pi, an die Basis des Schalttransistors T1 angeschlossen. Damit der Ausgang keinen Schaden nimmt, wird er von dem Taster mit einer Diode (1N4148) abgetrennt.

Der Schaltplan

Schaltplan

Schaltplan

Testschaltung

Testschaltung

Testschaltung

Das Programm

Mit dem Entry-Widget wird dem Benutzer ein Eingabefeld, mit dessen Hilfe ein Text eingegeben werden kann, zur Verfügung gestellt. Nach der Eingabe des Textes wird mit dem Button "Senden" die Übertragung gestartet. Es werden nacheinander alle Zeichen (Buchstaben) des eingegebenen Textes abgearbeitet. Vor der eigentlichen Übertragung der Symbole im Morsecode (Punkt, Strich) wird die Variable "Zeichen_Code" untersucht. Hier sind die Morse-Codes für alle Zeichen gespeichert. Die Zeichen_Code-Variable enthält für Testzwecke nur die Codes für die Buchstaben. Sie muss bei Bedarf um Ziffern und Sonderzeichen erweitert werden.
Bei der Übertragung spielt die Variable "Dit" die entscheidende Rolle. Sie stellt die zeitliche Basis für alle Symbole und Pausen dar. Je nachdem, wie sie eingestellt ist, erfolgt die Übertragung schneller oder langsamer. Bezogen auf "Dit" verhalten sich die zeitlichen Längen der Symbole und Pausen wie folgt:

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

Das gerade übertragene Zeichen wird mit dem dazugehörigen Morse-Code in dem Label "Label_Zeichen" angezeigt. So kann man stets die aktuelle Übertragung verfolgen. Mit dem Programm ist auch eine Liveübertragung möglich. Man aktiviert mit dem Button "Senden" zuerst die Übertragung und erst dann gibt den Text ein. Das Programm startet dann das Morsen noch während der Texteingabe. Hier ist allerdings darauf zu achten, dass man schnell genug den Text eingibt. Andernfalls können falsche Pausen zwischen den Zeichen entstehen.


# -----------------------------------------------------------------
# Morsen mit Raspi
# Aktiver Summer + 8x8-Matrix
# Raspberry Pi 3B, Python 3.7.3
# -----------------------------------------------------------------

from tkinter import*
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(40,GPIO.OUT)                        # Signalgeber Ton+Licht 

                                               # Morse Code 
Zeichen_Code = [["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", "--.."], [" ", " "] ]

Zeichen_Nr = 0
Zeichen_Pos = 0
Dit = 0.15
Anzeige_OK = 1
Zeichen = ""

# Zeichen + Code ermitteln ............................................ 
def Zeichen_und_Code (Text):
    global Zeichen_Nr
    global Zeichen
    global Zeichen_Pos
    Zeichen = Text[Zeichen_Nr-1:Zeichen_Nr].upper()
    for i in range (27):                       # Zeichen_Code durchsuchen 
        if Zeichen_Code [i][0] == Zeichen:     # Zeichen gefunden 
            Anzeige = Zeichen + "   " + Zeichen_Code [i][1]   
            Label_Zeichen.configure (text = Anzeige)
            Zeichen_Pos = i

# Fenster Parameter ............................................ 
def Start_Fenster():
    Hauptfenster.config (bg='#999999')
    Breite = Hauptfenster.winfo_screenwidth()
    Höhe = Hauptfenster.winfo_screenheight()
    Hauptfenster.geometry("%dx%d+0+0" % (Breite,Höhe))

# Zeichen senden ............................................ 
def Zeichen_Senden(Zeichen):
    Zeit_Faktor = 0
    global Zeichen_Pos
    for j in range (len(Zeichen_Code [Zeichen_Pos][1])):
        Symbol = Zeichen_Code [Zeichen_Pos][1][j:j+1]
        Zeit_Faktor = 2
        if Symbol == ".":                      # Punkt 
            GPIO.output(40, GPIO.HIGH)
            time.sleep(Dit)
        if Symbol == "-":                      # Strich 
            GPIO.output(40, GPIO.HIGH)
            time.sleep(3 * Dit)
        GPIO.output(40, GPIO.LOW)
        if Symbol == " ":                      # Wort-Pause 
            Zeit_Faktor = 6
        time.sleep(Dit)                        # Symbol-Pause 
    time.sleep(Zeit_Faktor * Dit)

# Senden ............................................ 
def Zeigen_und_Senden():
    global Zeichen_Nr
    global Anzeige_OK
    global Zeichen
    Text = Text_Eingabe.get()
    Zeichen_Anzahl = len(Text)
    if Zeichen_Nr < Zeichen_Anzahl:
        Zeichen_Nr += 1
        if Anzeige_OK == 1:                    # Zeichen + Code anzeigen 
            Zeichen_und_Code (Text)            # Zeichen + Code ermitteln 
            Zeichen_Nr -= 1
        if Anzeige_OK == -1:                   # senden 
            Zeichen_Senden (Zeichen)
        Anzeige_OK = -Anzeige_OK
    Hauptfenster.after (1, Zeigen_und_Senden)

# Hauptprogramm ............................................ 
Hauptfenster = Tk()

Start_Fenster()

# Fenster Titel ............................................ 
Titel = Label (Hauptfenster,
               bg='#999999',
               text="MORSE - SENDER",
               font=('Arial', 40, 'bold'),
               foreground="green")
Titel.place (x=370,y=-30,width=500,height=180)

# Tastatureingabe ............................................ 
Text_Eingabe = Entry (Hauptfenster,
                      font=('Arial', 30, 'bold'),
                      width=50 )
Text_Eingabe.place (x=20,y=110,width=1315,height=60)

# Zeichen Anzeige ............................................ 
Label_Zeichen = Label (Hauptfenster,
                      bd=4, bg="blue",
                      font=('Arial', 60, 'bold') )
Label_Zeichen.place (x=20,y=200,width=500,height=180)

# Senden starten ............................................ 
Button_Senden = Button (Hauptfenster,
                      bd=4, bg='#999999',
                      text="SENDEN",
                      font=('Arial', 40, 'bold'),
                      command = Zeigen_und_Senden)
Button_Senden.place (x=700,y=400,width=300,height=180)

Hauptfenster.mainloop()
 
# ----------------------------------------------------------------- 
        


Kurzvideo

Morsen mit Raspi


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz