Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt

Komponenten und Materialien

Arduino UNO × 2
Steckbrett (Breadboard) × 2
Laser-Transmitter (Autodesk LASER TRANSMITTER) × 1
Fotowiderstand (LDR) × 1
Steckbrücken (Jumper Wires) × 1

Software

Projektbeschreibung

Morsecode

Morsecode wandelt alphanumerische Zeichen in Punkte (kurz) und Striche (lang) um. Jedes Zeichen hat ein einzigartiges Muster. Dieses Projekt implementiert Sender und Empfänger einer optischen Morsecode-Strecke per Laserlicht. Der Empfänger-Algorithmus ist besonders einfach und basiert auf Zeitmessung von High/Low-Phasen.

Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt

Schritt 1: Sender (Transmitter)

Der Laser wird an Digitalpin 13 (PWM) angeschlossen (Anode), GND an Arduino-GND.

Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt
Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt
Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt

Algorithmus (Sender)

  1. Zu sendender Text als char-Array vorgeben.
  2. Laser-Pin definieren (Pin 13).
  3. Morse-Geschwindigkeit einstellen (dotLen = 200 ms).
  4. Punkt = HIGH für dotLen, Strich = HIGH für 3×dotLen.
  5. Pause zwischen Elementen = dotLen, zwischen Zeichen = 3×dotLen, zwischen Wörtern = 7×dotLen.
  6. Jedes Zeichen per switch-case in Punkte/Striche umsetzen und Laser entsprechend schalten.

Schritt 2: Empfänger (Receiver)

LDR mit 10 kΩ Pull-Down an A0: LDR an 5 V, anderer Pin an A0 und über 10 kΩ an GND. Wichtig: LDR vor Fremdlicht schützen (z. B. schwarze Papierkuppel).

Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt
Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt
Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt
Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt

Algorithmus (Empfänger) – Kernidee

  1. Ohne Laser liefert LDR Werte < 1000. Schwelle auf 1000 gesetzt.
  2. Wenn Wert > 1000: Laser erkannt → in Messschleife eintreten (14 Samples à 200 ms).
  3. Quantisierung: Wert > 1000 → ‚1‘ (Licht an), sonst ‚0‘ (Licht aus).
  4. Zähler a für Anzahl ‚1‘, f für Anzahl ‚0‘.
  5. Jedes Morsezeichen hat ein charakteristisches Paar (a, f). Per if-Kette zuordnen und ausgeben.

Beispiel: ‚a‘ = 4 Einsen, 10 Nullen; ‚b‘ = 6/8; ‚e‘ = 1/13; ‚s‘ = 3/11 etc.

Einschränkung: Der Code deckt nur eine Teilmenge der Zeichen ab. Erweiterung auf volles Alphabet durch weitere if-Zweige oder Lookup-Tabelle möglich.

Code

CODE-1: Sender (Laser-Steuerung)

int led13 = 13;
int dotLen = 200;
int dashLen = dotLen * 3;
int elemPause = dotLen;
int Spaces = dotLen * 3;
int wordPause = dotLen * 7;

char stringToMorseCode[] = "HELLO WORLD"; // Beispieltext

void setup() {
  pinMode(led13, OUTPUT);
}

void loop() {
  for (int i = 0; i < sizeof(stringToMorseCode) - 1; i++) {
    char tmpChar = toLowerCase(stringToMorseCode[i]);
    GetChar(tmpChar);
  }
  LightsOff(8000); // Lange Pause vor Wiederholung
}

void MorseDot() { digitalWrite(led13, HIGH); delay(dotLen); }
void MorseDash() { digitalWrite(led13, HIGH); delay(dashLen); }
void LightsOff(int delayTime) { digitalWrite(led13, LOW); delay(delayTime); }

void GetChar(char tmpChar) {
  switch (tmpChar) {
    case 'a': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'b': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'c': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'd': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'e': MorseDot(); LightsOff(elemPause); break;
    case 'f': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'g': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'h': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'i': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'j': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'k': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'l': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'm': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'n': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'o': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'p': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 'q': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'r': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 's': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    case 't': MorseDash(); LightsOff(elemPause); break;
    case 'u': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'v': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'w': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'x': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'y': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'z': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    default: LightsOff(Spaces); // Leerzeichen / unbekannt
  }
}

CODE-2: Empfänger (LDR-Auswertung)

int sensorPin = 0;
int sensorValue = 0;
int a, f;

void setup() {
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  if (sensorValue > 1000) {
    a = 0; f = 0;
    for (int i = 0; i <= 13; i++) {
      sensorValue = analogRead(sensorPin);
      if (sensorValue > 1000) { a++; }
      else { f++; }
      delay(200);
    }
    // Zeichenzuordnung
    if (a == 4 && f == 10) Serial.print("a");
    if (a == 6 && f == 8)  Serial.print("b");
    if (a == 8 && f == 6)  Serial.print("c");
    if (a == 1 && f == 13) Serial.print("e");
    if (a == 2 && f == 12) Serial.print("i");
    if (a == 10 && f == 4) Serial.print("j");
    if (a == 7 && f == 7)  Serial.print("g");
    if (a == 9 && f == 5)  Serial.print("o");
    if (a == 3 && f == 11) Serial.print("s");
    // ... weitere Zeichen ergänzen
    a = 0; f = 0;
  }
  delay(200);
}

Gehäuse / Custom Parts

Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt

Schaltplan

Morsecode-Kommunikation mit Lasermodul – Duales Arduino-Projekt

Herstellungsprozess

  1. Umfassender Leitfaden zur Lasermarkierung: Arten, Vorteile und Anwendungen
  2. Laserpointer: Design, Fertigung und Sicherheitsübersicht
  3. Halbleiterlaser: Präzise Lichtgenerierung für moderne Technologie
  4. Strichcodescanner: Technologie, Design und Zukunftstrends
  5. Laser-gelenkte Lenkflugkörper: Entwicklung, Fertigung und strategische Bedeutung
  6. Interaktiven Laser-Projektor mit Zigbee-Sensoren & Gravio Edge Platform bauen
  7. UART-Kommunikation zwischen Raspberry Pi 4 und HiFive1 Boards herstellen
  8. Gesten-gesteuerter Roboter mit Raspberry Pi
  9. DTMF-Decoder mit Arduino bauen – ganz ohne zusätzlichen IC
  10. 4 Schlüsselvorteile von Low-Code-Lösungen für die industrielle Fertigung