Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Sneak Peeks.
Sonderrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [here] und treten Sie noch heute bei!
4.4 Morsecode-Generator
Einführung
In diesem Projekt erstellen wir einen Morsecode-Generator mit einem Raspberry Pi. Sie können über das Terminal eine Zeichenfolge eingeben, und das System gibt die entsprechenden Morsecode-Signale über einen Summer und eine LED aus. Dieses Projekt demonstriert nicht nur die grundlegende GPIO-Steuerung, sondern führt auch in den Morsecode ein – eine faszinierende Kommunikationsmethode, die historisch in der Telegrafie verwendet wurde.
Was Sie benötigen
Die folgenden Komponenten werden benötigt:
KOMPONENTENBESCHREIBUNG |
KAUFLINK |
|---|---|
- |
|
- |
|
Raspberry Pi |
- |
Schaltplan
Der schematische Schaltplan ist unten dargestellt:
Verdrahtungsdiagramm
Bauen Sie die Schaltung gemäß dem folgenden Diagramm auf. Achten Sie auf die richtige Polarität des Summers (der Anschluss mit dem „+“-Zeichen ist der Pluspol):
Beispiel ausführen
Der gesamte in diesem Tutorial verwendete Beispielcode befindet sich im Verzeichnis ai-lab-kit.
Führen Sie die folgenden Schritte aus, um das Beispiel auszuführen:
cd ~/ai-lab-kit/python/
sudo python3 4.4_MorseCodeGenerator.py
Nach dem Start des Skripts können Sie im Terminal eine Nachricht eingeben, und das System gibt sie mithilfe eines Summers und einer LED als Morsecode aus.
Jeder Punkt wird durch einen kurzen Ton bzw. ein kurzes Blinken dargestellt, und jeder Strich durch einen längeren Ton bzw. ein längeres Blinken.
Buchstaben werden durch eine kurze Pause getrennt, und Leerzeichen in der Nachricht erzeugen eine längere Pause zwischen Wörtern.
Das Programm wartet fortlaufend auf neue Eingaben und wird sicher beendet, wenn Sie
Ctrl + Cdrücken. Dabei werden sowohl der Summer als auch die LED ausgeschaltet.
Code
Nachfolgend finden Sie den Python-Code für dieses Projekt:
#!/usr/bin/env python3
from fusion_hat.pin import Pin, Mode
import time
# Initialize Buzzer and LED to GPIO pins
BeepPin = Pin(22, mode=Mode.OUT)
ALedPin = Pin(17, mode=Mode.OUT)
# Morse code representation for characters
MORSECODE = {
'A': '01', 'B': '1000', 'C': '1010', 'D': '100', 'E': '0', 'F': '0010', 'G': '110',
'H': '0000', 'I': '00', 'J': '0111', 'K': '101', 'L': '0100', 'M': '11', 'N': '10',
'O': '111', 'P': '0110', 'Q': '1101', 'R': '010', 'S': '000', 'T': '1',
'U': '001', 'V': '0001', 'W': '011', 'X': '1001', 'Y': '1011', 'Z': '1100',
'1': '01111', '2': '00111', '3': '00011', '4': '00001', '5': '00000',
'6': '10000', '7': '11000', '8': '11100', '9': '11110', '0': '11111',
'?': '001100', '/': '10010', ',': '110011', '.': '010101', ';': '101010',
'!': '101011', '@': '011010', ':': '111000',
}
# Timing (seconds)
UNIT = 0.25 # base unit
DOT = UNIT / 2 # dot length
DASH = UNIT # dash length
INTRA_SYMBOL_GAP = UNIT / 2 # gap between dot/dash in one letter
LETTER_GAP = UNIT # gap between letters
WORD_GAP = UNIT * 2 # gap between words (space)
def on():
"""Turn on the buzzer and LED."""
BeepPin.on()
ALedPin.on()
def off():
"""Turn off the buzzer and LED."""
BeepPin.off()
ALedPin.off()
def beep(duration):
"""Beep (and flash LED) for 'duration' seconds."""
on()
time.sleep(duration)
off()
def play_symbol(symbol):
"""Play one morse symbol: '0' (dot) or '1' (dash)."""
if symbol == '0':
beep(DOT)
elif symbol == '1':
beep(DASH)
time.sleep(INTRA_SYMBOL_GAP)
def morsecode(text):
"""
Convert text to Morse code and output via buzzer+LED.
Supports spaces between words and ignores unsupported characters.
"""
for ch in text:
if ch == ' ':
# Space means word gap
time.sleep(WORD_GAP)
continue
# Skip unsupported characters instead of crashing
if ch not in MORSECODE:
continue
pattern = MORSECODE[ch]
for sym in pattern:
play_symbol(sym)
# Pause between letters
time.sleep(LETTER_GAP)
def destroy():
"""Ensure buzzer and LED are turned off."""
BeepPin.off()
ALedPin.off()
print("")
try:
while True:
code = input("Please input the messenger:").upper()
print(code)
morsecode(code)
except KeyboardInterrupt:
destroy()
Dieses Python-Skript wandelt eine vom Benutzer eingegebene Nachricht in Morsecode um und gibt sie mithilfe eines Summers und einer LED aus. So funktioniert es:
Morsecode-Umwandlung: Das Skript übersetzt den eingegebenen Text (Buchstaben, Zahlen und einige Sonderzeichen) mithilfe eines vordefinierten Wörterbuchs
MORSECODEin Morsecode.Audio-visuelle Morsecode-Ausgabe:
Für jeden Punkt (
0) werden der Summer und die LED für eine kurze Dauer aktiviert (die Hälfte der Pausenzeit).Für jeden Strich (
1) werden der Summer und die LED für eine längere Dauer aktiviert (entspricht der Pausenzeit).
Benutzerinteraktion:
Benutzer geben eine Nachricht ein, und das System wandelt sie in entsprechende Morsecode-Signale um und gibt sie aus.
Das Programm fragt kontinuierlich nach neuen Nachrichten, bis es unterbrochen wird.
Sauberes Beenden: Bei
Ctrl+Cbeendet das Skript die Ausführung, schaltet Summer und LED aus und beendet sich ordnungsgemäß.
Code verstehen
Einrichtung der Komponenten:
Der Summer und die LED werden auf den GPIO-Pins 22 bzw. 17 initialisiert.
Morsecode-Wörterbuch:
Morsecode wird mit ‚0‘ für Punkte (kurze Signale) und ‚1‘ für Striche (lange Signale) dargestellt. Zum Beispiel wird ‚A‘ als „01“ repräsentiert.
Signalfunktionen:
Die Funktionen
on()undoff()aktivieren bzw. deaktivieren den Summer und die LED.Die Funktion
beep()kombiniert diese Funktionen, um ein Signal mit einer bestimmten Dauer zu erzeugen.
Morsecode-Umwandlung:
Die Funktion
morsecode()verarbeitet jeden Buchstaben der eingegebenen Nachricht. Für jedes Zeichen wird mithilfe des Morsecode-Wörterbuchs eine Folge von Signalen ausgegeben.Hauptschleife:
Das Programm fordert den Benutzer fortlaufend zur Eingabe einer Nachricht auf und wandelt diese in Morsecode-Signale um. Die Schleife kann jederzeit sicher mit
Ctrl+Cbeendet werden.
Fehlerbehebung
Summer oder LED funktioniert nicht:
Ursache: Falsche Verdrahtung oder falsche GPIO-Konfiguration.
Lösung:
Überprüfen Sie, ob der Summer mit GPIO 22 und die LED mit GPIO 17 verbunden ist.
Testen Sie Summer und LED separat mit einfachen GPIO-Steuerungsskripten.
Morsecode-Ausgabe ist ungenau:
Ursache: Eingabezeichen sind nicht im Wörterbuch
MORSECODEenthalten.Lösung:
Stellen Sie sicher, dass die Eingabe nur unterstützte Zeichen enthält (A–Z, 0–9 und einige Symbole).
Erweitern Sie das Wörterbuch
MORSECODE, um zusätzliche Zeichen zu unterstützen.
Signale sind zu schnell oder überlappen sich:
Ursache: Zu kurze Pausen- oder Signaldauer.
Lösung: Passen Sie die Variable
pausein der Funktionmorsecode()an, um eine klarere Ausgabe zu erhalten:pause = 0.5 # Increase pause duration for slower output
Eingabe wird nicht erkannt:
Ursache: Probleme mit der Eingabeumgebung (z. B. keine Konsole verfügbar).
Lösung: Stellen Sie sicher, dass das Skript in einem Terminal oder einer Umgebung ausgeführt wird, die
input()unterstützt.
Erweiterungsideen
Anpassbare Geschwindigkeit: Ermöglichen Sie Benutzern, die Geschwindigkeit der Morsecode-Ausgabe durch Eingabe einer eigenen Pausenzeit festzulegen.
pause = float(input("Enter pause duration (seconds): "))
Ausgabe auf mehreren Geräten: Fügen Sie eine weitere LED oder einen weiteren Summer hinzu, um den Morsecode gleichzeitig auf mehreren Geräten auszugeben.
Morsecode-Protokollierung: Speichern Sie für jede Nachricht die Morsecode-Sequenz in einer Datei:
with open("morse_log.txt", "a") as log_file: log_file.write(f"{message} -> {morse_sequence}\n")
Fazit
Dieses Projekt ist eine unterhaltsame Möglichkeit, Morsecode und seine Anwendung mit dem Raspberry Pi kennenzulernen. Mit einfachen Komponenten wie einem Summer und einer LED können Sie ein System erstellen, das historische Kommunikationsmethoden mit moderner Elektronik verbindet. Experimentieren Sie mit dem Code, um Ihr Verständnis zu vertiefen und das Projekt nach Ihren eigenen Ideen weiterzuentwickeln!